Linux環境上部署Oracle11gR2並搭建ADG,成功實踐

一.搭建環境

虛擬機系統: CentOS6.10(final)(64位)

數據庫版本: Oracle 11gR2 11.2.0.4 (64位)

IP地址規劃:

192.168.88.111 192.168.88.112
SID:fsda SID:fsdb
db_name:pri db_name:pri
db_unique_name:fsda db_unique_name:fsdb

在數據安裝完後,可用下面的命令檢查配置是否正確

select dbid,name,open_mode,db_unique_name from v$database;
select instance_name from v$instance;

基礎要求:(1)安裝兩臺虛擬機分別作爲主庫和備庫,硬盤大小隨意。但是必需保證根分區有20G,物理內存1G,SWAP 2G

關於Active database duplication方式:
在Oracle 10g下,我們可以使用RMAN duplicate 命令創建一個具有不同DBID 的複製庫。 到了Oracle 11gR2, RMAN 的duplicate 有2種方法實現:

  1. Active database duplication (本文所使用的方式,適用於11gR2之後的版本)

  2. Backup-based duplication (傳統方式,10g,11g通用)

Active database duplication 通過網絡,直接copy target庫(目標庫)到auxiliary庫(輔助庫),然後創建複製庫。這種方法就不需要先用RMAN 備份數據庫,然後將備份文件發送到auxiliary端。
這個功能的作用是非常大的。 尤其是對T級別的庫。 因爲對這樣的庫進行備份,然後將備份集發送到備庫,在進行duplicate 的代價是非常大的。 一備份要佔用時間,二要佔用備份空間,三在網絡傳送的時候,還需要佔用帶寬和時間。所以Active database duplicate 很好的解決了以上的問題。 它對大庫的遷移非常有用。
如果是從RAC duplicate 到單實例,操作是一樣的。如果是從單實例duplicate到RAC。 那麼先duplicate到單實例。 然後將單實例轉換成RAC。

二:安裝數據庫軟件前的系統配置(主庫和備庫端都要做下列操作)

1.基本配置:
一定要用新裝的系統(這裏以CentOS版6.10(final)爲例),系統要求最低配置內存1G,swap分區2G,根分區20G以上,裝好系統後先配置好yum,IP地址,/etc/sysconfig/network文件中的主機名,以及/etc/hosts文件中的IP地址和主機名的對應關係。

主庫IP:192.168.88.111  
主庫主機名:pri
備庫IP:192.168.88.112
備庫主機名:sla

2.安裝依賴包

binutils-2.20.51.0.2-5.11.el6 (x86_64)
compat-libcap1-1.10-1 (x86_64)
compat-libstdc++-33-3.2.3-69.el6 (x86_64)
compat-libstdc++-33-3.2.3-69.el6.i686
gcc-4.4.4-13.el6 (x86_64)
gcc-c++-4.4.4-13.el6 (x86_64)
glibc-2.12-1.7.el6 (i686)
glibc-2.12-1.7.el6 (x86_64)
glibc-devel-2.12-1.7.el6 (x86_64)
glibc-devel-2.12-1.7.el6.i686
ksh
pdksh-5.2.14-21.x86_64.rpm
libgcc-4.4.4-13.el6 (i686)
libgcc-4.4.4-13.el6 (x86_64)
libstdc++-4.4.4-13.el6 (x86_64)
libstdc++-4.4.4-13.el6.i686
libstdc++-devel-4.4.4-13.el6 (x86_64)
libstdc++-devel-4.4.4-13.el6.i686
libaio-0.3.107-10.el6 (x86_64)
libaio-0.3.107-10.el6.i686
libaio-devel-0.3.107-10.el6 (x86_64)
libaio-devel-0.3.107-10.el6.i686
make-3.81-19.el6
sysstat-9.0.4-11.el6 (x86_64)
unixODBC-2.2.14-11.el6 (x86_64) or later
unixODBC-2.2.14-11.el6.i686 or later
unixODBC-devel-2.2.14-11.el6 (x86_64) or later
unixODBC-devel-2.2.14-11.el6.i686 or later

3.創建相關的組與用戶

groupadd oinstall
groupadd -g 502 dba
groupadd -g 503 oper
useradd -u 502 -g oinstall -G dba,oper oracle
passwd oracle

4.創建所需的目錄並賦予特定的屬主和屬組

mkdir -p /u01/app/oracle
chown -R oracle:oinstall /u01/app
chmod -R 775 /u01/app

5.編輯limits.conf 文件

vim /etc/security/limits.conf
在行末添加如下參數
oracle              soft    nproc   2047
oracle              hard    nproc   16384
oracle              soft    nofile  1024
oracle              hard    nofile  65536
oracle              soft    stack   10240 

6.編輯sysctl.conf文件,設置相關參數
添加/修改下列內容:(注意!下面的參數,若是已經存在,則直接修改數值,不要再添加同樣的參數,相同的參數只能有一個!如果需要修改的參數已經大於下面的數字,則不用修改,請仔細覈對!)

vim /etc/sysctl.conf
在行末添加如下參數

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 = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576

#sysctl –p 使其生效
# /sbin/sysctl -p
保存退出後,別忘了用sysctl -p命令使參數生效!

7.編輯vim /home/oracle/.bash_profile文件,配置相關環境變量,添加下列幾行:

export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2/db
export ORACLE_SID=fsda (備庫端設置爲fsdb)
export LD_LIBRARY_PATH=$ORACLE_HOME/bin:/bin:/usr/bin:/usr/local/bin:
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
export PATH=$ORACLE_HOME/bin:$PATH

關閉iptables和selinux

service iptables stop
chkconfig iptables off
[root@pri ~]#vi /etc/selinux/config

將SELINUX的值改爲disabled
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of these two values:
# targeted - Targeted processes are protected,
# mls - Multi Level Security protection.
SELINUXTYPE=targeted

三:開始安裝oracle11g數據庫軟件 (主庫和備庫端都要做下列操作)

1.上傳oracle11g的鏡像到/tmp目錄下,並把3個包解壓

cd /mnt/cdrom/
unzip p13390677_112040_Linux-x86-64_1of7.zip -d /usr/local/src
unzip p13390677_112040_Linux-x86-64_2of7.zip -d /usr/local/src
unzip p13390677_112040_Linux-x86-64_3of7.zip -d /usr/local/src

(只裝數據庫的話,解壓前兩個包即可,第三個包是grid)
2. root身份執行xhost +,然後切換到oracle用戶進入/tmp/database目錄中,執行runInstaller 開始安裝 (database是默認解壓完的目錄名)

$ ./runInstaller

注意:安裝oracle11g要求分辨率最低爲1024x768,不然無法完整顯示安裝過程
安裝過程:參考一下我的教程即可
注意:主庫在安裝完軟件後需要進行DBCA建庫操作,推薦不要啓用歸檔模式,會節省時間,備庫端不要建庫!可以開啓監聽程序

四:開始搭建Dataguard

1:將數據庫改爲強制日誌模式(此步驟只在主庫上做)

[oracle@pri ~]$sqlplus /as sysdba
查看當前是否強制日誌模式:

sys@pri> select name,log_mode,force_logging from v$database;   
NAME LOG_MODE FOR

---------         ------------ ---

PRI         NOARCHIVELOG NO

sys@pri> alter database force logging;

Database altered.

 
sys@pri> select name,log_mode,force_logging from v$database;

NAME LOG_MODE FOR

---------         ------------ ---

PRI         NOARCHIVELOG YES

2:創建密碼文件(此步驟只在主庫上做)
注意:兩端分別創建自己的密碼文件好像有問題,備庫的密碼文件需要跟主庫一致,將主庫的密碼文件直接copy到備庫,重命名後使用。

[oracle@pri ~]$ cd $ORACLE_HOME/dbs
[oracle@pri dbs]$ ls
hc_pri.dat  init.ora  initpri.ora  lkPRI  orapwpri  snapcf_pri.f  spfilepri.ora 
已經有一個密碼文件了

[oracle@pri dbs]$ orapwd file=orapwpri password=oracle force=y
這條命令可以手動生成密碼文件,force=y的意思是強制覆蓋當前已有的密碼文件(如果有可以不建立)

將主庫的密碼文件copy給備庫,並重命名
[oracle@pri dbs]$ scp orapwpri 192.168.88.112:$ORACLE_HOME/dbs/orapfsdb

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

如上,我現在的環境有三組redolog,每個日誌組的大小都是50M,所以Standby redo log組數>=(3+1)*1== 4,所以至少需要創建4組Standby redo log,大小均爲50M(thread:線程,只有在多實例數據庫纔有用的參數,例如RAC環境,單實例不考慮)

查看當前有哪些日誌組及其成員:

SQL> col member for a50

SQL> select group#,member from v$logfile;


GROUP# MEMBER

---------- --------------------------------------------------

3 /u01/app/oracle/oradata/pri/redo03.log

2 /u01/app/oracle/oradata/pri/redo02.log

1 /u01/app/oracle/oradata/pri/redo01.log

先手動創建standby log日誌組所需的目錄:(創建新目錄只是爲了便於區分,並非必須)

[oracle@pri oradata]$ cd /u01/app/oracle/oradata/
[oracle@pri oradata]$ ls

standbylog   fsda

新建4個日誌組作爲standby redolog日誌組,大小與原來的日誌組一致,由於已經存在group1-3,,所以group號只能從4開始

SQL>
alter database add standby logfile group 4 '/u01/app/oracle/oradata/standbylog/std_redo04.log' size 50m;
alter database add standby logfile group 5 '/u01/app/oracle/oradata/standbylog/std_redo05.log' size 50m;
alter database add standby logfile group 6 '/u01/app/oracle/oradata/standbylog/std_redo06.log' size 50m;
alter database add standby logfile group 7 '/u01/app/oracle/oradata/standbylog/std_redo07.log' size 50m;


查看standby 日誌組的信息:
sys@pri> 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> set pagesize 100
SQL> col member for a60
SQL> select group#,member from v$logfile order by group#;


 GROUP#     MEMBER

------------    ------------------------------------------------------------

1     /u01/app/oracle/oradata/pri/redo01.log

2     /u01/app/oracle/oradata/pri/redo02.log

3     /u01/app/oracle/oradata/pri/redo03.log

4     /u01/app/oracle/oradata/standbylog/std_redo04.log

5     /u01/app/oracle/oradata/standbylog/std_redo05.log

6     /u01/app/oracle/oradata/standbylog/std_redo06.log

7     /u01/app/oracle/oradata/standbylog/std_redo07.log

4:修改主庫的pfile參數文件 (此步驟只在主庫上做)

查看spfile的路徑:

SQL> show parameter spfile;
NAME TYPE VALUE

----------- ----------- -----------------------------------------------------------------

spfile string /u01/app/oracle/product/11.2.0/db_1/dbs/spfilepri.ora

用spfile創建一個pfile,用於修改:

sys@pri> create pfile from spfile;

修改主庫的pfile:

/u01/app/oracle/product/11.2/db/dbs/ initfsda.ora

[oracle@pri ~]$ cd $ORACLE_HOME/dbs

fsda.__db_cache_size=318767104
fsda.__java_pool_size=4194304
fsda.__large_pool_size=4194304
fsda.__oracle_base='/u01/app/oracle'#ORACLE_BASE set from environment
fsda.__pga_aggregate_target=335544320
fsda.__sga_target=503316480
fsda.__shared_io_pool_size=0
fsda.__shared_pool_size=163577856
fsda.__streams_pool_size=0
*.audit_file_dest='/u01/app/oracle/admin/fsda/adump'
*.audit_trail='db'
*.compatible=' 11.2.0.4.0 '
*.control_files='/u01/app/oracle/oradata/fsda/control01.ctl','/u01/app/oracle/flash_recovery_area/fsda/control02.ctl'
*.db_block_size=8192
*.db_domain='' "
*.db_name='fsda'
*.db_recovery_file_dest='/u01/app/oracle/flash_recovery_area'
*.db_recovery_file_dest_size=4070572032
*.diagnostic_dest='/u01/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=fsdaXDB)
*.log_archive_format='%t_%s_%r.dbf'
*.memory_target=836763648
*.open_cursors=300
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.undo_tablespace='UNDOTBS1'

**以下內容是需要新增加的:**

*.db_unique_name='pri'   DG主庫和備庫的db_name必須一致,db_unique_name不一致
*.log_archive_config='dg_config=(fsda,fsdb)'    fsda主數據庫SID,fsdb備份數據庫SID
*.log_archive_dest_1='location=/u01/app/oracle/arch valid_for=(all_logfiles,all_roles) db_unique_name=fsda' 主  數據庫的歸檔日誌路徑和SID
*.log_archive_dest_2='service=fsdb  valid_for=(online_logfiles,primary_role)  db_unique_name=fsdb'  備份數據庫的SID
*.log_archive_dest_state_1=enable
*.log_archive_dest_state_2=enable
*.log_archive_max_processes=4
*.fal_server='fsdb'    備份數據庫的SID
*.fal_client='fsda'  主數據庫的SID
*.db_file_name_convert='/u01/app/oracle/oradata/fsdb','/u01/app/oracle/oradata/fsda' 第一個目錄是備份數據庫數據文件路徑(備份服務器上有此目錄),第二個是主數據庫數據文件路徑
*.log_file_name_convert='/u01/app/oracle/oradata/fsdb','/u01/app/oracle/oradata/fsda' 第一個目錄是備份數據庫數據文件路徑(備份服務器上有此目錄),第二個是主數據庫數據文件路徑
*.standby_file_management='auto'

修改完畢,保存退出

手工創建/u01/app/oracle/arch

[oracle@pri dbs]$ mkdir –p /u01/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 /u01/app/oracle/arch

Oldest online log sequence 20

Next log sequence to archive 22

Current log sequence 22

如上,歸檔路徑已經改爲/u01/app/oracle/arch,證明對pfile的修改已生效
查看當前數據庫是否使用spfile啓動:

SQL> show parameter spfile;

NAME TYPE VALUE

----------- ----------- -----------------------------------------------------------------

spfile string /u01/app/oracle/product/11.2/db_1/dbs/spfilefsda.ora

如上,若能看到spfile的路徑,則證明數據庫是使用spfile啓動的,若沒有值,則說明是用pfile啓動的。

確認數據庫已經啓用歸檔模式和強制日誌模式:

SQL> select name,log_mode,force_logging from v$database;

NAME LOG_MODE FOR

---------     ------------------- -------

FSDA  ARCHIVELOG YES

6:修改監聽文件,添加靜態監聽 (主庫、備庫都要做)

主庫:

[oracle@pri ~]$ cd $ORACLE_HOME/network/admin
[oracle@pri admin]$ vim listener.ora     //參照如下更改
#listener.ora Network Configuration File: /u01/app/oracle/product/11.2/db/network/admin/listener.ora

#Generated by Oracle configuration tools.

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.88.111)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )

 
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = fsda)
      (ORACLE_HOME = /u01/app/oracle/product/11.2/db)
      (SID_NAME = fsda)
    )
  )

ADR_BASE_LISTENER = /u01/app/oracle

備庫:

[oracle@sla ~]$ cd $ORACLE_HOME/network/admin
[oracle@sla admin]$ vim listener.ora    //參照如下修改
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.88.112)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )

 
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = fsdb)
      (ORACLE_HOME = /u01/app/oracle/product/11.2/db)
      (SID_NAME = fsdb)
    )
  )

ADR_BASE_LISTENER = /u01/app/oracle

使新增加的監聽生效: (主庫和備庫端都要做)

[oracle@pri admin]$ lsnrctl stop
[oracle@pri admin]$ lsnrctl start

確認新增加的靜態監聽有效:

主庫:

[oracle@pri ~]$ lsnrctl status

..........................................(N行省略)

Services Summary...
Service "fsda" has 1 instance(s).
Instance "fsda", status UNKNOWN, has 1 handler(s) for this service...
Instance "fsda", status READY, has 1 handler(s) for this service...
Service "fsdaXDB" has 1 instance(s).
Instance "fsda", status READY, has 1 handler(s) for this service...
The command completed successfully

備庫:

[oracle@sla ~]$ lsnrctl status

..........................................(N行省略)

Services Summary...
Service "std" has 2 instance(s).
Instance "std", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully

如上,靜態監聽添加成功
7:編輯網絡服務名配置文件tnsnames.ora (主庫和備庫端都要做)

[oracle@pri admin]$ pwd
/u01/app/oracle/product/11.2/db/network/admin
[oracle@pri admin]$ ls
listener.ora samples tnsnames.ora
listener.ora_bak shrept.lst tnsnames.ora_bak 
[oracle@opri admin]$ vim  tnsnames.ora      //參照如下更改
#tnsnames.ora Network Configuration File: /u01/app/oracle/product/11.2/db/network/admin/tnsnames.ora
#Generated by Oracle configuration tools.

fsda =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.88.111)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = fsda)
    )
  )


fsdb =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.88.112)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = fsdb)
    )
  )  

爲了保證主庫和備庫的tnsnames.ora文件中的內容完全相同,可以把修改後的文件直接傳給備庫。

[oracle@pri admin]$ scp tnsnames.ora 192.168.88.112:$ORACLE_HOME/network/admin

tnsnames.ora 100% 925 0.9KB/s 00:00

配置完後,確保在任意一端上都能tnsping通對方:

[oracle@pri admin]$ tnsping sla

[oracle@sla admin]$ tnsping pri

8:在備庫端,修改pfile參數文件 (只在備庫端做)

首先,在主庫端把pfile拷貝給備庫端的$ORACLE_HOME/dbs目錄下,並重命名:

[oracle@pri ~]$ cd $ORACLE_HOME/dbs
[oracle@pri dbs]$ ls
hc_std.dat  init.ora  initfsda.ora  lkSTD  orapwstd  spfilestd.ora
[oracle@pri dbs]$ scp initfsda.ora 192.168.88.112:$ORACLE_HOME/dbs/initfsdb.ora

initfsda.ora 100% 1497 2.4KB/s 00:00

然後在備庫端進行修改:

[oracle@sla ~]$ cd $ORACLE_HOME/dbs
[oracle@sla dbs]$ more initfsdb.ora
fsdb.__db_cache_size=318767104
fsdb.__java_pool_size=4194304
fsdb.__large_pool_size=4194304
fsdb_oracle_base='/u01/app/oracle'#ORACLE_BASE set from environment
fsdb.__pga_aggregate_target=335544320
fsdb.__sga_target=503316480
fsdb.__shared_io_pool_size=0
fsdb.__shared_pool_size=163577856
fsdb.__streams_pool_size=0
*.audit_file_dest='/u01/app/oracle/admin/fsdb/adump'
*.audit_trail='db'
*.compatible='11.2.0.0.0'
*.control_files='/u01/app/oracle/oradata/fsdb/control01.ctl','/u01/app/oracle/oradata/fsdb/control02.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_name='pri' DG主庫和備庫的db_name必須一致,db_unique_name不一致
*.db_recovery_file_dest='/u01/app/oracle/flash_recovery_area'
*.db_recovery_file_dest_size=4070572032
*.diagnostic_dest='/u01/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=fsdbXDB)'
*.log_archive_format='%t_%s_%r.dbf'
*.memory_target=836763648
*.open_cursors=300
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.undo_tablespace='UNDOTBS1'

以下需要手工添加
*.db_unique_name='fsdb'
*.log_archive_config='dg_config=(fsda,fsdb)'
*.log_archive_dest_1='location=/u01/app/oracle/arch valid_for=(all_logfiles,all_
roles)   db_unique_name=fsdb'
*.log_archive_dest_2='service=pri valid_for=(online_logfiles,primary_role) db
_unique_name=fsda'
*.log_archive_dest_state_1=enable
*.log_archive_dest_state_2=enable
*.log_archive_max_processes=4
*.fal_server='fsda'
*.fal_client='fsdb'
*.db_file_name_convert='/u01/app/oracle/oradata/fsda','/u01/app/oracle/oradata
/fsdb'
*.log_file_name_convert='/u01/app/oracle/oradata/fsda','/u01/app/oracle/oradat
a/fsdb'
*.standby_file_management='auto'

修改完畢,保存退出

注意:整個搭建過程最需要留意的就是主庫和備庫的PFILE配置,建議修改完後仔細對照主備庫PFILE的區別

9:在備庫端手工創建所需的目錄(備庫端做,不提前創建的話恢復時會報錯!)

mkdir -pv /u01/app/oracle/admin/fsdb/adump
mkdir -pv /u01/app/oracle/diag/rdbms/fsdb/fsdb/trace
mkdir -pv /u01/app/oracle/arch
mkdir -pv /u01/app/oracle/oradata/fsdb
mkdir -pv /u01/app/oracle/oradata/standbylog
mkdir -pv /u01/app/oracle/flash_recovery_area

10:用修改後的pfile創建一個spfile,用於啓動數據庫(備庫端做)

[oracle@sla ~]$ sqlplus / as sysdba

Connected to an idle instance.
sys@sla> create spfile from pfile;

File created.

將數據庫啓動到nomount狀態:

sys@sla 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

[oracle@sla ~]$ rman target sys/oracle@fsda auxiliary sys/oracle@fsdb
 
Recovery Manager: Release 11.2.0.3.0 - Production on Thur Nov 7    22:43:13  2019
 
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
 
connected to target database: FSDA (DBID=775616459)
connected to auxiliary database: FSDA (not mounted)
 
RMAN> duplicate target database for standby from active database nofilenamecheck;
這條命令可以直接恢復數據文件,standby控制文件,standby日誌組
Starting Duplicate Db at 16-MAR-16
using target database control file instead of recovery catalog
allocated channel: ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: SID=134 device type=DISK
 
contents of Memory Script:
{
backup as copy reuse
targetfile '/u01/app/oracle/product/11.2/db/dbs/orapwfsda' auxiliary format
'/u01/app/oracle/product/11.2/db/dbs/orapwfsdb' ;
}
executing Memory Script
 
Starting backup at 16-MAR-16
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=140 device type=DISK
Finished backup at 16-MAR-16
 
contents of Memory Script:
{
backup as copy current controlfile for standby auxiliary format '/u01/app/oracle/oradata/fsdb/control01.ctl';
}
executing Memory Script
 
Starting backup at 16-MAR-16
using channel ORA_DISK_1
channel ORA_DISK_1: starting datafile copy
copying standby control file
output file name=/u01/app/oracle/product/11.2/db/dbs/snapcf_fsda.f tag=TAG20160316T110737 RECID=2 STAMP=906635257
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01
Finished backup at 16-MAR-16
 
contents of Memory Script:
{
sql clone 'alter database mount standby database';
}
executing Memory Script
 
sql statement: alter database mount standby database
 
contents of Memory Script:
{
set newname for tempfile 1 to
"/u01/app/oracle/oradata/fsdb/temp01.dbf";
switch clone tempfile all;
set newname for datafile 1 to
"/u01/app/oracle/oradata/fsdb/system01.dbf";
set newname for datafile 2 to
"/u01/app/oracle/oradata/fsdb/sysaux01.dbf";
set newname for datafile 3 to
"/u01/app/oracle/oradata/fsdb/undotbs01.dbf";
set newname for datafile 4 to
"/u01/app/oracle/oradata/fsdb/users01.dbf";
backup as copy reuse
datafile 1 auxiliary format
"/u01/app/oracle/oradata/fsdb/system01.dbf" datafile
2 auxiliary format
"/u01/app/oracle/oradata/fsdb/sysaux01.dbf" datafile
3 auxiliary format
"/u01/app/oracle/oradata/fsdb/undotbs01.dbf" datafile
4 auxiliary format
"/u01/app/oracle/oradata/fsdb/users01.dbf" ;
sql 'alter system archive log current';
}
executing Memory Script
 
executing command: SET NEWNAME
 
renamed tempfile 1 to /u01/app/oracle/oradata/fsdb/temp01.dbf in control file
 
executing command: SET NEWNAME
 
executing command: SET NEWNAME
 
executing command: SET NEWNAME
 
executing command: SET NEWNAME
 
Starting backup at 16-MAR-16
using channel ORA_DISK_1
channel ORA_DISK_1: starting datafile copy
input datafile file number=00001 name=/u01/app/oracle/oradata/fsda/system01.dbf
output file name=/u01/app/oracle/oradata/fsdb/system01.dbf tag=TAG20160316T110744
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:01:38
channel ORA_DISK_1: starting datafile copy
input datafile file number=00002 name=/u01/app/oracle/oradata/fsda/sysaux01.dbf
output file name=/u01/app/oracle/oradata/fsdb/sysaux01.dbf tag=TAG20160316T110744
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:01:09
channel ORA_DISK_1: starting datafile copy
input datafile file number=00003 name=/u01/app/oracle/oradata/fsda/undotbs01.dbf
output file name=/u01/app/oracle/oradata/fsdb/undotbs01.dbf tag=TAG20160316T110744
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:15
channel ORA_DISK_1: starting datafile copy
input datafile file number=00004 name=/u01/app/oracle/oradata/fsda/users01.dbf
output file name=/u01/app/oracle/oradata/fsdb/users01.dbf tag=TAG20160316T110744
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01
Finished backup at 16-MAR-16
 
sql statement: alter system archive log current
 
contents of Memory Script:
{
switch clone datafile all;
}
executing Memory Script
 
datafile 1 switched to datafile copy
input datafile copy RECID=2 STAMP=906635463 file name=/u01/app/oracle/oradata/fsdb/system01.dbf
datafile 2 switched to datafile copy
input datafile copy RECID=3 STAMP=906635463 file name=/u01/app/oracle/oradata/fsdb/sysaux01.dbf
datafile 3 switched to datafile copy
input datafile copy RECID=4 STAMP=906635463 file name=/u01/app/oracle/oradata/fsdb/undotbs01.dbf
datafile 4 switched to datafile copy
input datafile copy RECID=5 STAMP=906635463 file name=/u01/app/oracle/oradata/fsdb/users01.dbf
Finished Duplicate Db at 16-MAR-16
 
RMAN>
恢復數據庫結束

12:開啓備庫
登陸並查看數據庫當前狀態:

[oracle@sla ~]$ sqlplus / as sysdba
 
SQL*Plus: Release 11.2.0.3.0 Production on  Thur Nov 7    22:59:43  2019
Copyright (c) 1982, 2010, Oracle. All rights reserved.
 
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
 
sys@fsdb> startup
sys@fsdb> select status from v$instance;
 
STATUS
------------
MOUNTED        
RMAN恢復完直接就是mount狀態

13:備庫啓動日誌應用(啓用備庫前確認歸檔日誌是否都已拷貝)

sys@fsdb> alter database recover managed standby database disconnect from session;
Database altered.
停止日誌應用的命令是:alter database recover managed standby database cancel;
 
查看日誌應用情況:
sys@fsdb> set pagesize 100
sys@fsdb> select sequence#,applied from v$archived_log order by 1;
 
SEQUENCE# APPLIED
---------- ---------
9 YES
10 YES
11 YES
 
如上,如果發現有個NO的,也是正常的,說明該日誌在主庫上還沒有歸檔,可以在主庫上運行alter system switch logfile;命令來進行日誌切換,再到備庫查看日誌應用情況

14:分別查看主庫和備庫的歸檔序列號是否一致:
先在主庫手動切換一下日誌:

sys@fsda> alter system switch logfile;
 
System altered.
然後查看主庫:
sys@fsda> archive log list;
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /u01/app/oracle/arch
Oldest online log sequence 23
Next log sequence to archive 25
Current log sequence 25

備庫:
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /u01/app/oracle/arch
Oldest online log sequence 23
Next log sequence to archive 0
Current log sequence 25
 
結果完全一致,至此,DataGuard的搭建成功!

15:檢查命令

查看standby啓動的DG進程

SQL> select process,client_process,sequence#,status from v$managed_standby; 
 
PROCESS   CLIENT_P  SEQUENCE# STATUS 
--------- -------- ---------- ------------ 
ARCH      ARCH             23 CLOSING 
ARCH      ARCH              0 CONNECTED            //歸檔進程 
ARCH      ARCH             21 CLOSING 
ARCH      ARCH              0 CONNECTED 
RFS       ARCH              0 IDLE 
RFS       UNKNOWN           0 IDLE 
RFS       LGWR             25 IDLE               //歸檔傳輸進程 
RFS       UNKNOWN           0 IDLE 
MRP0      N/A              25 APPLYING_LOG      //日誌應用進程 
 
9 rows selected. 
 
查看數據庫的保護模式:
SQL> select database_role,protection_mode,protection_level,open_mode from v$database; 
 
DATABASE_ROLE    PROTECTION_MODE      PROTECTION_LEVEL     OPEN_MODE 
---------------- -------------------- -------------------- -------------------- 
PRIMARY          MAXIMUM PERFORMANCE  MAXIMUM PERFORMANCE  READ WRITE 
 
#standby 端查看,也是一樣的。 
SQL> select database_role,protection_mode,protection_level,open_mode from v$database; 
 
DATABASE_ROLE    PROTECTION_MODE      PROTECTION_LEVEL     OPEN_MODE 
---------------- -------------------- -------------------- -------------------- 
PHYSICAL STANDBY MAXIMUM PERFORMANCE  MAXIMUM PERFORMANCE  MOUNTED 
查看DG的日誌信息
SQL> select * from v$dataguard_status;

16:Open Read Only standby數據庫並且開啓實時日誌應用

SQL> shutdown immediate 
ORA-01109: database not open 
Database dismounted. 
ORACLE instance shut down. 
SQL> startup 
ORACLE instance started. 
 
Total System Global Area 1188511744 bytes 
Fixed Size                  1364228 bytes 
Variable Size             754978556 bytes 
Database Buffers          419430400 bytes 
Redo Buffers               12738560 bytes 
Database mounted. 
Database opened. 
SQL> select database_role,protection_mode,protection_level,open_mode from v$database; 
 
DATABASE_ROLE    PROTECTION_MODE      PROTECTION_LEVEL     OPEN_MODE 
---------------- -------------------- -------------------- -------------------- 
PHYSICAL STANDBY MAXIMUM PERFORMANCE  MAXIMUM PERFORMANCE  READ ONLY 
 
SQL> select process,client_process,sequence#,status from v$managed_standby; 
 
PROCESS   CLIENT_P  SEQUENCE# STATUS 
--------- -------- ---------- ------------ 
ARCH      ARCH              0 CONNECTED 
ARCH      ARCH              0 CONNECTED 
ARCH      ARCH              0 CONNECTED 
ARCH      ARCH             26 CLOSING 
RFS       ARCH              0 IDLE 
RFS       UNKNOWN           0 IDLE 
RFS       LGWR             27 IDLE 
 
7 rows selected. 
 
SQL> recover managed standby database using current logfile disconnect from session; 
Media recovery complete. 
 
SQL> select process,client_process,sequence#,status from v$managed_standby; 
 
PROCESS   CLIENT_P  SEQUENCE# STATUS 
--------- -------- ---------- ------------ 
ARCH      ARCH              0 CONNECTED 
ARCH      ARCH              0 CONNECTED 
ARCH      ARCH              0 CONNECTED 
ARCH      ARCH             26 CLOSING 
RFS       ARCH              0 IDLE 
RFS       UNKNOWN           0 IDLE 
RFS       LGWR             27 IDLE 
MRP0      N/A              27 APPLYING_LOG 
 
8 rows selected. 
 
SQL> select process,client_process,sequence#,status from v$managed_standby;
 
PROCESS   CLIENT_P  SEQUENCE# STATUS
--------- -------- ---------- ------------
ARCH   ARCH         20 CLOSING
ARCH   ARCH         21 CLOSING
ARCH   ARCH          0 CONNECTED
ARCH   ARCH         22 CLOSING
MRP0   N/A          23 WAIT_FOR_LOG
RFS   ARCH          0 IDLE
RFS   UNKNOWN       0 IDLE
RFS   UNKNOWN       0 IDLE
RFS   LGWR         23 IDLE
 
9 rows selected.
DataGuard的三種數據保護模式:

(1)MAXIMIZE PROTECTION(最大保護模式):

最大數據保護與無數據分歧,LGWR將同時傳送到備用節點,在主節點事務確認之前,備用節點也必須完全收到日誌數據。如果網絡不好,引起LGWR不能傳送數據,將引起嚴重的性能問題,導致主節點DOWN機。

 

(2)MAXIMIZE AVAILABILITY(最大可用模式):

無數據丟失模式,允許數據分歧,允許異步傳送。正常情況下運行在最大保護模式,在主節點與備用節點的網絡斷開或連接不正常時,自動切換到最大性能模式,主節點的操作還是可以繼續的。在網絡不好的情況下有較大的性能影響。

 

(3)MAXIMIZE PERFORMANCE(最大性能模式):

這種模式應當可以說是從8i繼承過來的備用服務器模式,異步傳送,無數據同步檢查,可能丟失數據,但是能獲得主節點的最大性能。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章