二. Standby 端配置
1. 建立備庫存放資料檔案和後臺跟蹤目錄, 這個目錄可以和主庫相同, 如果不同,就需要在主庫的初始化檔案中進行轉換。
如:
*.log_file_name_convert='/u02/oradata/orcl/','/u03/oradata/orcl/'
*.db_file_name_convert='/u02/oradata/orcl/','/u03/oradata/orcl/'
$ORACLE_BASE\ORADATA\ORCL
$ORACLE_BASE\admin\orcl
$ORACLE_BASE\admin\orcl\adump
$ORACLE_BASE\admin\orcl\bdump
$ORACLE_BASE\admin\orcl\cdump
$ORACLE_BASE\admin\orcl\dpdump
$ORACLE_BASE\admin\orcl\pfile
$ORACLE_BASE\admin\orcl\udump
$ORACLE_BASE\admin\orcl\
2. 將主庫的密碼檔案,控制檔案,資料檔案,引數檔案,日誌檔案copy到備庫。
說明一點,這個控制檔案是我們自己建立的standby 控制檔案。將copy過來的控制檔案再複製三份就可以了。 主備的控制檔案是不一樣的。 這裡除了採用直接copy 檔案之外,還可以採用Rman 恢復來做。 直接copy 需要停資料庫,如果採用RMAN 的話,就不需要停機了。
[oracle@localhost orcl]$ pwd
/u01/app/oracle/oradata/orcl
[oracle@localhost orcl]$ ls
control01.ctl redo01.log redo04.log redo07.log temp01.dbf
control02.ctl redo02.log redo05.log sysaux01.dbf undotbs01.dbf
control03.ctl redo03.log redo06.log system01.dbf users01.dbf
[oracle@localhost orcl]$ scp *.dbf 10.85.10.2://u01/app/oracle/oradata/orcl
[oracle@localhost u01]$ scp *.ctl 10.85.10.2://u01/app/oracle/oradata/orcl
[oracle@localhost u01]$ scp *.log 10.85.10.2://u01/app/oracle/oradata/orcl
[oracle@localhost u01]$ scp initorcl.ora 10.85.10.2://u01/app/oracle/product/10.2.0/db_1/dbs
[oracle@localhost dbs]$ scp orapworcl 10.85.10.2://u01/app/oracle/product/10.2.0/db_1/dbs
3. 修改初始化引數檔案
修改之後如下:
*.DB_UNIQUE_NAME='orcl_st'
*.log_archive_dest_1='location=/u01/archive'
*.log_archive_dest_2='SERVICE=orcl_pd'
*.LOG_ARCHIVE_DEST_STATE_1=ENABLE
*.LOG_ARCHIVE_DEST_STATE_2=ENABLE
*.FAL_SERVER='orcl_st'
*.FAL_CLIENT='orcl_pd'
*.standby_file_management='AUTO'
*.standby_archive_dest='/u01/archive'
4. 修改listener.ora 和 tnsnames.ora 檔案,如果不存在,就從主庫上copy 過去。
5. 在備庫新增redo log file
如果主庫沒有新增redo log file,可以先用copy 過來的初始化檔案將資料庫啟動到mount 狀態。在建立個spfile,最後新增redo log。
SQL> startup mount pfile='/u01/app/oracle/product/10.2.0/db_1/dbs/initorcl.ora'
ORACLE instance started.
SQL> create spfile from pfile='/u01/app/oracle/product/10.2.0/db_1/dbs/initorcl.ora';
新增一個新的Standby Redologs組(注意組號不要與當前存在的Online Redologs組重複),併為該組指定一個成員:
SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 4 ('/u01/app/oracle/oradata/orcl/redo04.log') size 50M;
SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 5 ('/u01/app/oracle/oradata/orcl/redo05.log') size 50M;
SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 6 ('/u01/app/oracle/oradata/orcl/redo06.log') size 50M;
SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 7 ('/u01/app/oracle/oradata/orcl/redo07.log') size 50M;
提示,由於從Primary資料庫複製檔案時並沒有複製Online Redologs,因此物理Standby資料庫在第一次啟動REDO應用時,會在Alert檔案中報Online Redo Logfile檔案不存在,沒有關係,物理Standby會自動重建這批檔案,同時你也不用擔心會丟失資料,Online Redologs中的資料會以歸檔檔案的形式從Primary端接收。
至此,Data Guard 的操作已經完成,下面來開始驗證。
注意Data Guard 啟動順序:
啟動順序:先standby ,後primary;
關閉順序:先primary 後standby;
在備庫將例項啟動到mount 狀態:
SQL> startup nomount;
SQL>alter database mount standby database ;
SQL>ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
SQL>alter database recover managed standby database disconnect from session;
在備庫啟動監聽:
$lsnrctl start
在主庫啟動例項:
SQL> startup;
在主庫啟動監聽:
$lsnrctl start
在主庫驗證歸檔目錄是否有效:
SQL> SELECT STATUS,DESTINATION, ERROR FROM V$ARCHIVE_DEST;
如果有錯誤,要排查原因。
SQL> alter system switch logfile;
SQL> select max(sequence#) from v$archived_log;
MAX(SEQUENCE#)
--------------
70
主備查詢結果一致,Data Guard 搭建結束。
注意:如果在主庫執行 alter database clear unarchived logfile或alter database open resetlogs , 則dataguard要重建。