2014年8月3日 星期日

[ORACLE] Data Guard 10g(11g也適用) Step by Step on Windows Server 2008 R2 x64 (一)

此Data Guard Step by Step共分五篇
        第一篇 本地資料庫建置
        第二篇 本地Data Guard建置
        第三篇 異地Data Guard建置
        第四篇 驗證DATA GUARD
        第五篇 本地資料庫切換到異地DATA GUARD

        版主盡量做到照這文件就可以快快樂樂建置Data Guard,但中間還是有許多相關知識須具備,若有任何問題歡迎提出討論

--第一篇 本地資料庫建置

--資料庫環境配置
--主要資料庫:IP 192.168.1.122,電腦名稱 LOCALDB,db_unique_name=myorcl
--本地Data Guard資料庫:IP 192.168.1.123,電腦名稱 DGLOCAL,db_unique_name=myorcl_STBY
--異地Data Guard資料庫:IP 192.168.1.124,電腦名稱 DGDR,db_unique_name=DR_myorcl_STBY
--ORACLE軟體安裝在c:\oracle\ora10g
--ORACLE DB在d:\oracledb
--確認archive log是否開啟(本環境已開啟)
SQL> archive log list;
 Database log mode              Archive Mode
 Automatic archival             Enabled

--確認FORCE LOGGING模式是否開啟(本環境已開啟)
SQL> SELECT force_logging FROM v$database;
 FOR
 ---
 YES

--建立STANDBY LOGFILE(依據REDO LOG建立相同數量的STANDBY REDO LOG檔案)
--查目前REDO LOG數量
SQL> select group#,member from v$logfile order by group#;
 GROUP#  MEMBER
 --------------------------------------------------------------------------------
       1  D:\ORACLEDB\ORADATA\myorcl\REDO01.LOG
       2  D:\ORACLEDB\ORADATA\myorcl\REDO02.LOG
       3  D:\ORACLEDB\ORADATA\myorcl\REDO03.LOG
       4  D:\ORACLEDB\ORADATA\myorcl\REDO04.LOG
--建立STANDBY REDO LOG
SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 5('D:\ORACLEDB\ORADATA\REDO05.LOG')size 50M;
SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 6('D:\ORACLEDB\ORADATA\REDO06.LOG')size 50M;
SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 7('D:\ORACLEDB\ORADATA\REDO07.LOG')size 50M;
SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 8('D:\ORACLEDB\ORADATA\REDO08.LOG')size 50M;

--初始化參數
--檢查db_name參數(主要與備援的db_name需相同)
SQL> show parameter db_name;
 NAME                                 TYPE        VALUE
 ------------------------------------ ----------- ----------
 db_name                              string      myorcl

--檢查db_unique_name參數
SQL> show parameter db_unique_name;
 NAME                                 TYPE        VALUE
 ------------------------------------ ----------- ---------
 db_unique_name                       string      myorcl

--設定log_archive_config參數(主要與備援的db_unique_name需不同,主要:myorcl,本地備援:myorcl_STBY,異地備援:DR_myorcl_STBY)
SQL> ALTER SYSTEM SET log_archive_config='DG_CONFIG=(myorcl,myorcl_STBY,DR_myorcl_STBY)';

--設定本地備援remote archive log參數,若有快速恢復區(fast recovery area)建議可使用FRA
SQL> ALTER SYSTEM SET log_archive_dest_2='SERVICE=myorcl_STBY LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=myorcl_STBY';

--設定異地備援remote archive log參數,若有快速恢復區(fast recovery area)建議可使用FRA
SQL> ALTER SYSTEM SET log_archive_dest_3='SERVICE=DR_myorcl_STBY LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=DR_myorcl_STBY';

--檢查log_archive_dest_state_2參數(VALUE需為enable)
SQL> show parameter log_archive_dest_state_2;
 NAME                                 TYPE        VALUE
 ------------------------------------ ----------- ------------------------------
 log_archive_dest_state_2             string      enable
--檢查log_archive_dest_state_3參數(VALUE需為enable)
SQL> show parameter log_archive_dest_state_3;
 NAME                                 TYPE        VALUE
 ------------------------------------ ----------- ------------------------------
 log_archive_dest_state_3             string      enable

--檢查log_archive_format參數
SQL> show parameter log_archive_format;
 NAME                                 TYPE        VALUE
 ------------------------------------ ----------- -----------------
 log_archive_format                   string      ARC%S_%R.%T

--變更log_archive_max_processes參數由2改為10(10g預設為2,11g預設為4,最大可設定到30)
SQL> alter system set log_archive_max_processes=10;

--檢查remote_login_passwordfile參數(remote_login_passwordfile必須設定為獨佔(EXCLUSIVE))
SQL> show parameter remote_login_passwordfile;
 NAME                                 TYPE        VALUE
 ------------------------------------ ----------- -----------
 remote_login_passwordfile            string      EXCLUSIVE

--設定FAL_SERVER參數
SQL> ALTER SYSTEM SET FAL_SERVER=myorcl_STBY,DR_myorcl_STBY;

--設定FAL_CLIENT參數
SQL> ALTER SYSTEM SET FAL_CLIENT=myorcl;

--變更STANDBY_FILE_MANAGEMENT參數(MANUAL改為AUTO)
SQL> ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=AUTO;

--資料庫服務下上,讓設定的參數生效
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP;
--主要資料庫tnsnames配置(tnsnames.ora)
# tnsnames.ora Network Configuration File: C:\oracle\ora10g\network\admin\tnsnames.ora
# Generated by Oracle configuration tools.
myorcl =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.122)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = myorcl)
    )
  )
DR_myorcl_STBY =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.124)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = myorcl)
    )
  )
myorcl_STBY =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.123)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = myorcl)
    )
  )
EXTPROC_CONNECTION_DATA =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
    )
    (CONNECT_DATA =
      (SID = PLSExtProc)
      (PRESENTATION = RO)
    )
  )
 
--主要資料庫listener配置(listener.ora)
# listener.ora Network Configuration File: C:\oracle\ora10g\network\admin\listener.ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = C:\oracle\ora10g)
      (PROGRAM = extproc)
    )
    (SID_DESC =
      (GLOBAL_DBNAME = myorcl)
      (ORACLE_HOME = C:\oracle\ora10g)
      (SID_NAME = myorcl)
    )
  )
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.122)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
    )
  )
--LISTENER服務下上
C:\Windows\system32>lsnrctl stop
C:\Windows\system32>lsnrctl start
--在主要資料庫上建立備援機所需的Controlfile
SQL> ALTER DATABASE CREATE STANDBY CONTROLFILE AS 'C:\DG_TEMP\CONTROLxx.CTL';
--在主要資料庫上建立備援機所需的PFILE
SQL> CREATE PFILE='C:\DG_TEMP\PFILEmyorcl.ORA' FROM SPFILE;
--備份資料庫
C:\Windows\system32>rman target /
RMAN> BACKUP DATABASE FORMAT='C:\DG_TEMP\%d_%s.bak' PLUS ARCHIVELOG;

第二篇 本地Data Guard建置
第三篇 異地Data Guard建置
第四篇 驗證DATA GUARD
第五篇 本地資料庫切換到異地DATA GUARD

2014年3月2日 星期日

[SQL SERVER] 查詢SQL Server執行個體上各資料庫連線數量

SELECT DB_NAME(dbid) as '資料庫名稱', COUNT(*) as '連線數'
FROM sysprocesses
GROUP BY DB_NAME(dbid)
ORDER BY COUNT(*) DESC

2014年1月14日 星期二

[RedHat] 網路卡開機時自動啓動

> 查看網路卡是否啓用 指令: ip a | grep eth
  若下圖中的eth0:< >中間沒有出現up的字眼就代表網卡沒啓動
> 啓動方式
   1. 透過vi編輯/etc/sysconfig/network-scripts/ifcfg-eth0
   2. 將ONBOOT=no改成ONBOOT=yes
   3. shutdown -r now (重開機後就會自動生效了)

2013年11月6日 星期三

[SQL SERVER] 當使用DBLINK時出現"因為連結伺服器的OLE DB提供者,無法開始分散式交易"錯誤訊息

當前端程式執行時出現如下的錯誤訊息
因為連結伺服器 "MYASSET" 的 OLE DB 提供者 "MSDASQL" 無法開始分散式交易。
連結伺服器 "MYASSET" 的 OLE DB 提供者 傳回訊息"[Microsoft][ODBC SQL Server Driver]分散式異動錯誤"。


系統環境:
主機A:Windows Server 2003 with SP2 x32 及 SQL Server 2000
主機B:Windows Server 2008 R2 x64 及 SQL Server 2008 R2 x64
主機B上的資料庫中的TABLE異動時會觸發觸發程序將主機B上的資料庫中的TABLE異動

解決步驟:
(一)在主機A
1. 依序展開[開始]->[系統管理工具]->[元件服務]

2. 在[元件服務]視窗中依序展開[元件服務]->[電腦]->在[我的電腦]上右鍵[內容]

3. 在[我的電腦 內容]視窗中的[MSDTC]頁籤按下[安全性設定]

4. 在[安全性設定]視窗中請依據如下圖方式設定,設定完後按下[確定]

5. 將主機重開機

(二)在主機B
1. 依序展開[開始]->[所有程式]->[系統管理工具]->[元件服務]

2. 在[元件服務]視窗中依序展開[元件服務]->[電腦]->在[我的電腦]->[Distributed Transaction Coordinator]->[本機 DTC]上右鍵[內容]

3. 在[本機 DTC - 內容]視窗中請依據如下圖方式設定,設定完後按下[確定]

4. 在[MSDTC 服務]視窗中按下[是]

5. 在[MSDTC 服務]視窗中按下[確定]後無須重開機

註:若主機上若有防火牆需開"分散式交易協調器"的通訊Port

參考資料:http://technet.microsoft.com/zh-tw/library/cc771891.aspx

[SQL SERVER] 在SQL Server 2008 R2 64 位元主機上 Create DBLink 到 SQL Server 2000 出現的錯誤訊息(二)

        在上一篇中嘗試過各種改法還是會有問題, 但是仔細看看每次出現的錯誤訊息都會出現一個關鍵字“OLE DB 提供者 "SQLNCLI10”,所以在想是不是還有其他的“提供者“可以用呢?

        在TECHNET中有提到許多種OLE DB的提供者做法既然SQLNCLI10不行,那就來試試ODBC,GOOD~果然換成ODBC可以了,不過效能比之前在SQL Server 2008 R2 x32對SQL Server 2000效能要差一些,不過至少是OK的。

        完成以下的設定程序後上一篇的錯誤訊息都不會產生,而且程式在執行時也不會有任何錯誤訊息了。

設定程序~
1. 若在SQL Server 2000 SP4主機上若沒執行過instcat.sql,請先執行在C:\Program Files\Microsoft SQL Server\MSSQL\Install\的路徑下的instcat.sql

2. 點選在[開始]->[系統管理工具]->[資料來源(ODBC)]
    註:一定要是64位元的ODBC,不然會有錯誤訊息

3. 在[ODBC 資料來源管理員]視窗的[系統資料來源名稱]按下[新增]

4. 在[建立新資料來源]視窗中選[SQL Server]後按下[完成]

5. 在[建立新的資料來源至SQL Server]視窗中的[名稱]及[伺服器]欄位輸入相關資訊後按[下一步]

6. 在[建立新的資料來源至SQL Server]視窗選取[由使用者所輸入的登入識別碼及密碼進行SQL SERVER帳戶驗證],將[連線到SQL Server以獲得其他設定選項的預設設定]打勾,並輸入對應的帳號密碼後按[下一步]

7. 在[建立新的資料來源至SQL Server]視窗中勾選[變更預設資料庫]並選取資料庫後按[下一步]

8. 在[建立新的資料來源至SQL Server]視窗中按[完成]

9. 在[ODBC Microsoft SQl Server 設定]視窗中按下[確定]

10. 在[ODBC 資料來源管理員] 視窗中按下[確定]

11. 開啟[SQL Server Management Studio]管理工具

12. 在[物件總管]視窗中依序展開[伺服器物件]->在[連結的伺服器]上右鍵選[新增連結的伺服器]

13. 在[新增連結的伺服器]視窗中依序輸入以下欄位
       a. 連結的伺服器:MYASSET  (註:這名稱可自取)
       b. 伺服器類型:選[其他資料來源]
            b1. 提供者:Microsoft OLE DB Provider for ODBC Drivers
            b2. 產品名稱:ASSET  (註:這名稱可自取)
            b3. 資料來源:ASSET

14. 在[新增連結的伺服器]視窗中的[安全性頁籤],點選[使用此安全性內容建立],並輸入[遠端登入]及[指定密碼]後按下[確定]



2013年11月5日 星期二

[SQL SERVER] 在SQL Server 2008 R2 64 位元主機上 Create DBLink 到 SQL Server 2000 出現的錯誤訊息(一)

需求:在SQL Server 2008 R2 64 位元主機(在此稱SQLServer01)的MYDB下的MYTABLE有個觸發程序,當MYTABLE異動時觸發程序會將異動透過DBLINK到SQL Server 2000(在此稱SQLServer02)上的TABLE

依據此篇做法在SQLServer01建立DBLINK後,當Create Trigger時會出現如下的錯誤訊息
訊息 7399,層級 16,狀態 1,程序 CBUpt,行 93
連結伺服器 "MYASSET" 的 OLE DB 提供者 "SQLNCLI10" 報告了錯誤。提供者並未給予任何關於錯誤的資訊。
訊息 7312,層級 16,狀態 1,程序 CBUpt,行 93
不能使用連結伺服器 "MYASSET" 的 OLE DB 提供者 "SQLNCLI10" 的結構描述或目錄。提供了四部分的名稱,但提供者並未公開必要的介面,以使用目錄或結構描述。

看了一下錯誤訊息,應該是DBLINK的提供者有某些設定造成,所以到SSMS->伺服器物件->連結的伺服器->提供者->SQLNCLI10上右鍵“屬性”,在“提供者選項 - SQL Server Native Client 10.0”視窗中將“提供者選項”中的“限層級零”的勾勾取消後按下“確定”


再Create Trigger結果又出現如下的錯誤,不過好在錯誤訊息換了
連結伺服器 "MYASSET" 的 OLE DB 提供者 "SQLNCLI10" 傳回訊息 "無法指出的錯誤"。
連結伺服器 "MYASSET" 的 OLE DB 提供者 "SQLNCLI10" 傳回訊息 "無法在伺服器中找到完成此操作所須的預存程序。請連絡您的系統管理員。"。
訊息 7311,層級 16,狀態 2,程序 CBUpt,行 93
無法為連結伺服器 "MYASSET" 的 OLE DB 提供者 "SQLNCLI10" 取得結構描述資料列集 "DBSCHEMA_TABLES_INFO"。提供者支援介面,但在使用時傳回失敗碼。

這段錯誤訊息看不出來問題在哪,所以透過GOOGLE找到微軟的一篇KB906954,簡單來說就是因為SQL Server 2000安裝SP4後系統預存程序沒有升級所以必須手動升級系統預存程序,在SQLServer02主機的C:\Program Files\Microsoft SQL Server\MSSQL\Install\的路徑下可以找到instcat.sql,可以透過osql或是管理工具去執行就完成了

好吧,再來一次Create Trigger,哇勒~又有錯誤訊息了,錯誤訊息如下
連結伺服器 "MYASSET" 的 OLE DB 提供者 "SQLNCLI10" 傳回訊息 "Multiple-step OLE DB operation generated errors. Check each OLE DB status value, if available. No work was done."。
訊息 7306,層級 16,狀態 2,行 1
無法從連結伺服器 "MYASSET" 的 OLE DB 提供者 "SQLNCLI10" 開啟資料表 ""MY_DB"."dbo"."MY_YABLE""。提供者不支援在這個資料來源上的索引掃描。

咦~之前在DBLINK的提供者的屬性視窗中好像有出現“索引”的關鍵字,所以又再次進入“提供者選項 - SQL Server Native Client 10.0”視窗中將“提供者選項”中,這次為了確保不要再被提供者的屬性搞破壞,索性就把所有勾勾都取消只留下

好吧,再來一次Create Trigger,耶~終於Create成功了

雖然Trigger建成功了,但程式一執行將資料寫入MYDB下的MYTABLE時前端程式還是會出現”提供者不支援在這個資料來源上的索引掃描“,所以還是有問題,當然~我不會這麼容易放棄,在下一篇中會有最終解法~待續~






2013年10月31日 星期四

[享樂生活]IOI~隨意鳥地方義大利餐廳


隨意鳥101高空觀景餐廳
110台北市信義區信義路五段7號85F
02 8101 0016
相片集網址:http://www.flickr.com/photos/103855078@N03/sets/72157637147261506/