1. 在主庫進行下面配置
1.1 確認主數據庫運行在歸檔模式下
使用下面命令確定主數據庫處於歸檔模式下:
SQL> archive log list;
如果主數據庫未處於歸檔模式下,使用下面命令設置主數據庫:
SQL> shutdown immediate; --立即關閉數據庫
SQL> startup mount; --開啓數據庫到mount狀態
SQL> alter database archivelog; --將數據庫修改爲歸檔模式
SQL> alter database open; --將數據庫修改爲open狀態
1.2 確認主庫強制寫日誌
SQL> select force_logging from v$database; --查看數據庫是否處於歸檔模式
SQL> alter database force logging; --修改模式爲強制寫日誌,所有sql語句nologging操作時 也會強制寫日誌
1.3 配置主數據庫的監聽文件與傳輸文件
配置監聽文件
[oracle@oracle1 ~]$ vim /oracle/app/oracle/praduct/10.2.0/db_1/network/admin/listener.ora
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = TEST)
(ORACLE_HOME = /oracle/app/oracle/product/10.2.0/db_1)
(SID_NAME = TEST)
)
)
LISTENER =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.101.101)(PORT = 1521))
)
配置傳輸文件
[oracle@oracle1 ~]$ vim /oracle/app/oracle/praduct/10.2.0/db_1/network/admin/tnsnames.ora
DB102 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.18.102)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = TEST)
)
)
啓動監聽服務
[oracle@oracle1 ~]$ lsnrctl status //查看監聽服務狀態
[oracle@oracle1 ~]$ lsnrctl start //開啓監聽服務
1.4 修改主數據庫的參數文件(spfile)
建立pfile文件
SQL> create pfile from spfile
在pfile中加入下面內容
vim /oracle/app/oracle/product/10.2.0/db_1/dbs/initTEST.ora
DB_UNIQUE_NAME=TEST --show parameter DB_UNIQUE_NAME確認主庫名稱
LOG_ARCHIVE_CONFIG='DG_CONFIG=(DB101,DB102)' --此處爲主庫網絡連接串(tnsnames.ora)
LOG_ARCHIVE_DEST_1='LOCATION=/home/oracle/archive VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=TEST' --主庫的歸檔日誌路徑
LOG_ARCHIVE_DEST_2='SERVICE=DB102 LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=TEST'
FAL_SERVER=DB101 --網絡異常恢復後自動將延遲的歸檔日誌傳輸到備庫,此處爲主庫網絡連接串(tnsnames.ora)
FAL_CLIENT=DB102
STANDBY_FILE_MANAGEMENT=AUTO --默認只傳遞數據,此作用主庫把新創建的數據文件也傳到備庫
重啓數據庫
SQL> shutdown immediate
SQL> startup pfile='/oracle/app/oracle/praoduct/10.2.0/db_1/dbs/initTEST.ora'
或模擬spfile失效
[oracle@oracle1 ~]$ mv /oracle/app/oracle/praoduct/10.2.0/db_1/dbs/spfileTEST.ora spfile.TEST.ora.bak
SQL> startup
查看建立的pfile文件是否生效
SQL> show parameter fal
如果生效,pfile生效,使用pfile重建spfile。
create spfile from pfile
1.5 全庫備份主數據庫(應該在從庫配置完成(2.4)後進行)
備份主數據庫
RMAN> backup full database format='/home/oracle/db_bak/%U' include current controlfile for standby;
還原從數據庫(需要先執行2.5操作)
RMAN> connect auxiliary sys/123456@DB102 --連接從庫
RMAN> duplicate target database for standby nofilenamecheck; --還原從數據庫
2. 配置災備數據庫
2.1 在災備數據庫服務器中安裝Oracle軟件,保證服務器的環境變量、數據庫的實例名、數據庫的字符集與主數據庫相同。
在主數據庫中使用下面命令查看主數據庫的字符集:
SQL> select * from nls_database_parameters where parameter='NLS_CHARACTERSET';
2.2 配置從庫監聽服務與傳輸文件
配置監聽文件
[oracle@oracle2 ~]$ vim /oracle/app/oracle/praduct/10.2.0/db_1/network/admin/listener.ora
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = TEST)
(ORACLE_HOME = /oracle/app/oracle/product/10.2.0/db_1)
(SID_NAME = TEST)
)
)
LISTENER =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.101.102)(PORT = 1521))
)
配置傳輸文件
[oracle@oracle2 ~]$ vim /oracle/app/oracle/praduct/10.2.0/db_1/network/admin/tnsnames.ora
DB101 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.18.101)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = TEST)
)
)
開啓監聽
[oracle@oralce2 ~]$ lsnrctl start
2.3 配置從庫的spfile,追加下面內容
DB_UNIQUE_NAME=TEST --show parameter DB_UNIQUE_NAME
LOG_ARCHIVE_CONFIG='DG_CONFIG=(DB101,DB102)'
LOG_ARCHIVE_DEST_1='LOCATION=/home/oracle/archive VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=TEST'
LOG_ARCHIVE_DEST_2='SERVICE=DB101 LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=TEST'
FAL_SERVER=DB102
FAL_CLIENT=DB101
STANDBY_FILE_MANAGEMENT=AUTO
2.4 關閉數據庫並重新開啓到nomount狀態
SQL> startup nomount force;
2.5 還原從庫,使從庫與主庫數據保持一致
複製密碼文件
[oracle@oracle2 ~]$ scp [email protected]:/$ORACLE_HOME/dbs/orapwTEST $ORACLE_HOME/dbs/
將主庫備份的文件拷貝到從庫
[oracle@oracle2 ~]$ mkdir -pv /home/oracle/db_bak/
[oracle@oracle2 ~]$ scp [email protected]:/home/oracle/db_bak/* /home/oracle/db_bak/
回覆完成,從數據庫自動開啓到mount狀態
SQL> select open_mode from v$database; --查看數據庫狀態
3. 測試主數據庫與災備數據庫之間的通訊
3.1 在主數據庫上切換日誌組並查詢進程
當查詢結果含有LNS,說明主數據庫能夠像災備數據庫傳遞日誌文件
SQL> alter system switch logfile; --切換日誌組
SQL> select process from v$managed_standby; --查看進程
PROCESS
---------
ARCH
ARCH
LNS
3.2 在災備數據庫中查看是否能夠正常開啓RFS進程
SQL> SQL> select process from v$managed_standby;
PROCESS
---------
ARCH
ARCH
RFS
RFS
3.3 開啓災備數據庫的MRP恢復進程
SQL> alter database recover managed standby database disconnect from session;
4. 驗證災備
4.1 在主數據庫中建立表或插入數據
4.2 切換主數據庫的在線日誌組
4.3 關閉備份庫的MRP進程並將備份庫更改爲open狀態,驗證
關閉Mrp進程
SQL> alter database recover managed standby database cancel;
PS.
=================================================
(1)備用數據庫在日誌恢復過程中(MRP進程存在期間)數據庫處於MOUNTED狀態,此時備用數據庫無法打開供讀取使用
(2)打開備用數據庫
停止備用庫的日誌恢復進程MRP
alter database recover managed standby database cancel;
open備用數據庫,備用數據庫默認打開爲只讀方式
alter database open;
(3)重新啓動備用數據庫的MRP進程,數據庫自動從OPEN狀態轉換到MOUNT 狀態
alter database recover managed standby database disconnect from session;
(4)mrp進程停止期間,只要RFS進程存在,那麼不影響日誌的接收
====================================================