oracle 11g dg搭建筆記

jx_yu發表於2015-10-28

? 說明

    線上有套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

#刪除舊的ygisygdw使用者,同時刪除其下所有物件

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_BASEprimary的不一致,相關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密碼檔案、監聽、tnspfile檔案配置

複製primary上的生成的standby pfile檔案密碼檔案、listener.oratnsname.ora相關配置檔案到standby相應的目錄

3部署standby

建立standby有不止一個方法,以下介紹最簡單的方法,即直接用duplicate命令;

在使用該命令時,先說下使用該命令的注意事項:

1) 使用rmantarget資料庫時,不能使用作業系統認證,只能使用密碼方式連線;

2) 源資料庫必須在mount或者open狀態,如果在open狀態,必須開啟歸檔,如果資料庫不是open狀態的,則資料庫必須已經處於一致性;

3) 使用rman連線auxiliary資料庫時,即使standbyprimary在同一臺伺服器上,也要使用tns去連線;

4) 如果建立的不是standby資料庫,那麼密碼檔案不會自動複製;

5) 必須要使用具有sysdba許可權的使用者連線;

6) 在使用active database duplication時,不能使用until

 

在清楚了以上限制條件之後,就可以開始操作了。

3.1 standbynomount狀態

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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章