oracle 11g dg搭建筆記
? 說明
線上有套oracle庫透過物化檢視定時重新整理到另外庫來實現主備的,其經常出現物化檢視重新整理Job異常,導致資料未同步;並且此種方式,假如真的主庫掛了,那麼將備庫的物化檢視轉化為表的過程也會很痛苦,於是,最終決定放棄此種方式來做偽線上備份。
Oracle自身有線上standby的解決方案- DataGuard
它是在主節點與備用節點間透過日誌同步來保證資料的同步,可以實現資料庫快速切換與災難性恢復。
綜上,選用成熟的DataGuard來做線上Standby肯定優於物化檢視的方法
關於DataGurad的詳細知識,請參考oracle官方文件等
l 實施過程
l 環境規劃
主機地址 |
10.10.10.65 |
10.10.10.200 |
角色 |
primary |
standby |
OS版本 |
RHEL 6.5 |
RHEL 6.5 |
DB版本 |
Oracle 11.2.0.1.0 - 64bit 企業版 |
|
instance_name |
orcl |
orcl |
db_name |
orcl |
orcl |
db_unique_name |
orcl |
orcl_stby |
1準備工作
1.1清除遺留髒資料
#primary
#刪除舊的ygis和ygdw使用者,同時刪除其下所有物件
Drop user username cascade;
#刪除之前建立的物化檢視log
select ' drop materialized view log on '||LOG_OWNER||'.'||master||';' from dba_mview_logs;
1.2 standby安裝oracle soft
略。。。。。。
1.3關閉防火牆和selinux
#primary and standby
~]# iptables -F
~]# iptables -t nat -F
~]# /etc/init.d/iptables stop
~]# chkconfig iptables off
~]# chkconfig --list iptables
iptables 0:off 1:off 2:off 3:off 4:off 5:off 6:off
~]# grep SELINUX= /etc/selinux/config |grep ^[^#]
SELINUX=disabled
#若不為disabled,vi /etc/selinux/config 修改為disabled
2.配置dataguard
2.1.Primary資料庫
2.1.1確認是否支援dataguard
SQL> select * from v$option where parameter = 'Managed Standby';
PARAMETER VALUE
---------------------------------------------------------------- ----------------------------------------------------------------
Managed Standby TRUE
2.1.2開啟歸檔
#歸檔位置
~]$ mkdir -p /data/oracle/arch
shutdown immediate;
startup mount;
alter database archivelog;
alter database open;
2.1.3啟用force logging
alter database force logging;
2.1.4修改DG相關引數的值
ALTER SYSTEM SET DB_UNIQUE_NAME='orcl' SCOPE=SPFILE;
ALTER SYSTEM SET LOG_ARCHIVE_CONFIG='DG_CONFIG=(orcl,orcl_stby)';
ALTER SYSTEM SET LOG_ARCHIVE_DEST_1='LOCATION=/data/oracle/arch VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=orcl';
ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=orcl_stby OPTIONAL LGWR SYNC AFFIRM COMPRESSION=ENABLE VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcl_stby';
ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_1='enable';
ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2='enable';
ALTER SYSTEM SET LOG_ARCHIVE_FORMAT='%t_%s_%r.arc' SCOPE=SPFILE;
ALTER SYSTEM SET REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE SCOPE=SPFILE;
ALTER SYSTEM SET FAL_SERVER='orcl_stby';
ALTER SYSTEM SET FAL_CLIENT='orcl';
ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=AUTO;
ALTER SYSTEM SET DB_FILE_NAME_CONVERT='/data/oracle/oradata/orcl_stby','/data/oracle/oradata/orcl' SCOPE=SPFILE;
ALTER SYSTEM SET LOG_FILE_NAME_CONVERT='/data/oracle/oradata/orcl_stby','/data/oracle/app/oradata/orcl' SCOPE=SPFILE;
#請記住,有些引數不能修改,所以資料庫將需要重新啟動才能生效。
標識紅顏色的是 primary資料庫對應資訊,綠顏色的是standby資料庫對應資訊,需要格外注意,不要搞混了,另外,標識紫色的引數是11g新加的,即支援壓縮日誌傳輸,使得傳輸效率更高效,更小網路負載。
SQL> shutdown immediate
SQL> startup
2.1.5檢查引數
SQL> select log_mode,FORCE_LOGGING from v$database;
LOG_MODE FOR
------------ ---
ARCHIVELOG YES
SQL>show parameter db_name
SQL>show parameter db_unique_name
SQL> show parameter LOG_ARCHIVE_DEST_
SQL> show parameter DB_FILE_NAME_CONVERT
SQL> show parameter LOG_FILE_NAME_CONVERT
2.1.6生成standby對應的pfile
#在primary生成pfile
create pfile='/tmp/orcl_stby.ora' from spfile;
#修改下面dg相關引數為standby的即可
*.db_unique_name='orcl_stby'
*.fal_client='orcl_stby'
*.fal_server='orcl'
*.log_archive_dest_1='LOCATION=/data/oracle/arch VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=orcl_stby'
*.LOG_ARCHIVE_DEST_2='SERVICE=orcl_stby OPTIONAL LGWR SYNC AFFIRM COMPRESSION=ENABLE VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcl_stby';
ALTER SYSTEM SET DB_FILE_NAME_CONVERT='/data/oracle/oradata/orcl','/data/oracle/oradata/orcl_stby' SCOPE=SPFILE;
ALTER SYSTEM SET DB_FILE_NAME_CONVERT='/data/oracle/app/oradata/orcl','/data/oracle/oradata/orcl_stby' SCOPE=SPFILE;
ALTER SYSTEM SET LOG_FILE_NAME_CONVERT='/data/oracle/app/oradata/orcl','/data/oracle/oradata/orcl_stby' SCOPE=SPFILE;
#注意:如果ORACLE_BASE與primary的不一致,相關dump目錄等其他位置需要替換為standby實際的
2.1.7密碼檔案
建立密碼檔案,以下是linux/unix系統建立命令:
orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=oracle entries=5 force=y
注意:
1.如果原來已經建立過密碼檔案,需要加force=y引數,強制覆蓋;
2.Standby資料庫密碼需要與此檔案密碼設定完全一致,否則日誌傳輸會有問題
2.1.8配置listener.ora
#編輯監聽配置檔案
~]$ cat /data/oracle/app/product/11.2.0/dbhome_1/network/admin/listener.ora
# listener.ora Network Configuration File: /data/oracle/app/product/11.2.0/dbhome_1/network/admin/listener.ora
# Generated by Oracle configuration tools.
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.10.65)(PORT = 1521))
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = orcl)
(ORACLE_HOME = /data/oracle/app/product/11.2.0/dbhome_1)
(SID_NAME = orcl)
)
)
ADR_BASE_LISTENER = /data/oracle/app
注:標識為黃顏色的地方需要根據實際情況修改。
#修改完成之後,監聽需要重啟,方法如下
lsnrctl stop
lsnrctl start
lsnrctl status
Instance "orcl", status UNKNOWN, has 1 handler(s) for this service...
有一個unknown 的表示此處為靜態監聽,另一個 READY 的為動態監聽,在監聽重啟1分鐘以後,會自動註冊。
2.1.9配置tns
~]$ cat /data/oracle/app/product/11.2.0/dbhome_1/network/admin/tnsnames.ora
# tnsnames.ora Network Configuration File: /data/oracle/app/product/11.2.0/dbhome_1/network/admin /tnsnames.ora
# Generated by Oracle configuration tools.
ORCL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.10.65)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
ORCL_STBY =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.10.200)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
注:標識為綠的地方需要根據實際情況修改。
2.2.Standby資料庫
2.2.1密碼檔案、監聽、tns、pfile檔案配置
複製primary上的生成的standby pfile檔案密碼檔案、listener.ora、tnsname.ora相關配置檔案到standby相應的目錄
3部署standby
建立standby有不止一個方法,以下介紹最簡單的方法,即直接用duplicate命令;
在使用該命令時,先說下使用該命令的注意事項:
1) 使用rman連target資料庫時,不能使用作業系統認證,只能使用密碼方式連線;
2) 源資料庫必須在mount或者open狀態,如果在open狀態,必須開啟歸檔,如果資料庫不是open狀態的,則資料庫必須已經處於一致性;
3) 使用rman連線auxiliary資料庫時,即使standby與primary在同一臺伺服器上,也要使用tns去連線;
4) 如果建立的不是standby資料庫,那麼密碼檔案不會自動複製;
5) 必須要使用具有sysdba許可權的使用者連線;
6) 在使用active database duplication時,不能使用until;
在清楚了以上限制條件之後,就可以開始操作了。
3.1 standby到nomount狀態
startup nomount pfile=’/tmp/orcl_stby.ora'
3.2 rman複製資料
3.2.1使用rman DUPLICATE FROM ACTIVE DATABASE建立dg
rman TARGET sys/oracle@orcl AUXILIARY sys/oracle@orcl_stby
DUPLICATE TARGET DATABASE FOR STANDBY FROM ACTIVE DATABASE DORECOVER NOFILENAMECHECK;
個別條款的簡要說明如下所示。
? FOR STANDBY :這告訴DUPLICATE命令是用於待機,所以不會強制一個DBID改變。
? FROM ACTIVE DATABASE的DUPLICATE將被建立,直接從源資料檔案,無需額外的備份步驟。
? DORECOVER :該DUPLICATE將包括恢復步驟,使待機可達目前的時間點。(此選項不需要額外備份)
? NOFILENAMECHECK :目標檔案的位置不檢查(主備dbfile logfile路徑一致不需要此選項)。
一旦命令完成後,我們就可以啟動應用程式。
from active database也是11g之後才推出的新功能,該功能支援源資料庫在active的環境下,直接執行standby資料庫的建立,而不會遇到以前10g的時候還需要先備份,然後再傳輸、恢復這種比較費時的缺陷,效率上有了很大的提升。
3.2.2使用rman DUPLICATE方式建立dg
#備份主庫
rman TARGET
run{
configure channel device type disk format '/home/oracle/rmanbk/%d_%I_%s_%p.bkp';
backup as compressed backupset database include current controlfile for standby plus archivelog;
}
複製備份集到備庫,目錄路徑要一致
#使用rman恢復資料庫
rman TARGET sys/oracle@orcl AUXILIARY sys/oracle@orcl_stby
DUPLICATE TARGET DATABASE FOR STANDBY DORECOVER NOFILENAMECHECK;
3.3.3使用rman恢復方式建立dg
#主庫
rman target /
backup full format=’/tmp/FULL_%U’ database plus archivelog;
#sqlplus中,生成standby controlfile
ALTER DATABASE CREATE STANDBY CONTROLFILE AS ‘/tmp/control01.ctl’;
#備庫:複製主庫上的備份和STANDBY CONTROLFILE到備庫相應位置
a.使用修改的引數檔案啟動standby至nomount狀態
b.開啟資料庫至mount狀態
alter database mount standby database;
c.使用rman開始還原資料庫
restore
database;
以上完成之後,standby的建立也就基本完成了,但還需要一些收尾工作,但也是至關重要的
3.3 standby新增standby redo log
standby redo log 的新增原則:
1) 要與online redo log大小一致;
2) 要比online redo log至少多一組,如果primary資料庫時rac,則online redo log要將rac的thread加起來
ALTER DATABASE ADD STANDBY LOGFILE ('/data/oracle/oradata/orcl_stby/standby_redo01.log') SIZE 512M;
ALTER DATABASE ADD STANDBY LOGFILE ('/data/oracle/oradata/orcl_stby/standby_redo02.log') SIZE 512M;
ALTER DATABASE ADD STANDBY LOGFILE ('/data/oracle/oradata/orcl_stby/standby_redo03.log') SIZE 512M;
ALTER DATABASE ADD STANDBY LOGFILE ('/data/oracle/oradata/orcl_stby/standby_redo04.log') SIZE 512M;
3.4 primary新增standby redo log
執行命令與上一致,注意logfile檔案位置
ALTER DATABASE ADD STANDBY LOGFILE ('/data/oracle/app/oradata/orcl/standby_redo01.log') SIZE 512M;
ALTER DATABASE ADD STANDBY LOGFILE ('/data/oracle/app/oradata/orcl/standby_redo02.log') SIZE 512M;
ALTER DATABASE ADD STANDBY LOGFILE ('/data/oracle/app/oradata/orcl/standby_redo03.log') SIZE 512M;
ALTER DATABASE ADD STANDBY LOGFILE ('/data/oracle/app/oradata/orcl/standby_redo04.log') SIZE 512M;
3.5 standby建立spfile
SQL> create spfile from pfile=’/tmp/orcl_stby.ora’;
使用spfile重啟資料庫至mount狀態
shutdown immediate
startup mount
3.6 開啟日誌應用
–11g支援redo apply狀態下open
alter database open;
–開啟歸檔日誌應用
alter database recover managed
standby database disconnect from session;
–開啟實時應用
alter database recover managed standby database using current logfile
disconnect from session;
3.7 primary修改資料保護模式
3.7.1檢視當前保護模式
SQL> select OPEN_MODE, DATABASE_ROLE,protection_mode,protection_level from v$database;
PROTECTION_MODE PROTECTION_LEVEL
-------------------- --------------------
MAXIMUM PERFORMANCE MAXIMUM PERFORMANCE
預設是最大效能保護模式;
3.7.2 修改初始化引數
由於開始配置引數時,就考慮到要修改資料保護模式,所以之前已經將引數修改了,如下:
SQL> show parameter log_archive_dest_2
3.7.3 修改保護模式
命令如下:
SQL>alter database set standby database to maximize availability;
3.7.4 重啟資料庫
shutdown immediate
startup
3.7.5 檢視當前保護模式
SQL> show parameter db_unique_name
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_unique_name string orcl
SQL>
SQL> select protection_mode,protection_level from v$database;
PROTECTION_MODE PROTECTION_LEVEL
-------------------- --------------------
MAXIMUM AVAILABILITY MAXIMUM AVAILABILITY
3.8 standby檢視當前保護模式
SQL> show parameter db_unique_name
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_unique_name string orcl_stby
SQL> select protection_mode,protection_level from v$database;
PROTECTION_MODE PROTECTION_LEVEL
-------------------- --------------------
MAXIMUM AVAILABILITY MAXIMUM AVAILABILITY
3.9 開啟read only
由於11g的adg特性,使得standby在recover期間也可以提供對外查詢服務。但如何開啟也需要遵循一定的原則:
1) 在mount狀態下,執行 alter database open;
2) 然後開啟日誌應用,alter database recover managed standby database disconnect from session;
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
注意:以上執行順序絕對不能顛倒。
如果不打算開啟read only服務了怎麼操作,步驟如下:
【standby】
1) alter database recover managed standby database cancel;
2) shutdown immediate
3) startup mount
4) alter database recover managed standby database disconnect from session;
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
至此,此dataguard環境已經全部配置完成。
3.10在主庫中檢視第二存檔終點是否有異常
col dest_name for a30
col error for a40
select dest_name,status,error,target,process from v$archive_dest where substr(dest_name,-1) in (1,2);
4資料同步驗證
省略
5備份部署
在primary節點上部署
#每天23:15分 全備資料庫
]$ crontab -l
15 23 * * * /data/sh/rman_fullbackup.sh
#備份指令碼
]$ cat /data/sh/rman_fullbackup.sh
#!/bin/bash
TIME=`date +%Y%m%d_%H%M`
days=`date +%F`
rm -rf /data/backup/$days
mkdir /data/backup/$days
chown -R oracle:oinstall /data/backup/$days
chmod -R 775 /data/backup/$days
baklog=/data/backup/$days/rmanbk_$days.log
synclog=/data/backup/$days/sync_$days.log
. /home/oracle/.bash_profile
export ORACLE_SID=orcl
echo "==================start rman bakcup at $TIME==================" >>$baklog
$ORACLE_HOME/bin/rman target / <<EOF >>$baklog 2>&1
run
{
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 3 DAYS;
CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON ALL STANDBY;
allocate channel c1 type disk;
allocate channel c2 type disk;
allocate channel c3 type disk;
sql 'alter system archive log current';
backup as compressed backupset database format '/data/backup/$days/%d_%I_%s_%p_%T.bkp' include current controlfile;
sql 'alter system archive log current';
backup spfile format '/data/backup/$days/spfile_%d_%I_%s_%p_%T.bkp';
backup as compressed backupset archivelog all format '/data/backup/$days/archivelog_%d_%I_%s_%p_%T.bkp' delete input;
backup current controlfile format '/data/backup/$days/control_%d_%I_%s_%p_%T.bkp';
release channel c1;
release channel c2;
release channel c3;
}
delete noprompt obsolete;
crosscheck backup;
report obsolete;
delete noprompt expired backup;
EOF
find /data/backup/ -name "20*" -type d -mtime 10|xargs rm -rf
TIME=`date +%Y%m%d_%H%M`
echo "==================end bakcup at $TIME==================" >>$baklog
#######################################sync######################################################
echo "===================Start backup to storage137 `date '+%Y%m%d_%H%M'`===================" >>$synclog
nohup rsync -avzP /data/backup/ dbbackup@10.10.10.xxx::dB_bak/ >>$synclog 2>&1 &
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/27000195/viewspace-1817320/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle 11g單主搭建物理DGOracle
- 11G RAC+DG搭建
- Oracle 11g dg broker自動failoverOracleAI
- Oracle RAC+DG搭建Oracle
- Oracle 11g DG新特性--Automatic block repairOracleBloCAI
- oracle 11g dg broker開啟和配置Oracle
- Oracle 11g dg switchover切換操作流程Oracle
- 11g dg 備庫搭建多種方式
- 【DG】Oracle 19c使用dbca來搭建物理DGOracle
- 【DG】DataGuard健康檢查 for 11g
- 【DG】Oracle 19c使用dbca來搭建物理DG--主rac備racOracle
- oracle 11g dg broker 開啟fast-start failover自動故障切換OracleASTAI
- Oracle 11g RAC DG備庫gv$dataguard_stats apply lag值較大OracleAPP
- oracle 19c dg搭建duplicate過程中報錯Oracle
- Oracle:DG 的 switchoverOracle
- oracle dg報錯Oracle
- oracle 11g自動記憶體管理Oracle記憶體
- DG搭建配置方案
- ORACLE RAC TO RAC DG搭建過程中可能遇到的問題Oracle
- oracle筆記Oracle筆記
- Oracle DG 日常點檢Oracle
- Oracle DG管理Broker配置Oracle
- 物理DG、邏輯DG和快照DG的搭建(視訊講解)
- redhat7 搭建oracle 11g RAC 問題與處理RedhatOracle
- 【DG】Oracle之級聯DG--(cascade dg) --(一主一備一級聯)Oracle
- ORACLE DG之備庫角色Oracle
- Oracle DG運維常用SQLOracle運維SQL
- oracle dg切換操作示例Oracle
- ORACLE 11.2.0.4 DG(Broker) for linux 部署OracleLinux
- Oracle DG Standby Database型別OracleDatabase型別
- Oracle DG建立Physical Standby DatabaseOracleDatabase
- Oracle DG建立Logical Standby DatabaseOracleDatabase
- vue搭建筆記Vue筆記
- _app搭建筆記APP筆記
- 【DG】Data Guard搭建(physical standby)
- Oracle之11g DataGuardOracle
- ORACLE OCM備考OEM搭建DG報錯:NMO not setuid-root(Unix-only)OracleUI
- Oracle 常用SQL筆記OracleSQL筆記
- 【ASK_ORACLE】Oracle Data Guard(一)DG架構Oracle架構