本文旨在指導客戶完成Oracle 11g的ADG部署工作,主庫環境已具備,備庫環境已安裝完成數據庫軟件。
環境:RHEL 6.8 + Oracle 11.2.0.4
- 1.確認主庫運行在歸檔模式
- 2.確認主庫開啟Force Logging
- 3.主庫參數文件修改
- 4.創建SRLs
- 5.備份數據庫
- 6.創建備庫參數
- 7.更新tnsnames.ora文件
- 8.拷貝主庫RMAN備份和參數文件到備庫
- 9.拷貝主庫密碼文件到備庫
- 10.創建備庫需要的目錄
- 11.修改備庫參數文件
- 12.拷貝主庫tnsnames.ora文件到備庫
- 13.備庫啟動實例到nomount狀態
- 14.初始化standby數據庫
- 15.確認數據庫各類文件路徑
- 16.創建spfile然后使用spfile啟動數據庫
- 17.啟動MRP,驗證DG同步成功
- 18.部署定時任務進行歷史歸檔清理
1.確認主庫運行在歸檔模式
這里設置歸檔存放路徑為/u01/arch:
mkdir /u01/arch
chown oracle:oinstall /u01/arch
SQL>
archive log list
alter system set log_archive_dest_1 = 'LOCATION=/u01/arch';
shutdown immediate
startup mount
alter database archivelog;
alter database open;
archive log list
2.確認主庫開啟Force Logging
SQL>
select FORCE_LOGGING FROM V$DATABASE;
alter database force logging;
select FORCE_LOGGING FROM V$DATABASE;
3.主庫參數文件修改
set linesize 500
col value for a70
col name for a50
select name, value
from v$parameter
where name in ('db_name','db_unique_name','log_archive_config', 'log_archive_dest_1','log_archive_dest_2',
'log_archive_dest_state_1','log_archive_dest_state_2', 'remote_login_passwordfile',
'log_archive_format','log_archive_max_processes','fal_server','db_file_name_convert',
'log_file_name_convert', 'standby_file_management');
alter system set log_archive_config='DG_CONFIG=(jingyu,jingyus)';
alter system set log_archive_dest_1='LOCATION=/u01/arch VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=jingyu';
alter system set log_archive_dest_2='SERVICE=jingyus VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=jingyus';
alter system set log_archive_dest_state_1=enable;
alter system set log_archive_dest_state_2=enable;
alter system set FAL_SERVER='jingyus';
--數據文件路徑主備庫設計規范(主要依賴於db_unique_name,這里源端和目標端用於數據存儲的磁盤組名字一致,用於歸檔的磁盤組名字不一致,需要轉換):
alter system set db_file_name_convert='jingyus','jingyu' scope=spfile;
alter system set log_file_name_convert='jingyus','jingyu' scope=spfile;
alter system set standby_file_management=AUTO;
4.創建SRLs
ALTER DATABASE ADD STANDBY LOGFILE thread 1 group 101 ('/u01/oradata/jingyu/srl101.rdo') SIZE 52428800;
ALTER DATABASE ADD STANDBY LOGFILE thread 1 group 102 ('/u01/oradata/jingyu/srl102.rdo') SIZE 52428800;
ALTER DATABASE ADD STANDBY LOGFILE thread 1 group 103 ('/u01/oradata/jingyu/srl103.rdo') SIZE 52428800;
ALTER DATABASE ADD STANDBY LOGFILE thread 1 group 104 ('/u01/oradata/jingyu/srl104.rdo') SIZE 52428800;
5.備份數據庫
使用傳統比如RMAN備份的方式恢復備庫,這里需要備份數據庫。
而本次使用duplicate方式,無需備份,關於duplicate,后面章節會具體描述。
6.創建備庫參數
create pfile='/tmp/pfile_for_standby.txt' from spfile;
7.更新tnsnames.ora文件
JINGYU =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = test04)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = jingyu)
)
)
JINGYUS =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = test05)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = jingyus)
)
)
8.拷貝主庫RMAN備份和參數文件到備庫
參數文件拷貝到備庫:
scp /tmp/pfile_for_standby.txt 192.168.1.125:$ORACLE_HOME/dbs/
RMAN備份本次不需要,使用duplicate方式,后面章節會具體介紹。
注:使用scp拷貝時,如果兩端$ORACLE_HOME變量值不一樣,目標端需要修改為具體的絕對路徑。
9.拷貝主庫密碼文件到備庫
scp $ORACLE_HOME/dbs/orapwjingyu 192.168.1.125:$ORACLE_HOME/dbs/orapwjingyu
10.創建備庫需要的目錄
# audit_file_dest
mkdir -p /u01/app/oracle/admin/jingyus/adump
# db_recovery_file_dest
mkdir -p /u01/app/oracle/fast_recovery_area
# db_file
mkdir -p /u01/oradata/jingyus
mkdir -p /u01/app/oracle/fast_recovery_area/jingyus
11.修改備庫參數文件
# vi pfile_for_standby.txt
:%s#jingyus#TTTTT#g
:%s#jingyu#jingyus#g
:%s#TTTTT#jingyu#g
# update:
*.db_name='jingyu'
*.db_unique_name='jingyus'
下面這段參數文件配置信息只是示例,實際需要根據主庫的參數文件進行修改,要關注內存、進程數以及cursors等相關參數:
*.audit_file_dest='/u01/app/oracle/admin/jingyus/adump'
*.audit_trail='db'
*.compatible='11.2.0.4.0'
*.control_files='/u01/oradata/jingyus/control01.ctl','/u01/app/oracle/fast_recovery_area/jingyus/control02.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_file_name_convert='jingyu','jingyus'
*.db_name='jingyu'
*.db_unique_name='jingyus'
*.db_recovery_file_dest='/u01/app/oracle/fast_recovery_area'
*.db_recovery_file_dest_size=4385144832
*.diagnostic_dest='/u01/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=jingyusXDB)'
*.fal_server='jingyu'
*.log_archive_config='DG_CONFIG=(jingyus,jingyu)'
*.log_archive_dest_1='LOCATION=/u01/arch VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=jingyus'
*.log_archive_dest_2='SERVICE=jingyu VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=jingyu'
*.log_archive_dest_state_1='ENABLE'
*.log_archive_dest_state_2='ENABLE'
*.log_file_name_convert='jingyu','jingyus'
*.open_cursors=300
*.pga_aggregate_target=294649856
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.service_names='demo'
*.sga_target=883949568
*.standby_file_management='AUTO'
*.undo_tablespace='UNDOTBS1'
12.拷貝主庫tnsnames.ora文件到備庫
scp $ORACLE_HOME/network/admin/tnsnames.ora 192.168.1.125:$ORACLE_HOME/network/admin/tnsnames.ora
13.備庫啟動實例到nomount狀態
sqlplus / as sysdba
startup nomount pfile=$ORACLE_HOME/dbs/pfile_for_standby.txt
14.初始化standby數據庫
本次選用使用duplicate命令創建standby數據庫,因為duplicate時間較長,需在后台運行防止過程中斷:
vi dup_dg.sh
rman target sys/oracle@jingyu auxiliary sys/oracle@jingyus <<EOF
duplicate target database for standby from active database dorecover nofilenamecheck;
EOF
nohup sh dup_dg.sh > dup_dg.log &
tail -200f dup_dg.log
注意:為保證duplicate連接正常,可以先這樣測試連接可用:
sqlplus sys/oracle@jingyu as sysdba
sqlplus sys/oracle@jingyus as sysdba
--備庫連接報錯:
ORA-12528: TNS:listener: all appropriate instances are blocking new connections
因為備庫目前是nomount狀態,如果需要連接就配置靜態監聽:
在備庫listener.ora配置文件中增加(注意這里的GLOBAL_DBNAME對應的service_name我這里選擇為原始的):
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = jingyus)
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1)
(SID_NAME = jingyu)
)
)
再次查看監聽狀態,Service "jingyus"部分有UNKNOWN,即靜態監聽標識,再次嘗試連接成功:
Service "jingyus" has 2 instance(s).
Instance "jingyu", status UNKNOWN, has 1 handler(s) for this service...
Instance "jingyu", status BLOCKED, has 1 handler(s) for this service...
[oracle@test05 admin]$ sqlplus sys/oracle@jingyus as sysdba
SQL*Plus: Release 11.2.0.4.0 Production on Tue Jul 14 11:46:33 2020
Copyright (c) 1982, 2013, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> select status from v$Instance;
STATUS
------------------------
STARTED
正常完成duplicate后,數據庫處於mount狀態,且可以open只讀打開:
SQL> select status from v$instance;
STATUS
------------
MOUNTED
SQL> alter database open;
Database altered.
SQL>
SQL>
SQL> select open_mode from v$database;
OPEN_MODE
--------------------
READ ONLY
15.確認數據庫各類文件路徑
a)確認已創建ORLs和SRLs:
SQL> SELECT MEMBER FROM V$LOGFILE;
在對應存儲目錄中查詢沒有也會后續自動創建的,確定路徑沒問題就可以,路徑如果有問題,很可能是之前的convert參數設置有問題,設置convert參數,重啟生效。
b)確認數據文件路徑
select name from v$datafile;
select checkpoint_change# from v$datafile_header;
如果這個查詢結果都是0,需要catalog start with 正確的路徑,然后switch database to copy進行更正。
我這里檢查都沒有問題。
16.創建spfile然后使用spfile啟動數據庫
create spfile from pfile='/u01/app/oracle/product/11.2.0/dbhome_1/dbs/pfile_for_standby.txt';
17.啟動MRP,驗證DG同步成功
--RECOVER:
recover managed standby database disconnect;
--CANCEL:
recover managed standby database cancel;
--RTA(最終要求這種方式):
recover managed standby database using current logfile disconnect;
--DG LAG:
set lines 1000
col value for a15
select * from v$dataguard_stats;
查詢結果顯示,在DATUM_TIME列是接近當前時間的情況下,transport lag和apply lag兩列的值均為0或是接近0,一般認定是同步正常。
還可以查詢備庫的SCN,觀察是否隨着時間不斷增長,以此來輔助判斷DG實時同步:
select current_scn from v$database;
如果同步有問題,主庫查詢對應dest_id的error信息:
select error from v$archive_dest where dest_id = 2;
18.部署定時任務進行歷史歸檔清理
因為備庫沒有備份任務,為防止后續備庫端歸檔滿,需要部署定時任務進行歷史歸檔清理,下面給出一個示例:mkdir /home/oracle/scripts
cd /home/oracle/scripts
vi del_arch.sh
rman target / <<EOF >> /home/oracle/scripts/del_arch.log
delete noprompt archivelog all completed before 'sysdate - 1/24';
EOF
crontab -e
0 * * * * /bin/sh /home/oracle/scripts/del_arch.sh
至此,Oracle 11g ADG 部署(duplicate)整個過程已完成。