Oracle19C DataGuard搭建
一、配置前提
主庫 192.168.75.133 sid:orcl service:orcl
備庫 192.168.75.134 sid:orcl service:orcldg
二、配置過程
1.判斷DG是否已經安裝:
select * from v$option where parameter = 'Oracle Data Guard'; 如果是true表示已經安裝可以配置,否則需要安裝相應組件。
2.設置主、從庫為強制記錄日誌。(主、從庫)
(1)開啟強制歸檔
1)SQL> conn / as sysdba (以DBA身份連接資料庫)
2)SQL> shutdown immediate; (立即關閉資料庫)
3)SQL> startup mount (啟動實例並加載資料庫,但不打開)
4)SQL> alter database archivelog; (更改資料庫為歸檔模式)
5)alter database force logging; (設置強制歸檔)
(2)sql>select name,force_logging from v$database;檢查狀態(YES為強制) (3)如果需要在主庫添加或者刪除數據文件時,這些文件也會在備份添加或刪除,使用如下:
sql> alter system set STANDBY_FILE_MANAGEMENT=auto;(設置自動同步)
sql>show parameter standby (默認此參數是manual手工方式)
3.創建standby log files(備用日誌文件)(主、從庫都建立)(最好最後創建)
su - oracle
cd $ORACLE_BASE/oradata/ORCL/
mkdir dg
chown oracle:dba dg
sql> alter database add standby logfile group 11 '/home/oracle/app/oracle/oradata/ORCL/dg/standby11.log' size 200M;
sql> alter database add standby logfile group 12 '/home/oracle/app/oracle/oradata/ORCL/dg/standby12.log' size 200M;
sql> alter database add standby logfile group 13 '/home/oracle/app/oracle/oradata/ORCL/dg/standby13.log' size 200M;
sql> alter database add standby logfile group 14 '/home/oracle/app/oracle/oradata/ORCL/dg/standby14.log' size 200M;
4.密碼文件和控制文件的創建傳輸
(1)一般資料庫默認就有密碼文件,存放在$ORACLE_HOME/dbs/orapwSID(linux),這裡為orapworcl,(windows server 2008 R2系統在D:\app\Administrator\product\19.3.0\dbhome_1\database) 如果沒有
sql>orapwd file=$ORACLE_HOME/dbs/orapworcl password=oracle
(2)檢查REMOTE_LOGIN_PASSWORDFILE值是否為 EXCLUSIVE sql>show parameter REMOTE_LOGIN_PASSWORDFILE 如果值不是EXCLUSIVE,則:
alter system set remote_login_passwordfile=exclusive scope=spfile;
(3)密碼文件需要scp到從庫
linux環境
scp orapworcl oracle@192.168.75.134:/home/oracle/app/oracle/product/19.3.0/db_1/dbs
windows環境
拷貝D:\app\Administrator\product\19.3.0\dbhome_1\database\ PWDorcl.ora 到192.168.75.134對應目錄
5.db_name和db_unique_name
默認db_name和db_unique_name和實例名是一致的,這裡是orcl需要注意在DG中主庫和從庫的db_unique_name是不能一致的,需要區分開的。這裡我們設置主庫的db_unique_name為orcl,從庫為orcldg. sql>show parameter db_unique_name sql>alter system set db_unique_name=orcl scope=spfile; (主庫)
sql>alter system set db_unique_name=orcldg scope=spfile; (從庫)
注意雖然默認db_unique_name和db_name是一致的,但是需要顯式設置,否則在spfile中沒有此參數
6.閃回資料庫:
(1)快速恢復區(Flash/Fast Recovery Area),默認是配置的,但是需要確認這個區域的磁碟夠大,至少300G以上(默認3G)
sql>show parameter db_recovery_file_dest
主、備都執行
mkdir /home/oracle/app/oracle/db_recovery_file_dest #創建閃回區
主、備都執行
更改大小:sql>alter system set db_recovery_file_dest_size=200G;
主、備都執行
可以修改位置:sql>alter system set db_recovery_file_dest='/home/oracle/app/oracle/db_recovery_file_dest';
(2)查看是否啟用,默認是不開啟的(主庫開啟,備庫在後面第17步開啟)
sql>select flashback_on from v$database; 開啟:sql>alter database flashback on;
如果你碰到 ORA-01153 報錯,那一定是在備庫進行此操作。你需要先取消重做日誌應用,啟用閃回日誌,然後重新啟用日誌應用。
在主庫啟用閃回日誌,不會同步備庫也啟用。你必須手動在主庫和備庫上均啟用閃回日誌。如果不啟用閃回日誌,當出現故障轉移時,你將需要完全重新開始創建一個備庫。
7.SQL*NET設置
(1)配置主庫的監聽
雖然可以通過netca來進行配置,但是除了這個默認的外,我們還需要一個靜態註冊SID_LIST_LISTENER,如果沒有此從參數而且dataguard啟動順序不正確,主庫會報PING[ARC1]:Heartbeat failed to connect to standby '***'.Error is 12514導致歸檔無法完成。配置如下:
vim /home/oracle/app/oracle/product/19.3.0/db_1/network/admin/listener.ora 加入下面的內容
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.75.133)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = orcl_DGMGRL) #增加_DGMGRL,後面的DG Broker使用
(ORACLE_HOME = /home/oracle/app/oracle/product/19.3.0/db_1)
(SID_NAME = orcl)
)
(SID_DESC =
(GLOBAL_DBNAME = orcldg_DGMGRL)
(ORACLE_HOME = /home/oracle/app/oracle/product/19.3.0/db_1)
(SID_NAME = orcl)
)
(SID_DESC =
(GLOBAL_DBNAME = orclpdb_DGMGRL)
(ORACLE_HOME = /home/oracle/app/oracle/product/19.3.0/db_1)
(SID_NAME = orcl)
)
(SID_DESC =
(GLOBAL_DBNAME = xukepdb_DGMGRL)
(ORACLE_HOME = /home/oracle/app/oracle/product/19.3.0/db_1)
(SID_NAME = orcl)
)
)
(2)配置tnsnames
vim /home/oracle/app/oracle/product/19.3.0/db_1/network/admin/tnsnames.ora
LISTENER_ORCL =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.75.133)(PORT = 1521))
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.75.133)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
ORCLDG =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.75.134)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcldg)
(UR=A)
)
)
(3)傳輸到備庫並修改listener.ora和tnsnames.ora
scp $ORACLE_HOME/network/admin/listener.ora oracle@192.168.75.134: $ORACLE_HOME/network/admin/
scp $ORACLE_HOME/network/admin/tnsnames.ora oracle@192.168.75.134: $ORACLE_HOME/network/admin/
vim listener.ora:
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.75.134)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = orcl_DGMGRL)
(ORACLE_HOME = /home/oracle/app/oracle/product/19.3.0/db_1)
(SID_NAME = orcl)
)
(SID_DESC =
(GLOBAL_DBNAME = orcldg_DGMGRL)
(ORACLE_HOME = /home/oracle/app/oracle/product/19.3.0/db_1)
(SID_NAME = orcl)
)
(SID_DESC =
(GLOBAL_DBNAME = orclpdb_DGMGRL)
(ORACLE_HOME = /home/oracle/app/oracle/product/19.3.0/db_1)
(SID_NAME = orcl)
)
(SID_DESC =
(GLOBAL_DBNAME = xukepdb_DGMGRL)
(ORACLE_HOME = /home/oracle/app/oracle/product/19.3.0/db_1)
(SID_NAME = orcl)
)
)
tnsnames.ora:不需要修改
8.重做日誌傳輸配置
(1)配置歸檔日誌位置: 查詢已經設置的歸檔路徑sql:archive log list或者show parameter log_archive_dest_1
(主庫操作)
mkdir /home/oracle/app/oracle/archive
sql> alter system set log_archive_dest_1='LOCATION=/home/oracle/app/oracle/archive valid_for=(all_logfiles,all_roles) db_unique_name=orcl' scope=spfile;
SQL> alter system set log_archive_dest_state_1='enable' scope=spfile;
(備庫操作)
mkdir /home/oracle/app/oracle/archive
sql> alter system set log_archive_dest_1='LOCATION=/home/oracle/app/oracle/archive valid_for=(all_logfiles,all_roles) db_unique_name=orcldg' scope=spfile;
SQL> alter system set log_archive_dest_state_1='enable' scope=spfile;
(註:官方文檔裡說使用 valid_for=(online_logfiles, all_roles),這將導致備庫無法歸檔備用日誌文件,因為它們不是在線日誌。但如果使用 all_logfiles 選項,主備庫將都能歸檔在線以及備用日誌。如果你想在備庫進行備份,並同時備份歸檔日誌的話,必須使用 all_logfiles。)
(2)配置重做日誌到備份庫:
(主庫操作)
sql>alter system set log_archive_dest_2='SERVICE=orcldg lgwr sync valid_for=(online_logfile,primary_role) db_unique_name=orcldg';
SQL> alter system set log_archive_dest_state_2='enable' scope=spfile;
(備庫操作)
SQL> alter system set log_archive_dest_2='SERVICE=orcl LGWR VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcl';
SQL> alter system set log_archive_dest_state_2='enable' scope=spfile;
(3)設置db_file_name_convert和log_file_name_conver參數:
(主庫、備庫都操作)
SQL> alter system set log_file_name_convert='/home/oracle/app/oracle/archive','/home/oracle/app/oracle/archive' scope=spfile;
SQL> alter system set db_file_name_convert='/home/oracle/app/oracle/oradata/ORCL/dg','/home/oracle/app/oracle/oradata/ORCL/dg' scope=spfile;
(4)要注意STANDBY_ARCHIVE_DEST 參數不需要,已經被官方棄用。設置此參數後啟動資料庫,只會報 ORA-32004: obsolete or deprecated parameter(s) specified for RDBMS instance 錯。
9.配置FAL_SERVER
這個參數指定當日誌傳輸出現問題時,備庫到哪裡去找缺少的歸檔日誌。它用在備庫接收的到的重做日誌間有缺口的時候。這種情況會發生在日誌傳輸出現中斷時,比如你需要對備庫進行維護操作。在備庫維護期間,沒有日誌傳輸過來,這時缺口就出現了。設置了這個參數,備庫就會主動去尋找那些缺少的日誌,並要求主庫進行傳輸。
主庫使用 :fal_server=從庫
從庫上就反過來:fal_server=主庫
sql>alter system set FAL_SERVER='orcldg'; (主庫)
alter system set fal_client=orcl scope=spfile; (主庫)
sql>alter system set FAL_SERVER='orcl'; (從庫)
alter system set fal_client=orcldg scope=spfile; (從庫)
10.Data Guard 配置裡的另外一個庫的名字(主備)
主庫操作
sql> alter system set log_archive_config = 'dg_config=(orcl,orcldg)';
備庫操作
sql> alter system set log_archive_config = 'dg_config=(orcldg,orcl)';
以上的辦法是我們採用alter system的方式在線修改,還有一種比較方便的辦法(但是容易出錯,所以方便和安全什麼時候都不可兼得)
11.主庫生成pfile (initorcl.ora),並傳輸到備庫進行修改
主庫操作
sql>create pfile from spfile;
scp /home/oracle/app/oracle/product/19.3.0/db_1/dbs/initorcl.ora oracle@192.168.75.134:/home/oracle/app/oracle/product/19.3.0/db_1/dbs
備庫操作
修改備庫的initorcl.ora 修改參數如下:
*.db_name='orcl'
*.db_unique_name='orcldg'
*.fal_server='orcl'
*.log_archive_config='dg_config=(orcldg,orcl)'
*.log_archive_dest_1='LOCATION=/home/oracle/app/oracle/archive valid_for=(all_logfiles,primary_role) db_unique_name=orcldg'
*.log_archive_dest_2='SERVICE=orcl lgwr sync valid_for=(online_logfile,primary_role) db_unique_name=orcl'
12.啟動備庫到nomount狀態: (備庫操作)
SQL> shutdown immediateSQL> create spfile from pfile='/home/oracle/app/oracle/product/19.3.0/db_1/dbs/initorcl.ora';SQL> startup nomount
13.在主庫上執行RMAN 並連接主資料庫和備資料庫
rman target / auxiliary sys/password@orcldg
RMAN>duplicate target database for standby from active database nofilenamecheck dorecover;
或執行下面操作
RMAN> run { allocate channel prmy1 type disk; allocate channel prmy2 type disk; allocate channel prmy3 type disk; allocate channel prmy4 type disk; allocate auxiliary channel dg type disk; duplicate target database for standby from active database;}
14.啟用物理備用資料庫: (duplicate 完成之後,備庫是mount的)
備庫操作
SQL>select status,instance_name from v$instance;
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
15.啟用主庫
SQL> startup
SQL> alter pluggable database all open;
16. 主備庫角色驗證、查看主備庫同步狀態
(1)分別在主備庫上,執行下面的SQL進行驗證:
主庫:SQL> select database_role,switchover_status from v$database;
備庫:SQL> select database_role,switchover_status from v$database;
(2)查看歸檔日誌同步狀況
SQL> alter system switch logfile; //主庫
sql>select sequence# from v$archived_log; 查看日誌序號
sql>select sequence#,applied from v$archived_log;備庫驗證
17.備庫開啟flashback:
SQL> select flashback_on from v$database; SQL> alter database recover managed standby database cancel; SQL> alter database flashback on; SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
18.啟動備庫到只讀模式
SQL> recover managed standby database cancel;
SQL> alter database open read only;
SQL> alter pluggable database all open;
SQL> recover managed standby database disconnect from session;
三、配置DG Broker服務
1、主備庫啟用broker
主備庫上執行下面的SQL啟用broker:
SQL> ALTER SYSTEM SET dg_broker_start=true scope=both;
2、創建broker配置文件
主庫執行
dgmgrl sys@orcl as sysdba
DGMGRL>create configuration dg_cfg as primary database is orcl connect identifier is orcl;
註:如果添加standby資料庫的時候,報如下錯誤:
ORA-16698: LOG_ARCHIVE_DEST_n parameter set for object to be added
在備庫上,將LOG_ARCHIVE_DEST_2參數的值清空重新添加即可。
SQL> alter system set LOG_ARCHIVE_DEST_2=' ' scope=both; (備庫操作)
3、啟動DGMGRL配置
DGMGRL> show configuration; 查看配置文件信息
DGMGRL> enable configuration; 開啟配置信息
DGMGRL> show database orcl 查看orcl配置
DGMGRL> show database orcldg 查看orcldg配置
4、使用dgmgrl執行主備切換
DGMGRL> show configuration;
DGMGRL> switchover to orcldg; 主備庫切換
DGMGRL> show configuration;
參考連結:https://blog.51cto.com/12608853/2362728
https://blog.51cto.com/candon123/2390513
https://blog.csdn.net/wll_1017/article/details/9794203