天天看點

oracle dataguard

運作Data Guard的條件 

1、 在主庫和從庫的所有機器上必須安裝同一個版本的Oracle企業版。 

2、 主庫必須運作在歸檔模式下。 

3、 主庫和從庫的作業系統必須一樣(允許版本不同),從庫可以使用與主庫不同的目錄結構。 

4、 主從庫硬體系統的體系結構必須相同。比如:主庫運作在64位的Sun Sparc系統上,如果從庫是32位的Linux Intel系統就不允許。主從庫硬體的配置可以不同,比如:CPU數量、記憶體大小、存儲配置等。 

5、 主從庫可以是單執行個體的資料庫,也可以是多執行個體的RAC資料庫。 

6、 每個主從庫必須有它自己的控制檔案。 

7、 如果把主從庫放在了一個系統裡,則必須調整初始化參數。 

8、 隻要使用Data Guard就要保持主庫是FORCE LOGGING模式,如果在主庫上使用了no logging操作不生成日志,是以資料也不會傳遞到從庫。 9、 管理主從庫的使用者必須具有SYSDBA權限。

主庫:win2003 server ora9i(9.2.0.1.0) 192.168.3.135主機名:data580 SID:PRIMARY 

從庫:win2003 server ora9i(9.2.0.1.0) 192.168.3.136 主機名:data380 SID:STANDBY 

1、主庫和從庫的Oracle 安裝的時候都選擇相同的安裝路徑 E:\oracle\ora92 ;并且先不要安裝資料庫,即在安裝過程中“資料庫配置”一項下面選擇“隻安裝軟體”; 

2、在主庫上使用DBCA(Database Configuration Assistant)建一個資料庫,SID設為PRIMARY; 

3、設定主庫歸檔路徑為e:\oracle\ora92\database\Archive : Sql>alter system set log_archive_dest_1='LOCATION=e:\oracle\ora92\database\Archive MANDATORY' scope=both; 

4、将主庫執行個體、資料庫關閉,然後啟動執行個體,但不打開資料庫,隻啟動到資料庫挂載模式: Sql>shutdown immediate; Sql>startup mount; 

5、将主庫設定成歸檔狀态和自動歸檔模式: Sql>alter database archivelog; Sql>alter system set log_archive_start=true scope=spfile; 

6、在主庫上面建立從庫的控制檔案standby.ctl : Sql>alter database create standby controlfile as 'e:\oracle\oradata\standby.ctl'; 

7、在主庫上面建立從庫的初始化參數檔案standby.ora(将其拷貝回從庫後轉換成從庫的 spfile): Sql>create pfile='e:\oracle\oradata\standby.ora' from spfile; 

8、檢視主庫的資料檔案及其的位置: Sql>select name from v$datafile; 記下查詢結果中的資料檔案的位置。 

9、關閉執行個體: Sql>shutdown immediate; 

10、将第6步中的standby.ctl、第7步中的standby.ora和第8步驟中的資料檔案、還有E:\oracle\oradata\PRIMARY路徑下面的聯機日志檔案(REDO.LOG)、E:\oracle\ora92\database裡面的密碼檔案PWDPRIMARY.ora備份出來,拷貝到從庫中;在從庫中建立路徑E:\oracle\oradata\PRIMARY ,存放standby.ctl、資料檔案、聯機日志檔案;建立路徑E:\oracle\admin\PRIMARY ,在裡面建立空檔案夾bdump、cdump、udump、create、pfile ;将standby.ora 放到E盤根目錄下面;将密碼檔案PWDPRIMARY.ora更名為PWDSTANDBY.ora ,放到從庫的E:\oracle\ora92\database下面。 

11、回到主庫,啟動主庫執行個體和資料庫: Sql>startup 

12、轉回到從庫,手動建立服務OracleServiceSTANDBY: oradim -new -sid STANDBY -startmode manual 設定環境變量:在環境變量的“Administrator的使用者變量”一欄裡面建立一個值,變量名為ORACLE_SID ,變量值為STANDBY(服務名)。 

13、建立從庫監聽器OracleOraHome92TNSListener:進入Net Configuration Assistant ,使用“監聽程式配置”來建立從庫的監聽器,同時會在E:\oracle\ora92\network\admin下面生成listener.ora檔案; 

14、配置本地NET服務名:進入Net Configuration Assistant ,使用“本地NET服務名配置”來配置,同時會在E:\oracle\ora92\network\admin下面生成tnsnames.ora檔案; 

15、配置主從庫的tnsnames.ora ,都将裡面的内容設定成如下内容: STANDBY = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.3.136)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = PRIMARY) ) ) PRIMARY = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.3.135)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = PRIMARY) ) ) 

16、修改E根目錄下面的初始化參數檔案standby.ora ,裡面的全部内容如下(删除了原來的control_files參數,将instance_name改成了STANDBY,最後面的7行粗體部分是新添加的内容): 

*.aq_tm_processes=1 

*.background_dump_dest='e:\oracle\admin\PRIMARY\bdump' 

*.compatible='9.2.0.0.0' 

*.core_dump_dest='e:\oracle\admin\PRIMARY\cdump' 

*.db_block_size=8192 

*.db_cache_size=728760320 

*.db_domain='' 

*.db_file_multiblock_read_count=16 

*.db_name='PRIMARY' 

*.dispatchers='(PROTOCOL=TCP) (SERVICE=PRIMARYXDB)','(PROTOCOL=TCP)' 

*.fast_start_mttr_target=300 

*.hash_join_enabled=TRUE 

*.instance_name='STANDBY' 

*.java_pool_size=20971520 

*.job_queue_processes=10 

*.large_pool_size=143654912 

*.log_archive_dest_1='LOCATION=e:\oracle\ora92\database\Archive MANDATORY' 

*.log_archive_start=TRUE 

*.open_cursors=300 

*.pga_aggregate_target=324009984 

*.processes=150 

*.query_rewrite_enabled='FALSE' 

*.remote_login_passwordfile='EXCLUSIVE' 

*.shared_pool_size=242221056 

*.sort_area_size=52428800 

*.star_transformation_enabled='FALSE' 

*.timed_statistics=TRUE 

*.undo_management='AUTO' 

*.undo_retention=10800 

*.undo_tablespace='UNDOTBS1' 

*.user_dump_dest='e:\oracle\admin\PRIMARY\udump' 

*.standby_file_management=AUTO 

*.remote_archive_enable=TRUE 

*.lock_name_space='standby' 

*.fal_server='primary' 

*.fal_client='standby' 

*.standby_archive_dest='e:\oracle\ora92\database\Archive' 

*.control_files='e:\oracle\oradata\primary\STANDBY.CTL' 

17、進入sqlplus将standby.ora建立成從庫的spfile : Sql>create spfile from pfile='e:\standby.ora'; 

18、啟動從庫的執行個體,并且将從庫設定成standby模式: Sql>startup nomount; Sql>alter database mount standby database; 

19、在從庫啟動日志應用服務: Sql>alter database recover managed standby database disconnect from session; 

20、轉到主庫,啟動到實體從庫的歸檔: Sql>ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=PRIMARY' SCOPE=BOTH; Sql>ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=ENABLE SCOPE=BOTH; 

21、校驗Data Guard的運轉: 

主庫,歸檔目前日志: SQL> ALTER SYSTEM ARCHIVE LOG CURRENT; 

從庫,校驗歸檔日志是否正常接收: SQL> SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#; 

從庫,檢視新的歸檔日志是否正常用于恢複: 

SQL> SELECT SEQUENCE#,APPLIED FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#; 

SEQUENCE# APP --------- --- 

8 YES 

9 YES 

10 YES 

11 YES 

如果都是像以上那樣的内容,都是YES的話,那就成功了。也可以分别檢視主從庫的E:\oracle\ora92\database\archive檔案夾裡面的内容,如果從庫的和主庫的内容一緻,就算data guard配置成功了。 

22、這個時候從庫隻是将日志檔案拿過來存放起來,但并沒有執行日志檔案,是以在主庫上所做的操作無法在從庫上得到結果,即無法在從庫上查詢資料。要在從庫上查詢資料,要執行以下語句:在從庫上用sysdba 使用者連接配接  Sql>alter database recover managed standby database disconnect from session ; Sql>alter database recover managed standby database cancel ; Sql>alter database open read only ; 查詢資料即可。查詢完成以後,需要恢複從庫為恢複模式  Sql>alter database recover managed standby database disconnect from session ; 這個功能的可以用來查詢前一天(或者前若幹時間)以前的資料,比如報表之類的,因為今天隻能查詢昨天以前的報表,對資料的同步性的要求不是那麼嚴格。查詢完後一定要将從庫設回恢複模式。 

本文轉自 jxwpx 51CTO部落格,原文連結:http://blog.51cto.com/jxwpx/205251,如需轉載請自行聯系原作者