RHEL6 Oracle11G Dataguard部署
Oracle11g DaraGuard部署
一、DataGuard簡介
Oracle DataGuard是Oracle自帶的數據同步功能,基本原理是將日誌文件從原數據庫傳輸到目標數據庫,然後在目標數據庫上應用這些日誌文件,從而使目標數據庫與源數據庫保持同步,是一種數據庫級別的高可用性方案。
DataGuard可以提供Oracle數據庫的冗災、數據保護、故障恢復等,實現數據庫快速切換與災難性恢復。在生產數據庫的保證"事務一致性"時,使用生產庫的物理全備份創建備庫,備庫會通過生產庫傳輸過來的歸檔日誌或重做條目自動維護備用數據庫。
DataGuard數據同步技術有以下優勢:
1) Oracle數據庫自身內置的功能,與每個Oracle新版本的新特性都完全兼容,且不需要另外付費。
2) 配置管理較簡單,不需要熟悉其他第三方的軟件產品。
3) 物理Standby數據庫支持任何類型的數據對象和數據類型;
4) 邏輯Standby數據庫處於打開狀態,可以在保持數據同步的同時執行查詢等操作。
5) 在最大保護模式下,可確保數據的零丟失。
1.1 架構
Oracle DataGuard由一個primary數據庫(生產數據庫)及一個或多個standby數據庫(最多9個)組成。組成Data Guard的數據庫通過Oracle Net連接,並且有可以分布於不同地域。只要各庫之間可以相互通信,它們的物理位置並沒有什麽限制,不受操作系統的限制。
1.1.1.Primary 數據庫
DataGuard包含一個primary數據庫即被大部分應用訪問的生產數據庫,該庫既可以是 單實例數據庫,也可以是RAC。
1.1.2.Standby 數據庫
Standby數據庫是primary數據庫的復制(事務上一致)。在同一個Data Guard中可以最多創建9個standby數據庫。一旦創建完成,Data Guard通過應用primary數據庫的redo自動維護每一個standby數據庫。Standby數據庫同樣即可以是單實例數據庫,也可以是RAC結構。
1.2 Standby數據庫類型
Standby數據庫通常分兩類:邏輯standby和物理standby。 邏輯standby
邏輯standby是通過接收primary數據庫的redo log並轉換成sql語句,然後在standby數據庫上執行SQL語句實現同步。 物理standby
物理standby是通過接收並應用primary數據庫的redo log以介質恢復的方式實現同步,不僅文件的物理結構相同,連塊在磁盤上的存儲位置都是一模一樣的。
1.3 服務
重做傳輸服務(Redo Transport Services)
控制redo數據的傳輸到一個或多個歸檔目的地。 日誌應用服務(Log Apply Services)
應用redo數據到standby數據庫,以保持與primary數據庫的事務一致。redo數據即可以從standby數據庫的歸檔文件讀取,也可直接應用備用日誌文件讀取。 角色轉換服務(Role Transitions)
DataGuard中有兩種角色:primary和standby。角色轉換就是讓數據庫在這兩個角色中切換, 切換分兩種:switchover和failover
1)switchover:轉換primary數據庫與standby數據庫。switchover可以確保不會丟失數據。
2)failover:當primary數據庫出現故障並且不能被及時恢復時,會調用failover將一個standby數據庫轉換為新的primary數據庫。在最大保護模式或最高可用性模式下,failover可以保證不會丟失數據。
1.4保護模式
1.4.1 最大保護
這種模式是默認的數據保護模式,在不影響源數據庫性能的條件下提供盡可能高的數
據保護等級。在該種模式下,一旦日誌數據寫到源數據庫的聯機日誌文件,事務即可提交,不必等待日誌寫到目標數據庫,如果網絡帶寬充足,該種模式可提供類似於最大可用模式的數據保護等級。
1.4.2 最大可用性
這種模式和"最大保護"基本上差不多。正常情況下,主備庫之間是同步的。
當網絡或者備庫出現問題時,不會影響到主庫的當機,主庫會自動轉換庫"最大性能"模式,等待備庫可用時,將歸檔傳輸到備庫做恢復。
1.4.3最大性能
這種模式保證主庫性能最大化,主備庫之間數據是異步傳輸的。即,主備日誌歸檔以
後才會傳輸到備用庫,在備庫上使用歸檔日誌文件做恢復操作。
1.5 安裝條件
運行DataGuard需要具備以下幾個條件:
1、 在主庫和從庫的所有機器上必須安裝同一個版本的Oracle企業版。
2、 主庫必須運行在歸檔模式下。
3、 主庫和從庫的操作系統必須一樣(允許版本不同),從庫可以使用與主庫不同的目錄結構。
4、 主從庫硬件系統的體系結構必須相同。比如:主庫運行在64位的Sun Sparc系統上,如果從庫是32位的Linux Intel系統就不允許。主從庫硬件的配置可以不同,比如:CPU數量、內存大小、存儲配置等。
一、環境說明
系統:Red Hat Enterprise Linux Server release 6.3
IP地址 主機名
192.168.24.93 orcl
192.168.24.94 orcldg
預裝oracle11gR2 11.2.0.1.0
2臺主機名在/etc/hosts都需要配置
二、主庫配置
2.1 開啟歸檔並強制日誌模式
開啟歸檔
1) shutdown immediate;
2) startup mount;
3) alter database archivelog;
4) ater database open;
5) archive log list;
強制日誌模式
alter database force logging;
select name,log_mode,force_logging from v$database;
2.2 創建standby redolog日誌組
查看當前線程與日誌組的對應關系及日誌組的大小:
select thread#,group#,bytes/1024/1024 from v$log;
這裏有三組redo log,所以至少需要創建4組Standby redo log,大小均為50M:
alter database add standby logfile group 4(‘/u01/app/oracle/oradata/orcl/standbyredo01.log‘) size 50m;
alter database add standby logfile group 5(‘/u01/app/oracle/oradata/orcl/standbyredo02.log‘) size 50m;
alter database add standby logfile group 6(‘/u01/app/oracle/oradata/orcl/standbyredo03.log‘) size 50m;
alter database add standby logfile group 7(‘/u01/app/oracle/oradata/orcl/standbyredo04.log‘) size 50m;
查看standby 日誌組的信息:
select group#,sequence#,status, bytes/1024/1024 from v$standby_log;
2.3 創建主庫密碼文件
su - oracle
orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=oracle force=y
2.4 配置spfile文件
2.4.1 查看spfile的路徑:
show parameter spfile;
2.4.2 用spfile創建一個pfile,用於修改:
create pfile=‘/tmp/initorcl.ora‘ from spfile;
2.4.3 修改pfile文件:
vim /tmp/initorcl.ora
orcl.__db_cache_size=637534208
orcl.__java_pool_size=16777216
orcl.__large_pool_size=33554432
orcl.__oracle_base=‘/u01/app/oracle‘
orcl.__pga_aggregate_target=671088640
orcl.__sga_target=989855744
orcl.__shared_io_pool_size=0
orcl.__shared_pool_size=268435456
orcl.__streams_pool_size=16777216
*.audit_file_dest=‘/u01/app/oracle/admin/orcl/adump‘
*.audit_trail=‘db‘
*.compatible=‘11.2.0.1.0‘
*.control_files=‘/u01/app/oracle/oradata/orcl/control01.ctl‘,‘/u01/app/oracle/flash_recovery_area/orcl/control02.ctl‘
*.db_block_size=8192
*.db_domain=‘‘
*.db_name=‘orcl‘
*.db_recovery_file_dest=‘/u01/app/oracle/flash_recovery_area‘
*.db_recovery_file_dest_size=4385144832
*.diagnostic_dest=‘/u01/app/oracle‘
*.dispatchers=‘(PROTOCOL=TCP) (SERVICE=orclXDB)‘
*.memory_target=1653604352
*.open_cursors=300
*.processes=150
*.remote_login_passwordfile=‘EXCLUSIVE‘
*.undo_tablespace=‘UNDOTBS1‘
*.db_unique_name=‘orclpr‘
*.fal_client=‘orclpr‘
*.fal_server=‘orcldg‘
*.standby_file_management=‘AUTO‘
*.log_archive_config=‘DG_CONFIG=(orclpr,orcldg)‘
*.log_archive_dest_1=‘location=/u01/app/oracle/oradata/orcl/archivelog‘
*.log_archive_dest_2=‘SERVICE=orcldg LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcldg‘
*.log_archive_dest_state_1=‘ENABLE‘
*.log_archive_dest_state_2=‘ENABLE‘
3.4.4 復制pfile文件到spfile:
shutdown immediate;
create spfile from pfile=‘/tmp/initorcl.ora‘;
startup;
2.5 修改監聽文件,添加靜態監聽
vi $ORACLE_HOME/network/admin/listener.ora
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.24.93)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = orcl)
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1)
(SID_NAME = orcl)
)
)
ADR_BASE_LISTENER = /u01/app/oracle
SAVE_CONFIG_ON_STOP_LISTENER = ON
重啟監聽服務:
lsnrctl stop
lsnrctl start
2.6 編輯網絡服務名配置文件tnsnames.ora
vi $ORACLE_HOME/network/admin/tnsnames.ora,添加內容
orcldg =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.24.94)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
orclpr =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.24.93)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
tnsping測試:
tnsping orcldg
三、備庫配置:
3.1 將主庫中的密碼文件、pfile文件、監聽文件復制到備庫中
主庫使用Oracle用戶操作
cd /u01/app/oracle/product/11.2.0/dbhome_1/dbs
scp orapworcl 192.168.24.94:/u01/app/oracle/product/11.2.0/dbhome_1/dbs/
scp /tmp/initorcl.ora 192.168.24.94:/tmp/
cd /u01/app/oracle/product/11.2.0/dbhome_1/network/admin
scp listener.ora 192.168.24.94:/u01/app/oracle/product/11.2.0/dbhome_1/network/admin/
scp tnsnames.ora 192.168.24.94:/u01/app/oracle/product/11.2.0/dbhome_1/network/admin/
3.2 手工創建所需的目錄
su - oracle
mkdir -p /u01/app/oracle/admin/orcl/adump
mkdir -p /u01/app/oracle/admin/orcl/dbdump
mkdir -p /u01/app/oracle/admin/orcl/pfile
mkdir -p /u01/app/oracle/oradata/orcl
mkdir -p /u01/app/oracle/flash_recovery_area/orcl
mkdir -p /u01/app/oracle/oradata/orcl/archivelog
3.3 配置spfile文件
從庫修改pfile文件:
vim /tmp/initorcl.ora
orcl.__db_cache_size=637534208
orcl.__java_pool_size=16777216
orcl.__large_pool_size=33554432
orcl.__oracle_base=‘/u01/app/oracle‘
orcl.__pga_aggregate_target=671088640
orcl.__sga_target=989855744
orcl.__shared_io_pool_size=0
orcl.__shared_pool_size=268435456
orcl.__streams_pool_size=16777216
*.audit_file_dest=‘/u01/app/oracle/admin/orcl/adump‘
*.audit_trail=‘db‘
*.compatible=‘11.2.0.1.0‘
*.control_files=‘/u01/app/oracle/oradata/orcl/control01.ctl‘,‘/u01/app/oracle/flash_recovery_area/orcl/control02.ctl‘
*.db_block_size=8192
*.db_domain=‘‘
*.db_name=‘orcl‘
*.db_recovery_file_dest=‘/u01/app/oracle/flash_recovery_area‘
*.db_recovery_file_dest_size=4385144832
*.diagnostic_dest=‘/u01/app/oracle‘
*.dispatchers=‘(PROTOCOL=TCP) (SERVICE=orclXDB)‘
*.memory_target=1653604352
*.open_cursors=300
*.processes=150
*.remote_login_passwordfile=‘EXCLUSIVE‘
*.undo_tablespace=‘UNDOTBS1‘
*.db_unique_name=‘orcldg‘
*.fal_client=‘orcldg‘
*.fal_server=‘orclpr‘
*.standby_file_management=‘AUTO‘
*.log_archive_config=‘DG_CONFIG=(orclpr,orcldg)‘
*.log_archive_dest_1=‘location=/u01/app/oracle/oradata/orcl/archivelog‘
*.log_archive_dest_2=‘SERVICE=orclpr LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orclpr‘
*.log_archive_dest_state_1=‘ENABLE‘
*.log_archive_dest_state_2=‘ENABLE‘
3.3 復制pfile文件到spfile
shutdown immediate;
create spfile from pfile=‘/tmp/initorcl.ora‘;
startup nomount;
3.4 修改監聽文件
vi $ORACLE_HOME/network/admin/listener.ora
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = orcl)
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1)
(SID_NAME = orcl)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.24.94)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
ADR_BASE_LISTENER = /u01/app/oracle
重啟監聽服務:
lsnrctl stop
lsnrctl start
3.5 tnsping測試
tnsping orcldg
tnsping orclpr
3.7 啟動備庫到nomount
shutdown immediate;
startup nomount;
3.8 利用RMAN在備庫上恢復主庫
alter user sys identified by password,主從庫修改sys密碼
rman target sys/[email protected] auxiliary sys/[email protected]
duplicate target database for standby from active database nofilenamecheck;
過程中如報錯RMAN-05501: aborting duplication of target database
說明使用了catalog,但是在連接的時候沒有指定catalog,需要用下面的連接方式:
rman target sys/[email protected] auxiliary sys/[email protected] nocatalog
3.9 登陸備庫並查看數據庫當前狀態
select status from v$instance;
RMAN恢復完直接就是mount狀態。
3.10 備庫啟動日誌應用
alter database recover managed standby database disconnect from session;
select sequence#,applied from v$archived_log order by 1;
3.11 分別查看主庫和備庫的歸檔序列號是否一致
先在主庫手動切換一下日誌再查看:
alter system switch logfile;
archive log list;
再在備庫上查看:
參數一致
四、DataGuard日常維護
4.1 正確打開主庫和備庫
主庫
SQL> STARTUP MOUNT;
SQL> ALTER DATABASE OPEN;
備庫 :
SQL> STARTUP MOUNT;
SQL>ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
4.2 正確關閉順序
備庫 :
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
SQL>SHUTDOWN IMMEDIATE;
主庫
SQL>SHUTDOWN IMMEDIATE;
4.3 備庫 Read-Only Read-Only模式打開
當前主庫正常 OPEN 狀態 、 備庫處於日誌傳送狀態 .
在備庫停止日誌傳送
SQL> recover managed standby database cancel;
備庫 Read-only 模式打開
SQL> alter database open read only;
備庫回到日誌傳送模式
SQL> recover managed standby database disconnect from session;
手工令備庫應用歸檔日誌
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
五、測試DataGuard
5.1 先開啟主備數據庫的監聽,在主庫和備庫分別登錄,如果能登錄說明監聽沒問題。
5.2 在主庫上 startup啟動數據庫到open
5.3 在備庫上 startup mount
啟動redo 應用
SQL> alter database recover managed standby database disconnect from session;
查看同步情況,分別主從庫上查詢
SQL> show parameter instance_name;
SQL> select sequence#, first_time, next_time, applied, fal from v$archived_log order by sequence#;
5.4 數據驗證
最後,我們在主庫上創建一個表並插入一些數據,然後模擬日誌切換,最後在備庫上驗證數據的傳輸情況。
主庫上建測試表
主庫上模擬日誌切換:alter system archive log current;
以只讀模式打開備庫,驗證數據 alter database recover managed standby database cancel;
ORA-16136: Managed Standby Recovery not active
報錯運行 recover managed standby database disconnect from session
alter database open read only;
驗證主庫數據是否過來
六、主備庫切換
6.1 將主庫切換到備用狀態
查看主庫角色
select name,open_mode,protection_mode,database_role from v$database;
alter database commit to switchover to physical standby;
shutdown immediate
startup nomount;
alter database mount standby database;
select name,open_mode,protection_mode,database_role from v$database;
alter database recover managed standby database disconnect from session;
6.2 將備庫轉換成主庫模式
alter database commit to switchover to primary;
報錯運行 ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
shutdown immediate
startup mount
alter database commit to switchover to primary;
select name,open_mode,protection_mode,database_role from v$database;
RHEL6 Oracle11G Dataguard部署