天天看點

oracle data guard搭建

DataGuard服務

日志傳輸

控制redo資料傳輸到一個或多個歸檔位置

日志應用

應用redo資料到standby 資料庫,以保持對primary資料庫事務一緻

角色轉換

primary  standby

switchover

failover --有可能丢失資料 ------------------------DataGuard 搭建--------------------

  primary     standy

hostname: node1.oracle.com   node1.oracle.com

instancename souid     staid

db_unique_name souid     staid

db_name  souid     souid file_nmae  /oracle/oradata/souid   /oracle/oradata/staid

archive  /home/oracle/arch   /home/oracle/arch

1. 準備工作

[[email protected] ~]# vi /etc/sysctl.conf

kernel.shmmax = 18294967295 //調大

[[email protected] ~]# sysctl -p

2. 更改參數(主庫)

SQL> alter system set db_unique_name=souid scope=spfile;

SQL> alter database force logging;

SQL> alter database flashback on;  前提開歸檔

SQL> alter system set log_archive_config='DG_CONFIG=(souid,staid)';

SQL> alter system set log_archive_dest_1='location=/home/oracle/arch valid_for=(all_logfiles,all_roles) db_unique_name=souid';

SQL> alter system set log_archive_dest_2='service=staid async  valid_for=(online_logfiles,primary_role) db_unique_name=staid';

SQL> alter system set LOG_ARCHIVE_DEST_STATE_1=ENABLE

SQL> alter system set LOG_ARCHIVE_DEST_STATE_2=ENABLE;

SQL> alter system set LOG_ARCHIVE_FORMAT='%t_%s_%r.arc'  scope=spfile;

SQL> alter system set LOG_ARCHIVE_MAX_PROCESSES=30;

SQL> alter system set fal_server=staid scope=spfile; //庫出現故障後,staid切換成主庫

SQL> alter system set fal_client=souid scope=spfile; //庫出現故障後,souid切換成備庫

SQL> alter system set db_file_name_convert='/oracle/oradata/staid','/oracle/oradata/souid' scope=spfile;

SQL> alter system set log_file_name_convert='/oracle/oradata/staid','/oracle/oradata/souid' scope=spfile;

SQL> alter system set STANDBY_FILE_MANAGEMENT=AUTO;

SQL> alter system set local_listener='';  //不使用特殊監聽

SQL> alter database add standby logfile;

SQL> alter database add standby logfile;

SQL> alter database add standby logfile;

SQL> alter database add standby logfile;

SQL> alter system set dg_broker_start=true

2. 更改參數(備庫)

SQL> create pfile='/home/oracle/initstaid.ora' from spfile;

更改後的内容如下

staid.__db_cache_size=12582912

staid.__java_pool_size=4194304

staid.__large_pool_size=4194304

staid.__oracle_base='/oracle'#ORACLE_BASE set from environment

staid.__pga_aggregate_target=104857600

staid.__sga_target=318767104

staid.__shared_io_pool_size=0

staid.__shared_pool_size=79691776

staid.__streams_pool_size=209715200

*.aq_tm_processes=2

*.audit_file_dest='/oracle/admin/staid/adump'

*.audit_trail='db'

*.compatible='11.2.0.0.0'

*.control_files='/oracle/oradata/staid/control01.ctl'

*.db_block_size=8192

*.db_domain=''

*.db_file_name_convert='/oracle/oradata/souid','/oracle/oradata/staid'

*.db_name='souid'

*.db_recovery_file_dest='/oracle/fast_recovery_area'

*.db_recovery_file_dest_size=4322230272

*.db_unique_name='STAID'

*.dg_broker_start=TRUE

*.diagnostic_dest='/oracle'

*.dispatchers='(PROTOCOL=TCP) (SERVICE=staidXDB)'

*.fal_client='STAID'

*.fal_server='SOUID'

*.global_names=TRUE

*.job_queue_processes=10

*.local_listener=''

*.log_archive_config='DG_CONFIG=(staid,souid)'

*.log_archive_dest_1='location=/home/oracle/arch1 valid_for=(all_logfiles,all_roles) db_unique_name=staid'

*.log_archive_dest_2='service=souid async  valid_for=(online_logfiles,primary_role) db_unique_name=souid'

*.log_archive_dest_state_1='ENABLE'

*.log_archive_dest_state_2='ENABLE'

*.log_archive_format='%t_%s_%r.arc'

*.log_archive_max_processes=30

*.log_file_name_convert='/oracle/oradata/souid','/oracle/oradata/staid'

*.open_cursors=300

*.parallel_max_servers=20

*.pga_aggregate_target=104857600

*.processes=150

*.remote_login_passwordfile='EXCLUSIVE'

*.sga_max_size=629145600

*.sga_target=0

*.shared_pool_reserved_size=0

*.standby_file_management='AUTO'

*.streams_pool_size=209715200

*.undo_retention=3600

*.undo_tablespace='UNDOTBS1'

3. 配置監聽和tnsnames.ora

靜态監聽

SID_LIST_LISTENER=

  (SID_LIST=

      (SID_DESC=

          (GLOBAL_DBNAME=souid)

          (SID_NAME=souid)

          (ORACLE_HOME=/oracle/database)

        )

      (SID_DESC=

          (GLOBAL_DBNAME=staid)

          (SID_NAME=staid)

          (ORACLE_HOME=/oracle/database)

        )

       ) LISTENER =

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = TCP)(HOST = node1.oracle.com)(PORT = 1521))

  ) ADR_BASE_LISTENER = /oracle

獨占方式

[[email protected] admin]$ vi tnsnames.ora

SOUID =

  (DESCRIPTION =

    (ADDRESS_LIST =

      (ADDRESS = (PROTOCOL = TCP)(HOST = node1.oracle.com)(PORT = 1521))

    )

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = souid)

    )

  ) STAID =

  (DESCRIPTION =

    (ADDRESS_LIST =

      (ADDRESS = (PROTOCOL = TCP)(HOST = node1.oracle.com)(PORT = 1521))

    )

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = staid)

    )

  )

4. 密碼檔案

[[email protected] dbs]$ orapwd file=orapwstaid password=oracle ignorecase=y

5. 啟動備庫到mount狀态

SQL> startup nomount pfile='/home/oracle/initstaid.ora';

SQL> create spfile from pfile='/home/oracle/initstaid.ora';

SQL> shutdown immediate;

SQL> startup nomount

6. 克隆

[[email protected] admin]$ rman target sys/[email protected] auxiliary sys/[email protected]

RMAN> duplicate target database for standby nofilenamecheck from active database;

SQL> select status from v$instance;------------------備庫到mount狀态

SQL> alter database open;

SQL> select open_mode from v$database;------------------隻讀模式

ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE disconnect;

RMAN> configure ARCHIVELOG DELETION POLICY to applied on all standby;  日志同步

----------------定義日志傳輸模式----------------

SQL> alter system set log_archive_dest_1='location=/home/oracle/arch valid_for=(all_logfiles,all_roles) db_unique_name=souid';

sync: 同步傳輸  。把主庫的操作寫入主庫的線上日志之前就傳送到standby log file。 如果備庫使用real-time apply的話,在寫入standby log redo後就直接引用備庫。

如果備庫沒有啟用read-time apply,則備庫的arcn程序會等待主庫切換日志時把standby redo 也做一次歸檔(把歸檔應用到備庫上) async : 異步傳輸。 是主庫在寫入主庫的線上日志,由LNSn程序發送給備庫。備庫的RFS程序負責接收資料并寫入到standby logfile,後續動作同上。

affrim : 指定所有redo log檔案和  standby redo log 必須同步

noaffrim :  指定所有redo log檔案和  standby redo log 不必須同步  default

1. 添加監聽       (SID_DESC=

          (GLOBAL_DBNAME=souid_DGMGRL) ------------------給DGMGRL 添加特定靜态監聽,服務名格式固定

          (SID_NAME=souid)

          (ORACLE_HOME=/oracle/database)

        )

      (SID_DESC=

          (GLOBAL_DBNAME=staid_DGMGRL) ------------------給DGMGRL 添加特定靜态監聽,服務名格式固定

          (SID_NAME=staid)

          (ORACLE_HOME=/oracle/database)

        )

[[email protected] admin]$ vi tnsnames.ora

根據監聽檔案添加相應的内容show parameter dg_broker_start檢視

確定兩個參數都是開啟

dg_broker_start                      boolean     TRUE 使用DG BROKER 來配置dataguard

[[email protected] admin]$ dgmgrl sys/[email protected]

DGMGRL> create configuration dgc1 as primary database is souid connect identifier is souid

DGMGRL> add database staid as connect identifier is staid;

DGMGRL> enable configuration

DGMGRL> show configuration;

Configuration - dgc1   Protection Mode: MaxPerformance    //最大性能

  Databases:

    souid - Primary database

    staid - Physical standby database Fast-Start Failover: DISABLED Configuration Status:

SUCCESS

DGMGRL> show configuration verbose;

DGMGRL> show database verbose souid;

DGMGRL>  show database verbose staid;

---------------------------将最大性能改為最大保護----------------

最大保護模式

sync lgwr affrim

async arcn noaffrim

[[email protected] admin]$ dgmgrl sys/[email protected]

DGMGRL> edit database souid SET PROPERTY  LogXptMode = 'SYNC'

DGMGRL> edit CONFIGURATION SET PROTECTION MODE AS MaxProtection;

主庫和備庫都要修改

DGMGRL> edit database staid SET PROPERTY  LogXptMode = 'SYNC'

DGMGRL> edit CONFIGURATION SET PROTECTION MODE AS MaxProtection; ------------------日常維護-------------

啟動順序               關閉順序

1. 監聽                1.監聽

2. 備庫                2.主庫

3. 主庫                3.備庫

SQL> startup

SQL> alter database recover managed standby database disconnect from session;

SQL> alter database open read only;

SQL> alter database recover managed standby database using current logfile disconnect;

SQL>  select open_mode from v$database; OPEN_MODE

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

READ ONLY WITH APPLY 關閉

主庫shutdown immediate SQL> alter database recover managed standby database cancel;

備庫停止日志傳送

SQL> recover managed standby database cancel;

SQL> alter database open read only;

備份 回到日志傳送模式

SQL> recover managed standby database disconnect from session;

備庫RFS(remote file service)接收日志清空和MRP應用日志同步 主備庫情況

檢視備庫中已經歸檔的日志

SQL> select SEQUENCE#,status from v$archived_log;

檢視備庫,應用redo資料過程

SQL> select message from v$dataguard_status;

檢視備庫中語句應用的redo

SQL> select * from v$log_history ;

---------------------------swichover-----------------

SQL> select database_role,switchover_status from v$database;   檢視主備庫

開始将主庫切換成備庫

SQL> alter database commit to switchover to physical standby with session shutdown;

關閉主庫

再将主庫打開到mount狀态

SQL> alter database recover managed standby database disconnect from session;

SQL> alter database open read only;

SQL>  alter database recover managed standby database using current logfile disconnect; 修改為備庫

備庫切換成主庫

SQL> alter database commit to switchover to primary with session shutdown ;(如果有會話連接配接)

關閉重新開機即可

如果用dg broker切換

DGMGRL> switchover to staid;

快照庫

DGMGRL> convert database souid to snapshot standby; //如果是最大保護模式,不允許備庫轉成快照庫

DGMGRL> edit CONFIGURATION SET PROTECTION MODE AS MaxPerformance; //改成最大性能模式,即可操作

做完操作之後,再将 快照庫還原成 備庫

DGMGRL> convert database souid to PHYSICAL STANDBY;

将快照庫還原成實體備庫,那之前的測試都将被删除

-------------------failover------------------

備庫

SQL> alter database recover managed standby database cancel;  //停止redo傳輸應用

重新開機

SQL> alter database recover managed standby database finish; //完結

SQL> alter database commit to switchover to primary with session shutdown ; //切成正常庫

關閉重新開機即可

變為可以讀寫的庫

---------------------FSSO-----------------

故障快速轉移

1. 打開flashback on  (備庫)

SQL> alter database recover managed standby database cancel;

SQL>  alter database flashback on

SQL> alter database recover managed standby database disconnect;

2. 開啟功能

DGMGRL> enable fast_start failover;

重新開機configuration

DGMGRL>  DISABLE FAST_START FAILOVER

DGMGRL> disable configuration;

DGMGRL> enable configuration;

DGMGRL> enable Fast-Start Failover;

DGMGRL> enable FAST_START FAILOVER ;

開啟   FSSO

DGMGRL> enable FAST_START FAILOVER ;

開啟并檢視終端

DGMGRL> start observer

主庫 (異常關機)

SQL> shutdown abort;

檢視

DGMGRL> start observer

檢視備庫狀态

SQL> select open_mode,database_role from v$database ;

原主庫修複

原主庫修複後,将其啟動到mount狀态

再次檢視(這個啟動庫自動關聯到我們的DG環境當中,但是作為備庫存在)

DGMGRL> start observer

手工切換

DGMGRL> switchover to souid;