概述
參考文檔下載鏈接:鏈接: https://pan.baidu.com/s/1gcSw0qsb8sI4XY84ZGV5Xg 提取碼: sn1p
前提:本文檔基於已經創建了oracle數據庫,兩臺服務器網絡可以互相訪問,
|
主庫 |
備庫 |
OS系統 |
Centos 7.5 x64 |
Centos 7.5 x64 |
數據庫版本 |
12.2.0.1 |
12.2.0.1 |
IP |
192.168.33.107 |
192.168.33.108 |
實例名 |
fxdb |
sbdb |
靜態監聽 |
1521-動態監聽 |
1522-靜態監聽 |
主庫:
Database軟件,dbca安裝數據庫,監聽
備庫:
Database軟件,無需dbca安裝數據庫,靜態監聽
- 主庫服務器配置
1.配置/etc/hosts
將這兩ip配置上
2.啓用force logging
alter database force logging;
select force_logging from v$database;(查詢狀態是否爲YES)
3.啓用歸檔
alter system set log_archive_format='%t_%s_%r.arc' scope=spfile;
alter system set log_archive_dest_1='LOCATION=/u01/arch' scope=spfile;
sql> shutdown immediate;
sql> startup mount;
sql> alter database archivelog;
sql> alter database open;
退出來創建/u01/arch路徑
4.配置主庫初始化參數
alter system set log_archive_config='DG_CONFIG=(fxdb,sbdb)' scope=both; 是指的DB_UNIQUE_NAME值
alter system set log_archive_dest_1='LOCATION=/u01/arch VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=fxdb' scope=both;
alter system set log_archive_dest_2='SERVICE=tnssbdb LGWR SYNC AFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=sbdb' scope=both;
alter system set standby_file_management='AUTO' scope=both;
alter system set fal_client='tnsfxdb' scope=both; 是指tnsname
alter system set fal_server='tnssbdb' scope=both;
5.配置tns,
編輯tnsnames.ora文件,一般這個文件都是在這個路徑下面的 $ORACLE_HOME/network/admin
LISTENER_FXDB =
(ADDRESS = (PROTOCOL = TCP)(HOST = fanxin01)(PORT = 1521))
FXDB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = fanxin01)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = fxdb)
)
)
TNSFXDB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = fanxin01)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = fxdb)
)
)
TNSSBDB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = fanxin02)(PORT = 1522))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = fxdb)
)
)
主庫配置完成
- 備庫服務器配置
1.配置/etc/hosts
將這兩ip配置上
2.從主庫中拷貝密碼文件到備庫中
主庫和備庫,SYS密碼必須相同
命名規則:orapwSID
scp orapwfxdb fanxin02:/u01/app/oracle/product/12.2.0/db_1/dbs
mv orapwfxdb orapwsbdb
3.從主庫中拷貝tnsnames.ora到備庫中
scp tnsnames.ora
fanxin02:/u01/app/oracle/product/12.2.0/db_1/network/admin/tnsnames.ora
配置如下
4.從主庫中拷貝listener.ora到備庫中,配置靜態監聽
scp tnsnames.ora
fanxin02:/u01/app/oracle/product/12.2.0/db_1/network/admin/tnsnames.ora
配置如下
5.創建pfile文件
在$ORACLE_HOME/db_1/dbs目錄下
touch initsbdb.ora
編輯這個文件的內容
db_name='fxdb'
sga_target=1520M
pga_aggregate_target=579M
db_unique_name='sbdb'
compatible='12.2.0' 配置爲和主庫一致
log_archive_config='DG_CONFIG=(fxdb,sbdb)'
audit_file_dest='/u01/app/oracle/admin/sbdb/adump'
control_files='/u01/app/oracle/oradata/sbdb/control01.ctl','/u01/app/oracle/oradata/sbdb/control02.ctl'
log_archive_dest_1='LOCATION=/u01/arch VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=sbdb'
log_archive_dest_2='SERVICE=tnsfxdb LGWR SYNC AFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=fxdb'
db_file_name_convert='/u01/app/oracle/oradata/fxdb','/u01/app/oracle/oradata/sbdb'
log_file_name_convert='/u01/app/oracle/oradata/fxdb','/u01/app/oracle/oradata/sbdb'
standby_file_management='AUTO'
remote_login_passwordfile='EXCLUSIVE'
fal_client='tnssbdb'
fal_server='tnsfxdb'
創建目錄:
mkdir -p /u01/app/oracle/admin/sbdb/adump
mkdir -p /u01/app/oracle/oradata/sbdb
mkdir -p /u01/arch
登錄oracle執行下面這條命令
create spfile from pfile;
可以看到對應生成了下面這個文件
6.然後再啓動nomount狀態
登錄oracle,啓動nomount狀態
startup nomount;
備庫配置完成
- 主備庫測試監聽
早主備庫中都執行下面四個命令,測試是否成功
tnsping tnsfxdb
tnsping tnssbdb
sqlplus sys/Oracle123@tnsfxdb as sysdba
sqlplus sys/Oracle123@tnssbdb as sysdba
以上如果都沒問題,能夠聯的上對應oracle,纔可以進行下面操作
- 創建備庫
rman備份集,備庫此時處於nomount狀態 --連接rman
rman target sys/123456789Wuw@tnsfxdb auxiliary sys/123456789Wuw@tnssbdb
--從主庫創建備庫
duplicate target database for standby from active database nofilenamecheck;
如果失敗:
備庫:
shutdown->startup nomount
數據文件都刪除 --刪除/u01/app/oracle/oradata/sbdb 路徑的下的所有文件,然後在執行上面的操作
- 開啓主從同步
在備庫中登錄Oracle,添加Standby日誌組並開啓同步,Standby日誌組=日誌組+1
alter database add standby logfile group 4 ('/u01/app/oracle/oradata/sbdb/stredo04.rdo') size 200m;
alter database add standby logfile group 5 ('/u01/app/oracle/oradata/sbdb/stredo05.rdo') size 200m;
alter database add standby logfile group 6 ('/u01/app/oracle/oradata/sbdb/stredo06.rdo') size 200m;
alter database add standby logfile group 7 ('/u01/app/oracle/oradata/sbdb/stredo07.rdo') size 200m;
如果失敗了,刪除對應文件
alter database drop standby logfile group 4;
alter database drop standby logfile group 5;
alter database drop standby logfile group 6;
alter database drop standby logfile group 7;
打開數據庫實例:
alter database open
--開啓實時同步
alter database recover managed standby database disconnect;
--更改保護模式爲最大可用
alter database set standby database to maximize availability;
查看狀態:
select name,open_mode,database_role,protection_mode,protection_level from v$database;
主從同步開啓完成,
六.服務器故障處理
PS:如果出現服務器宕機,停電等特殊情況,導致Oracle服務器中斷了,需要重新啓動oracle,這個時候oracle主從同步也會失效,需要重新開啓同步,需要按照以下規則來啓動
- 先啓動備庫,再啓動主庫(避免數據未同步問題)
- 先關閉主庫,再關閉備份(如果需要關閉服務的話)
PS:注意,以下操作都是在切換到Oracle用戶下進行的
操作1:啓動備庫
操作2:啓動主庫
1.啓動oracle實例
2.啓動oracle監聽
操作3:在備庫上重新開啓主從同步
開啓完成之後就可以自己測試一下了,
這邊我測試了一種情況,就是主從同步未開啓的情況,往主庫的表中插入數據,這個時候是不能同步到備庫中了,但是開啓了主從同步之後,主庫會自動將原先未開啓主從同步之前的數據也一起同步到備庫中去