Oracle 10g資料衛士是一個強大的確定企業資料高可用、資料保護和災難恢複的工具,我已經使用網格控制台和SQL指令在資料衛士/後備資料庫上工作好幾年了,我最近的經曆是半年前為一個實驗室資訊管理系統(LIMS)利用資料衛士手動建立實體後備資料庫,我每天都要維護它,它工作得很好,我想在這裡與其他DBA分享我的經驗。
在這個例子中資料庫的版本是10.2.0.3,主備資料庫位于不同機器上,主資料庫叫做PRIM,後備資料庫叫做STAN,我使用了閃存恢複區和OMF。
一、在你開始之前:
1、 確定主備資料庫的作業系統和平台架構是相同的。
2、 在後備伺服器上隻安裝Oracle資料庫軟體,不要例子資料庫,如果需要更新檔請應用,確定主備資料庫的版本一緻,Oracle home也要相同。
3、 在放入生産環境之前,在測試環境中先測試一下後備資料庫的建立。
二、在主資料庫上:
1、啟用主資料庫的強制日志記錄:
SQL> ALTER DATABASE FORCE LOGGING;
2、如果沒有密碼檔案,先要建立它:
2.1)檢查密碼檔案是否存在:
SQL> select * from v$pwfile_users;
2.2)如果不存在,就建立一個。
在windwos平台上:
$cd %ORACLE_HOME%database
$orapwd file=pwdPRIM.ora password=xxxxxxxx force=y
(注意:用sys使用者的密碼替換這裡的xxxxxxxx)
在Unix平台上:
$Cd $ORACLE_HOME/dbs
$Orapwd file=pwdPRIM.ora password=xxxxxxxx force=y
(注意:用sys使用者的密碼替換這裡的xxxxxxxx)
3、配置備用重做日志
3.1)備用重做日志檔案的大小應與目前主資料庫線上重做日志檔案大小比對,使用下面的指令找出線上重做日志檔案的大小:
SQL> select bytes from v$log;
BYTES
----------
52428800
52428800
52428800
3.2)使用下面的指令确定你目前的日志檔案組:
SQL> select group#, member from v$logfile;
3.3)建立備用重做日志檔案組
我的主資料庫原來有3個重做日志檔案組,使用下面的指令建立3個備用重做日志檔案組:
SQL>ALTER DATABASE ADD STANDBY LOGFILE GROUP 4 SIZE 50M;
SQL>ALTER DATABASE ADD STANDBY LOGFILE GROUP 5 SIZE 50M;
SQL>ALTER DATABASE ADD STANDBY LOGFILE GROUP 6 SIZE 50M;
3.4)使用下面的指令檢查日志組建立是否成功:
SQL>select * from v$standby_log;
4、 在主資料庫上啟用歸檔
如果你的主資料庫沒有工作在歸檔日志模式,請開啟為歸檔日志模式:
SQL>shutdown immediate;
SQL>startup mount;
SQL>alter database archivelog;
SQL>alter database open;
SQL>archive log list;
5、 設定主資料庫初始化參數
從伺服器參數檔案(spfile)建立一個文本初始化參數檔案(pfile),添加新的主角色參數:
5.1)從spfile建立pfile在Windows平台上:
SQL>create pfile=’databasepfilePRIM.ora’ from spfile;
(注意:用你的Oracle home路徑替換‘’中的内容)
在Unix平台上:
SQL>create pfile=’/dbs/pfilePRIM.ora’ from spfile;
(注意:用你的Oracle home路徑替換‘’中的内容)
5.2)編輯pfilePRIM.ora檔案,添加主備角色參數:(這裡的路徑來自Windows系統,Unix系統做響應的修改)
db_name=PRIM
db_unique_name=PRIM
LOG_ARCHIVE_CONFIG='DG_CONFIG=(PRIM,STAN)'
LOG_ARCHIVE_DEST_1=
'LOCATION=F:Oracleflash_recovery_areaPRIMARCHIVELOG
VALID_FOR=(ALL_LOGFILES,ALL_ROLES)
DB_UNIQUE_NAME=PRIM'
LOG_ARCHIVE_DEST_2=
'SERVICE=STAN LGWR ASYNC
VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
DB_UNIQUE_NAME=STAN'
LOG_ARCHIVE_DEST_STATE_1=ENABLE
LOG_ARCHIVE_DEST_STATE_2=ENABLE
LOG_ARCHIVE_FORMAT=%t_%s_%r.arc
LOG_ARCHIVE_MAX_PROCESSES=30
remote_login_passwordfile='EXCLUSIVE'
FAL_SERVER=STAN
FAL_CLIENT=PRIM
STANDBY_FILE_MANAGEMENT=AUTO
# Specify the location of the standby DB datafiles followed by the primary location;
DB_FILE_NAME_CONVERT='E:oracleproduct10.2.0oradataSTANDATAFILE','
E:oracleproduct10.2.0oradataPRIMDATAFILE'
# Specify the location of the standby DB online redo log files followed
by the primary location LOG_FLE_NAME_CONVERT=’
E:oracleproduct10.2.0oradataSTANONLINELOG’,’
E:oracleproduct10.2.0oradataPRIMONLINELOG’,’
F:Oracleflash_recovery_areaSTANONLINELOG’,’
F:Oracleflash_recovery_areaPRIMONLINELOG’
6、 從pfile建立spfile,然後使用新的spfile重新開機主資料庫
資料衛士必須使用spfile,建立spfile然後重新開機資料庫:
在Windows平台上:
SQL> shutdown immediate;
SQL> startup nomount pfile=’databasepfilePRIM.ora’;
SQL>create spfile from pfile=’databasepfilePRIM.ora’;
--使用新建立的spfile啟動主資料庫
SQL>shutdown immediate;
SQL>Startup;
(注意:用你的Oracle home路徑替換‘’中的内容)
在Unix平台上:
SQL> shutdown immediate;
SQL> startup nomount pfile=’/dbs/pfilePRIM.ora’;
SQL>create spfile from pfile=’/dbs/pfilePRIM.ora’;
--使用新建立的spfile啟動主資料庫
SQL>shutdown immediate;
SQL>Startup;
(注意:用你的Oracle home路徑替換‘’中的内容)
三、在後備資料庫上:
1、在後備資料庫上建立主資料庫資料檔案的拷貝
在主資料庫上:
SQL>shutdown immediate;
在後備資料庫上(此時主資料庫已經停掉):
1.1) 建立存放資料檔案的目錄,例如:在Windows上,E:oracleproduct10.2.0oradataSTANDATAFILE,在Unix上做對應的修改。
1.2) 拷貝資料檔案和臨時檔案。
1.3) 為線上日志建立目錄(多個),例如:在Windows上,E:oracleproduct10.2.0oradataSTANONLINELOG和F:Oracleflash_recovery_areaSTANONLINELOG,在Unix上做對應的修改。
1.4) 拷貝線上日志。
2、為後備資料庫建立控制檔案
在主資料庫上為後備資料庫建立控制檔案:
SQL>startup mount;
SQL>alter database create standby controlfile as ‘STAN.ctl;
SQL>ALTER DATABASE OPEN;
3、拷貝主資料庫pfile檔案到後備伺服器,并重命名/編輯它
3.1)從主伺服器拷貝pfilePRIM.ora檔案到後備伺服器,Windows平台就拷貝到Oracle home目錄下的database檔案夾,Unix平台就拷貝到Oracle home目錄下的dbs目錄。
3.2)将其重命名為pfileSTAN.ora,并做如下修改:(這裡的路徑來Windows平台,對于Unix平台請做相應修改)
*.audit_file_dest='E:oracleproduct10.2.0adminSTANadump'
*.background_dump_dest='E:oracleproduct10.2.0adminSTANbdump'
*.core_dump_dest='E:oracleproduct10.2.0adminSTANcdump'
*.user_dump_dest='E:oracleproduct10.2.0adminSTANudump'
*.compatible='10.2.0.3.0'
control_files='E:ORACLEPRODUCT10.2.0ORADATASTANCONTROLFILESTAN.CTL','
F:ORACLEFLASH_RECOVERY_AREASTANCONTROLFILESTAN.CTL'
db_name='PRIM'
db_unique_name=STAN
LOG_ARCHIVE_CONFIG=’DG_CONFIG=(PRIM,STAN)’
LOG_ARCHIVE_DEST_1=
‘LOCATION=F:Oracleflash_recovery_areaSTANARCHIVELOG
VALID_FOR=(ALL_LOGFILES,ALL_ROLES)
DB_UNIQUE_NAME=STAN’
LOG_ARCHIVE_DEST_2=
‘SERVICE=PRIM LGWR ASYNC
VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
DB_UNIQUE_NAME=PRIM’
LOG_ARCHIVE_DEST_STATE_1=ENABLE
LOG_ARCHIVE_DEST_STATE_2=ENABLE
LOG_ARCHIVE_FORMAT=%t_%s_%r.arc
LOG_ARCHIVE_MAX_PROCESSES=30
FAL_SERVER=PRIM
FAL_CLIENT=STAN
remote_login_passwordfile='EXCLUSIVE'
# Specify the location of the primary DB datafiles followed by the standby location
DB_FILE_NAME_CONVERT=’E:oracleproduct10.2.0oradataPRIMDATAFILE’,’
E:oracleproduct10.2.0oradataSTANDATAFILE’
# Specify the location of the primary DB online redo log files followed
by the standby location
LOG_FILE_NAME_CONVERT=’E:oracleproduct10.2.0oradataPRIMONLINELOG’,’
E:oracleproduct10.2.0oradataSTANONLINELOG’,’
F:Oracleflash_recovery_areaPRIMONLINELOG’,’
F:Oracleflash_recovery_areaSTANONLINELOG’
STANDBY_FILE_MANAGEMENT=AUTO
(注意:這裡并沒有列出所有的參數條目)
4、在後備伺服器上,為轉儲和日志歸檔目的地建立對應的目錄:
建立目錄adump,bdump,cdump,udump,并為歸檔日志目的地建立目錄。
5、從主伺服器拷貝後備控制檔案STAN.ctl到後備目的地。
6、拷貝主密碼檔案到後備伺服器,并重命名為pwdSTAN.ora。
在Windows平台上拷貝到database檔案夾,在Unix平台上拷貝到/dbs目錄,然後重命名這個密碼檔案。
7、 在Windows上建立一個服務(可選的):
$oradim –NEW –SID STAN –STARTMODE manual
8、 配置主備資料庫的監聽器
8.1)在主系統上:使用Oracle Net Manager建立監聽器PRIM和STAN,然後重新開機監聽
$lsnrctl stop
$lsnrctl start
8.2)在後備伺服器上:使用Net Manager建立監聽器PRIM和STAN,然後重新開機監聽
$lsnrctl stop
$lsnrctl start
9、 建立Oracle網絡服務名
9.1)在主系統上:使用Oracle Net Manager建立網絡服務名PRIM和STAN,用tnsping檢查這兩個服務
$tnsping PRIM
$tnsping STAN
10、 在後備伺服器上,設定環境變量ORACLE_HOME和ORACLE_SID。
11、 啟動後備資料庫到nomount狀态,産生一個spfile檔案。
在Windows平台:
SQL>startup nomount pfile=’databasepfileSTAN.ora’;
SQL>create spfile from pfile=’databasepfileSTAN.ora’;
使用新建立的spfile重新啟動後備資料庫:
SQL>shutdown immediate;
SQL>startup mount;
在Unix平台:
SQL>startup nomount pfile=’/dbs/pfileSTAN.ora’;
SQL>create spfile from pfile=’/dbs/pfileSTAN.ora’;
使用新建立的spfile重新啟動後備資料庫:
SQL>shutdown immediate;
SQL>startup mount;
(注意:請用你自己的ORACLE home目錄替換‘’中的内容)
12、 開始應用重做日志
12.1在後備資料庫上,啟動重做日志應用:
SQL>alter database recover managed standby database disconnect from session;
如果你永遠都不需要停止日志應用服務:
SQL> alter database recover managed standby database cancel;
13、 校驗後備資料庫運轉是否正常
13.1在後備資料庫上執行一個查詢:
SQL>select sequence#, first_time, next_time from v$archived_log;
13.2在主資料庫上,強制切換日志:
SQL>alter system switch logfile;
13.3在後備資料庫上,校驗被應用的歸檔重做日志檔案:
SQL>select sequence#, applied from v$archived_log order by sequence#;
14、 如果你不想等待歸檔目前重做日志檔案就應用重做資料,需要啟用實時應用:SQL> alter database recover managed standby database using current logfile disconnect;
15、 要建立多個後備資料庫,重複這些步驟即可。
四、維護
1、經常檢查主/備資料庫的警告日志,監視資料衛士環境中的資料操作。
2、清除主/備資料庫上的歸檔日志。
我每周會對整個主資料庫進行熱備份,并備份歸檔日志,然後删除主伺服器上的歸檔日志。
在後備資料庫上,我每周運作RMAN執行備份和删除歸檔日志。
$rman target /@STAN;
Rman>backup archivelog all delete input;
3、密碼管理。
每個系統上的sys使用者的密碼必須一緻,以便參考二.2中步驟2更新或重新建立passwd檔案。