一:實驗環境介紹
PC機系統: CentOS 6.5(64位)
數據庫版本: Oracle 11gR2 11.2.0.4 (64位)
IP地址規划:
主數據庫
10.110.9.41
SID:orapri
db_name:orapri
db_unique_name:orapri
備份數據庫
10.110.9.40
SID:orastd
db_name:orapri
db_unique_name:orastd
二:安裝數據庫軟件前的系統配置 (主庫和備庫端都要做下列操作),如果是PDT系統安裝數據庫可以省略此步
1.裝包
binutils compat-libstdc++-33 elfutils-libelf elfutils-libelf-devel glibc glibc-common glibc-devel gcc gcc-c++ libaio-devel libaio libgcc libstdc++ libstdc++-devel make sysstat unixODBC unixODBC-devel pdksh numactl-devel glibc-headers
現在是通過yum方式進行安裝的。
2.創建相關的組與用戶:
groupadd dba
groupadd oinstall
groupadd oper
useradd -g oinstall -G dba,oper oracle
passwd oracle
3.創建所需的目錄並賦予特定的屬主和屬組
mkdir -p /opt/local/oracle/app/product/11.2.0/db_1
chown -R oracle:oinstall/opt/local/oracle
chmod -R755/opt/local/oracle
4.修改/etc/sysctl.conf文件,在最下新增
#setting oracle
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 2097152
kernel.shmmax = 4294967295
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range=3276861000
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
--以前系統已經配置參數
kernel.shmall = 4294967296 oracle官網推薦值2097152,系統現有的值4294967296需修改,推薦值(內存大小KB/4KB)
kernel.shmmax = 68719476736Minimum: 536870912Maximum: 比物理內存小1個字節的值 建議:超過物理內存的80%
后需執行sysctl -p命令使其生效.
5.修改vi /etc/pam.d/login文件,在最下新增(使/etc/security/limits.conf 文件配置生效)
#setting oracle
session required pam_limits.so
6.修改/etc/security/limits.conf文件,在最下新增
#setting oracle
oracle soft nproc 65535
oracle hard nproc 65535
oracle soft nofile 65535
oracle hard nofile 65536
oracle soft stack 10240
7.修改參數配置文件/etc/profile,新增
#setting oracle
export ORACLE_BASE=/opt/local/oracle/app
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1
export PATH=$PATH:$ORACLE_HOME/bin
export ORACLE_PID=oradb
export ORACLE_SID=oradb
export NLS_LANG="AMERICAN_AMERICA.AL32UTF8"
export ORACLE_HOME_LISTNER=$ORACLE_HOME
8.在root用戶下執行以下命令
usermod -G oinstall root
9.使用oracle用戶登錄服務器,修改~/.bash_profile文件,新增
#setting oracle
export ORACLE_BASE=/opt/local/oracle/app
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1
export PATH=$PATH:$ORACLE_HOME/bin
export ORACLE_PID=oradb
export ORACLE_SID=oradb
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
export NLS_LANG="AMERICAN_AMERICA.AL32UTF8"
export ORACLE_HOME_LISTNER=$ORACLE_HOME
10.修改主備機名編輯主備機/etc/hosts文件
主:
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
10.110.9.41 primary
備:
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
10.110.9.40 standy
三:開始安裝oracle11g數據庫軟件 (主庫和備庫端都要做下列操作)
安裝過程:詳見《VOS系統oracle數據庫安裝配置使用說明書》
注意:主庫在安裝完軟件后需要進行DBCA建庫操作,推薦不要啟用歸檔模式,會節省時間,備庫端不要建庫!可以開啟監聽程序
四:開始搭建Dataguard
1:將數據庫改為強制日志模式 (此步驟只在主庫上做)
[oracle@primary ~]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.4.0 Production on Mon Dec 31 21:35:05 2018
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 name,log_mode,force_logging from v$database;
NAME LOG_MODE FORCE_LOG
--------------------------- ------------------------------------ ---------
ORAPRI ARCHIVELOG NO
SQL>
SQL> alter database force logging;
Database altered.
SQL> select name,log_mode,force_logging from v$database;
NAME LOG_MODE FORCE_LOG
--------------------------- ------------------------------------ ---------
ORAPRI ARCHIVELOG YES
SQL> exit
Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
[oracle@primary ~]$
2:創建密碼文件 (此步驟只在主庫上做)
注意:兩端分別創建自己的密碼文件好像有問題,備庫的密碼文件需要跟主庫一致,否則導致日志傳輸不到備庫,有待驗證。我最后是將主庫的密碼文件直接copy到備庫,重命名后使用。
[oracle@primary ~]$ cd $ORACLE_HOME/dbs
[oracle@primary dbs]$ ls
hc_orapri.dat initorapri.ora lkORAPRI orapwpri spfileorapri.ora
init.ora lkORADB orapworapri snapcf_orapri.f spfileorapri.ora_bak
[oracle@primary dbs]$
已經有一個密碼文件了
[oracle@primary dbs]$ orapwd file=orapwpri password=sysdba force=y
這條命令可以手動生成密碼文件,force=y的意思是強制覆蓋當前已有的密碼文件(如果有可以不建立)
將主庫的密碼文件copy給備庫,並重命名
[oracle@primary dbs]$ scp orapwpri 10.110.9.40:$ORACLE_HOME/dbs/orapwstd
3:創建standby redolog日志組 (此步驟只在主庫上做)
原則:
1:standby redo log的文件大小與primary 數據庫online redo log 文件大小相同
2:standby redo log日志文件組的個數依照下面的原則進行計算:
Standby redo log組數公式>=(每個instance日志組個數+1)*instance個數
假如只有一個節點,這個節點有三組redolog,
所以Standby redo log組數>=(3+1)*1 == 4
所以至少需要創建4組Standby redo log
查看當前線程與日志組的對應關系及日志組的大小:
SQL> select thread#,group#,bytes/1024/1024 from v$log;
THREAD# GROUP# BYTES/1024/1024
---------- ---------- ---------------
1 1 50
1 2 50
1 3 50
SQL>
如上,我現在的環境有三組redolog,每個日志組的大小都是50M,
所以Standby redo log組數>=(3+1)*1== 4
所以至少需要創建4組Standby redo log,大小均為50M
SQL> col member for a50
SQL> select group#,member from v$logfile;
GROUP# MEMBER
---------- --------------------------------------------------
3 /opt/local/oracle/app/oradata/orapri/redo03.log
2 /opt/local/oracle/app/oradata/orapri/redo02.log
1 /opt/local/oracle/app/oradata/orapri/redo01.log
3 rows selected.
SQL>
先手動創建standby log日志組所需的目錄:(創建新目錄只是為了便於區分,並非必須)
[oracle@primary dbs]$ cd /opt/local/oracle/app/oradata/
[oracle@primary oradata]$ mkdir standbylog
新建4個日志組作為standby redolog日志組,大小與原來的日志組一致:
由於已經存在group1-3,,所以group號只能從4開始
SQL>
alter database add standby logfile group 4 '/opt/local/oracle/app/oradata/standbylog/std_redo04.log' size 50m;
alter database add standby logfile group 5 '/opt/local/oracle/app/oradata/standbylog/std_redo05.log' size 50m;
alter database add standby logfile group 6 '/opt/local/oracle/app/oradata/standbylog/std_redo06.log' size 50m;
alter database add standby logfile group 7 '/opt/local/oracle/app/oradata/standbylog/std_redo07.log' size 50m;
SQL>
查看standby 日志組的信息:
SQL> set linesize 1000
SQL> select group#,sequence#,status, bytes/1024/1024 from v$standby_log;
GROUP# SEQUENCE# STATUS BYTES/1024/1024
---------- ---------- ------------------------------ ---------------
4 0 UNASSIGNED 50
5 0 UNASSIGNED 50
6 0 UNASSIGNED 50
7 0 UNASSIGNED 50
SQL>
查看當前有哪些日志組及其成員:
SQL> set pagesize 100
SQL> col member for a60
SQL> select group#,member from v$logfile order by group#;
GROUP# MEMBER
---------- ------------------------------------------------------------
1 /opt/local/oracle/app/oradata/orapri/redo01.log
2 /opt/local/oracle/app/oradata/orapri/redo02.log
3 /opt/local/oracle/app/oradata/orapri/redo03.log
4 /opt/local/oracle/app/oradata/standbylog/std_redo04.log
5 /opt/local/oracle/app/oradata/standbylog/std_redo05.log
6 /opt/local/oracle/app/oradata/standbylog/std_redo06.log
7 /opt/local/oracle/app/oradata/standbylog/std_redo07.log
4:修改主庫的pfile參數文件 (此步驟只在主庫上做)
創建pfile文件
SQL> create pfile from spfile;
File created.
SQL>
修改pfile文件
orapri.__db_cache_size=1040187392
orapri.__java_pool_size=16777216
orapri.__large_pool_size=33554432
orapri.__oracle_base='/opt/local/oracle/app'#ORACLE_BASE set from environment
orapri.__pga_aggregate_target=838860800
orapri.__sga_target=1442840576
orapri.__shared_io_pool_size=0
orapri.__shared_pool_size=335544320
orapri.__streams_pool_size=0
*.audit_file_dest='/opt/local/oracle/app/admin/orapri/adump'
*.audit_trail='db'
*.compatible='11.2.0.4.0'
*.control_files='/opt/local/oracle/app/oradata/orapri/control01.ctl','/opt/local/oracle/app/flash_recovery_area/orapri/control02.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_name='orapri'
*.db_recovery_file_dest='/opt/local/oracle/app/flash_recovery_area'
*.db_recovery_file_dest_size=4385144832
*.diagnostic_dest='/opt/local/oracle/app'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=orapriXDB)'
*.open_cursors=300
*.pga_aggregate_target=825229312
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_target=1428160512
*.undo_tablespace='UNDOTBS1'
#新增部分
*.db_unique_name='orapri'
*.log_archive_config='dg_config=(orapri,orastd)'
*.log_archive_dest_1='location=/opt/local/oracle/app/oracle/arch valid_for=(all_logfiles,all_roles) db_unique_name=orapri'
*.log_archive_dest_2='service=orastd valid_for=(online_logfiles,primary_role) db_unique_name=orastd'
*.log_archive_dest_state_1=enable
*.log_archive_dest_state_2=enable
*.log_archive_max_processes=4
*.fal_server='orastd'
*.fal_client='orapri'
*.db_file_name_convert='/opt/local/oracle/app/oradata/orastd','/opt/local/oracle/app/oradata/orapri'
*.log_file_name_convert='/opt/local/oracle/app/oradata/orastd','/opt/local/oracle/app/oradata/orapri'
*.standby_file_management='auto'
手動創建歸檔日志路徑
手工創建/u01/app/oracle/arch:
[oracle@primary ~]$ mkdir –p /opt/local/oracle/app/oracle/arch/
5:用修改過的pfile重新創建一個spfile,用於重啟數據庫 (此步驟只在主庫上做)
關閉數據庫:
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
用修改過的pfile重新創建一個spfile:
SQL> create spfile from pfile;
此時把數據庫改為歸檔模式: (如果當初建庫時選擇了啟用歸檔,則此步驟忽略)
由於當前數據庫已關閉,首先需要把數據庫啟動到mount狀態
SQL> startup mount;
ORACLE instance started.
Database mounted.
SQL> alter database archivelog; 啟用歸檔模式
Database altered.
SQL> alter database open; OPEN數據庫
Database altered.
SQL> archive log list; 查看是否啟用歸檔模式
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination/opt/local/oracle/app/oracle/arch
Oldest online log sequence 22
Next log sequence to archive 24
Current log sequence 24
如上,歸檔路徑已經改為/opt/local/oracle/app/oracle/arch,證明對pfile的修改已生效
6:修改監聽文件,添加靜態監聽 (主庫、備庫都要做)
主庫:
[oracle@primary ~]$ cd $ORACLE_HOME/network/admin
[oracle@primary admin]$ vim listener.ora
# listener.ora Network Configuration File: /opt/local/oracle/app/product/11.2.0/db_1/network/admin/listener.ora
# Generated by Oracle configuration tools.
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = primary))
(ADDRESS = (PROTOCOL = TCP)(HOST = primary)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
ADR_BASE_LISTENER = /opt/local/oracle/app
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = orapri)
(ORACLE_HOME = /opt/local/oracle/app/product/11.2.0/db_1)
(SID_NAME = orapri)
)
)
[oracle@primary admin]$ vim tnsnames.ora
# tnsnames.ora Network Configuration File: /opt/local/oracle/app/product/11.2.0/db_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
ORAPRI =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = primary)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orapri)
)
)
pri =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.110.9.41)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orapri)
)
)
std =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.110.9.40)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orastd)
)
)
orastd =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.110.9.40)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orastd)
)
)
備庫:
[oracle@standy ~]$ cd $ORACLE_HOME/network/admin
[oracle@standy admin]$ vim listener.ora
# listener.ora Network Configuration File: /opt/local/oracle/app/product/11.2.0/db_1/network/admin/listener.ora
# Generated by Oracle configuration tools.
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = standy))
(ADDRESS = (PROTOCOL = TCP)(HOST = standy)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
ADR_BASE_LISTENER = /opt/local/oracle/app
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = orastd)
(ORACLE_HOME = /opt/local/oracle/app/product/11.2.0/db_1)
(SID_NAME = orastd)
)
)
[oracle@standy admin]$ vim tnsnames.ora
# tnsnames.ora Network Configuration File: /opt/local/oracle/app/product/11.2.0/db_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
ORAPRI =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = primary)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orapri)
)
)
pri =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.110.9.41)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orapri)
)
)
std =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.110.9.40)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orastd)
)
)
orastd =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.110.9.40)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orastd)
)
)
使新增加的監聽生效: (主庫和備庫端都要做)
[oracle@standy admin]$ lsnrctl stop
[oracle@standy admin]$ lsnrctl start
確認新增加的靜態監聽有效:
主庫:
[oracle@standy admin]$ lsnrctl status
備庫:
[oracle@standy admin]$ lsnrctl status
7:在備庫端,修改pfile參數文件 (只在備庫端做)
orapri.__db_cache_size=1040187392
orapri.__java_pool_size=16777216
orapri.__large_pool_size=33554432
orapri.__oracle_base='/opt/local/oracle/app'#ORACLE_BASE set from environment
orapri.__pga_aggregate_target=838860800
orapri.__sga_target=1442840576
orapri.__shared_io_pool_size=0
orapri.__shared_pool_size=335544320
orapri.__streams_pool_size=0
*.audit_file_dest='/opt/local/oracle/app/admin/orastd/adump'
*.audit_trail='db'
*.compatible='11.2.0.4.0'
*.control_files='/opt/local/oracle/app/oradata/orastd/control01.ctl','/opt/local/oracle/app/flash_recovery_area/orastd/control02.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_name='orapri'
*.db_recovery_file_dest='/opt/local/oracle/app/flash_recovery_area'
*.db_recovery_file_dest_size=4385144832
*.diagnostic_dest='/opt/local/oracle/app'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=orapriXDB)'
*.open_cursors=300
*.pga_aggregate_target=825229312
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_target=1428160512
*.undo_tablespace='UNDOTBS1'
#新增內容
*.db_unique_name='orastd'
*.log_archive_config='dg_config=(orapri,orastd)'
*.log_archive_dest_1='location=/opt/local/oracle/app/oracle/arch valid_for=(all_logfiles,all_roles) db_unique_name=orastd'
*.log_archive_dest_2='service=orapri valid_for=(online_logfiles,primary_role) db_unique_name=orapri'
*.log_archive_dest_state_1=enable
*.log_archive_dest_state_2=enable
*.log_archive_max_processes=4
*.fal_server='orastd'
*.fal_client='orapri'
*.db_file_name_convert='/opt/local/oracle/app/oradata/orapri','/opt/local/oracle/app/oradata/orastd'
*.log_file_name_convert='/opt/local/oracle/app/oradata/orapri','/opt/local/oracle/app/oradata/orastd'
*.standby_file_management='auto'
8:在備庫端手工創建所需的目錄 (備庫端做,不提前創建的話恢復時會報錯!)
mkdir -pv /opt/local/oracle/app/admin/orastd/adump
mkdir -pv /opt/local/oracle/app/diag/rdbms/orastd/orastd/trace
mkdir -pv /opt/local/oracle/app/oracle/arch
mkdir -pv /opt/local/oracle/app/oradata/orastd
mkdir -pv /opt/local/oracle/app/oradata/standbylog
mkdir -pv /opt/local/oracle/app/flash_recovery_area
9:用修改后的pfile創建一個spfile,用於啟動數據庫 (備庫端做)
[oracle@standy ~]$ sqlplus / as sysdba
Connected to an idle instance.
SQL> create spfile from pfile;
File created.
將數據庫啟動到nomount狀態:
SQL> startup nomount;
ORACLE instance started.
Total System Global Area 839282688 bytes
Fixed Size 2233000 bytes
Variable Size 482348376 bytes
Database Buffers 352321536 bytes
Redo Buffers 2379776 bytes
SQL>
10:利用RMAN在備庫上恢復主庫 (備庫端做)
[oracle@standy ~]$ rman target sys/sysdba@pri auxiliary sys/sysdba@std nocatalog
Recovery Manager: Release 11.2.0.4.0 - Production on Mon Dec 31 22:00:57 2018
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
connected to target database: ORAPRI (DBID=2916030696)
using target database control file instead of recovery catalog
connected to auxiliary database: ORAPRI (DBID=2916030696)
RMAN> duplicate target database for standby from active database nofilenamecheck; --備機同步主機數據
...
Finished Duplicate Db at 16-MAR-16
RMAN>
恢復數據庫結束
12:分別查看主庫和備庫的歸檔序列號是否一致:
主機:
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /opt/local/oracle/app/oracle/arch
Oldest online log sequence 26
Next log sequence to archive 28
Current log sequence 28
SQL>
備機:
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /opt/local/oracle/app/oracle/arch
Oldest online log sequence 26
Next log sequence to archive 0
Current log sequence 28
SQL>
13 : 啟動備機為只讀模式
啟用備機實時查詢
SQL> startup mount
SQL>alter database recover managed standby database using current logfile disconnect;
SQL> alter database recover managed standby database cancel;
SQL> alter database open;
SQL> alter database recover managed standby database using current logfile disconnect;
14 : 修改數據庫保護模式
adg的數據傳輸應用三大模式轉換
1.最大可用性模式(Maximum Availability)
1)該模式提供了僅次於“最大保護模式”的數據保護能力;
2)要求至少一個物理備庫收到重做日志后,主庫的事務才能夠提交;
3)主庫找不到合適的備庫寫入時,主庫不會關閉,而是臨時降低到“最大性能模式”模式,直到問題得到處理;
4)優點:該模式可以在沒有問題出現的情況下,保證備庫沒有數據丟失,是一種折中的方法;
5)缺點:在正常運行的過程中缺點是主庫的性能受到諸多因素的影響。
2.最大性能模式(Maximum Performance)
1)該模式是默認模式,可以保證主數據庫的最高可用性;
2)保證主庫運行過程中不受備庫的影響,主庫事務正常提交,不因備庫的任何問題影響到主庫的運行;
4)優點:避免了備庫對主數據庫的性能和可用性影響;
5)缺點:如果與主庫提交的事務相關的恢復數據沒有發送到備庫,這些事務數據將被丟失,不能保證數據無損失。
3.最大保護模式(Maximum Protection)
1)這種模式提供了最高級別的數據保護能力;
2)要求至少一個物理備庫收到重做日志后,主庫的事務才能夠提交;
3)主庫找不到合適的備庫寫入時,主庫會自動關閉,防止未受保護的數據出現;
4)優點:該模式可以保證備庫沒有數據丟失;
5)缺點:主庫的自動關閉會影響到主庫的可用性,同時需要備庫恢復后才能提交,對網絡等客觀條件要求非常的高,主庫的性能會因此受到非常大的沖擊。
#primary 端查看,我們可以看到數據庫的保護模式為最大性能
SQL> select database_role,protection_mode,protection_level,open_mode from v$database;
#standby 端查看,也是一樣的。
SQL> select database_role,protection_mode,protection_level,open_mode from v$database;
主備機mount狀態下切換保護模式:
alter database set standby database to maximize performance; --切換為最大性能
alter database set standby database to maximize availability; --切換為最大可用
alter database set standby database to maximize protection; --切換為最大保護
15 : ADG常用運維命令和腳本
主要做主從數據庫同步,通過Dataguard實現,當運行一段時間后,發現主從數據庫的數據不一致了,從庫無法啟動,報“ORA-01196: 文件 1 由於介質恢復會話失敗而不一致”這個錯誤,具體日志信息如下:
SQL> alter database open;
alter database open
*
第 1 行出現錯誤:
ORA-10458: standby database requires recovery
ORA-01196: 文件 1 由於介質恢復會話失敗而不一致
ORA-01110: 數據文件 1: 'D:\APP\ADMINISTRATOR\ORADATA\ORCL\SYSTEM01.DBF'
解決方法:
從庫啟動到mount狀態:
SQL>SHUTDOWN IMMEDIATE
SQL>STARTUP MOUNT;
SQL>alter database recover managed standby database using current logfile disconnect;
到主庫上操作:
SQL>ALTER SYSTEM SWITCH LOGFILE;
多操作幾次,操作之后,稍等一段時間,時間視網速而定,過一段時間后,在主庫上查詢一下規定情況:
SQL>SELECT NAME,SEQUENCE#,ARCHIVED,APPLIED FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;
如果返回結果"APPLIED"都是“YES”或者只有最后一個是“NO”的話,說明全部歸檔日志全部已經歸檔完了,此時到備庫上上操作:
備庫操作:
SQL>alter database recover managed standby database cancel;
SQL>alter database open;
SQL>alter database recover managed standby database using current logfile disconnect;