1. 程式人生 > >Oracle data guard學習

Oracle data guard學習

 

 

Oracle data guard學習:三思筆記

Data guard

1data guard結構:

data guard是一個集合,由一個primary資料庫(生產資料庫)和一個或多個standby資料庫(最多9個組成),組成data guard之間的資料庫由oracle的net service來連線,

 1主庫:單例項,rac

 2standby:物理standby:物理結構相同,接收到redo後,以介質恢復的形式到standby庫

           邏輯

standby:資料相同,結構可能有差異,將接受到的redo轉換成sql來操作standby的資料

1.1  data guard服務:

 1 Redo傳輸服務:RTS:從主庫傳送redo到其他的的standby,

 2 LOG應用服務:LAS:保證primary與standby的事務一致

  物理standby:data guard使用redo apply技術,通過recover的方式應用redo資料

  邏輯standby:使用sql apply,先將接收到的redo資料轉換成sql,以執行該sql來應用redo資料

  3 角色轉換:一套dg只有2中角色:primary,standby

  角色轉換也就是切換,切換分2中:switchover跟failover

Switchover:將primary跟standby(一個)進行切換,不會丟失資料

Failoverprimary出現故障並不能及時恢復,通過failover將一個standby轉換為新的primary,在最大保護模式跟高可用模式下,不會丟失資料,(高效能可能會?)

1.2  3種保護模式:

  最大保護maximum protection,這種模式確保無資料丟失,要求事務在提前前,

redo不僅寫入到本地的online redologs中,還要同時寫入到standby 的standby的redologs中,並確認至少在一個standby中可以使用了,才會在primary庫中提交,如果standby導致redo問題,primary會shutdown

  最高效能(預設)maximum performance,這種模式在不影響primary下,提供最高級別的資料保護策略,事務可以隨時提交,當前primary的redo資料至少寫入到一個standby中,可以是同步與非同步

  最高可用maximum availability,在不影響primary的前提下,提供最大模式的保護資料的策略,要求本地事務在提交前把redo寫入到一個standby中,如果standby出現故障primary並不會shutdown,而是自動轉換為最高效能模式,等standby恢復正常,會自動轉換為最高可能

  3種模式都需要指定log_archive_dest_n引數

 1.3  data guard特定總結:

容災恢復及高可用特性,全面的保護資料,有效利用系統資源,故障自動檢測及解決方案,集中的易用管理模式,自動化切換角色,

2.1 standby資料庫型別

 1物理standby:

物理standby跟primary一模一樣,通過redo來應用standby,在物理standby沒有執行redo應用時,可以以read only模式開啟,如果資料庫中指定了flashback area,可以設定成read write,操作完成後可以flashback database恢復到read write前的狀態,然後開啟接收primary的redo並應用

 Redo應用:物理standby用過redo 應用來保持跟primary 的一致,(通過oracle的恢復機制,利用歸檔跟redo來恢復對應的塊的操作),如果正在執行redo的應用,db不能被open,redo應用時物理standby 的核心,

 Read only模式開啟:開啟後,可以在standby執行查詢跟備份操作,此時standby任然會接收redo,只不過不會進行redo 應用,知道standby恢復應用(oracle11g,改進了物理standby,可以在standby開啟是應用redo,這樣可以實現讀寫分離)

Read write開啟db:此時不能接收primary傳送的redo資料,失去了保護資料的策略,此時已該模式開啟資料庫,可以進行一些資料除錯(不方便在生產上做的),操作完成在閃回,

物理standby 的特點:災難恢復及高可用,資料保護,分擔primary的壓力,提升效能

 2 邏輯standby:

邏輯standby也是通過primary的複製建立的,不過由於邏輯的使用sql應用來改變資料,所以可能資料結構不一樣,

邏輯standby正常情況下是read write開啟,使用者可以在任何時候訪問db,由於sql自身的特點,邏輯standby對有些資料型別及一些dml/ddl操作的不支援,

邏輯standby資料庫可以額外的建立index,物化檢視等提高查詢效能並滿足業務需要,如建立新的schema(primary不存在的),分擔主庫壓力,可以將查詢報表分離出來,平滑升級(實現跨版本的升級,為資料庫打補丁,)

Data guard的操作介面

 Oem,sqlplus,dgmgrl(data guard broker命令方式)

3 Data guard的軟體要求:

  同一個data guard的環境所有的oracle必須執行在相同的系統構架上,不同的伺服器上可以配置不同,

Primary資料庫跟standby資料庫必須執行在相同的系統平臺上

Data guard是oracle 企業版的特性

同一個data guard配置中的所有初始化引數:compatible值必須相同

Primary資料庫必須處於歸檔模式,並且force logging模式

Primary,standby均可以用於單例項和rac結構,並且可以在多個standby中,可以有邏輯standby跟物理standby

PrimaRy跟standby可以放在同一臺伺服器上,但是控制檔案,引數檔案,日誌檔案,資料檔案,歸檔檔案的目錄不同,以免被覆蓋

Primary和standby資料庫必須有sysdba許可權

建議採用相同的資料儲存結構,伺服器的時間設定,

 

3物理standby

3.1物理standby建立前的準備

1啟用force logging模式

SQL> conn /as sysdba

Connected.

SQL> select force_logging from v$database;

FOR

---

NO

SQL> alter database force logging;

Database altered.

SQL> select force_logging from v$database;

FOR

---

YES

alter database no force  logging

2建立金鑰檔案(不存在的話)

在所有的dg資料庫配置中,都必須有自己獨立的金鑰檔案,並且保證,同dg中,sys的密碼必須一樣,以保證redo順利的傳輸(通過tns,會驗證sys密碼)

使用dbca建立資料庫,會自動建立金鑰檔案

  [[email protected] ~]$ cd /u01/app/oracle/product/10.2.0/db_1/dbs/

[[email protected] dbs]$ ll

-rw-r----- 1 oracle oinstall    1536 03-24 15:55 orapwgrs

不存在就建立

orapwd file=orapwgrs password="987064" entries=10 force=y;

3配置standby redologs,用於儲存接收主庫的redo log

  對應最大保護和最高可用模式,建議為standby 建立redologs(不配置可以,oracle將在standby端自動建立歸檔檔案,並虛擬為一組standby redologs,並使用lgwr sync模式傳輸redo

  關於standby redologs建議:1 standby redologs跟primar的redo檔案大小相同,2 建立適當的日誌數目,一般而言,standby的redolog要比primary的redo檔案多一個,(每執行緒的日誌組數+1)*執行緒數,防止主庫的lgwr程序鎖住,備庫的RFS程序接收到primary的redo,儲存在本地(就是standby log)

 ARCH模式的話不寫standby log,直接讀取歸檔檔案

  管理standby redologs:standby redologs的大小最好跟redo log的一樣

v$log v$logfile

SQL> alter database add standby logfile group 4 ('/u01/app/oracle/oradata/grs/redo04.log') size 100m;

Database altered.

--刪除該日誌組

SQL> alter database drop standby logfile group 4;

Database altered.

SQL> alter database add standby logfile group 4 ('/u01/app/oracle/oradata/grs/redo04.log') size 50m;

alter database add standby logfile group 4 ('/u01/app/oracle/oradata/grs/redo04.log') size 50m

*

ERROR at line 1:

ORA-00301: error in adding log file '/u01/app/oracle/oradata/grs/redo04.log' -

file cannot be created

ORA-27038: created file already exists

Additional information: 1

--需要物理刪除

----保證主庫與備庫的日誌大小一樣,

SQL> alter database add standby logfile group 4 ('/u01/app/oracle/oradata/grs/redo04.log') size 50m;

Database altered.

SQL> select group#, thread#, sequence#, archived, status from v$standby_log;

    GROUP#    THREAD#  SEQUENCE# ARC STATUS

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

         4          0          0 YES UNASSIGNED

 

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

    GROUP# TYPE

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

MEMBER

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

         3 ONLINE

/u01/app/oracle/oradata/grs/redo03.log

 

         2 ONLINE

/u01/app/oracle/oradata/grs/redo02.log

 

         1 ONLINE

/u01/app/oracle/oradata/grs/redo01.log

    GROUP# TYPE

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

MEMBER

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

         4 STANDBY

/u01/app/oracle/oradata/grs/redo04.log

4設定初始化引數

SQL> create pfile ='/u01/oracle/backup/pfile' from spfile;

File created.

[[email protected] backup]$ vi pfile

grs.__db_cache_size=180355072

grs.__java_pool_size=4194304

grs.__large_pool_size=4194304

grs.__shared_pool_size=88080384

grs.__streams_pool_size=4194304

*.audit_file_dest='/u01/app/oracle/admin/grs/adump'

*.background_dump_dest='/u01/app/oracle/admin/grs/bdump'

*.compatible='10.2.0.1.0'

*.control_files='/u01/app/oracle/oradata/grs/control01.ctl','/u01/app/oracle/oradata/grs/control02.ctl','/u01/app/oracle/oradata/grs/control03.ctl'

*.core_dump_dest='/u01/app/oracle/admin/grs/cdump'

*.db_block_size=8192

*.db_domain=''

*.db_file_multiblock_read_count=16

*.db_name='grs'

*.db_recovery_file_dest='/u01/app/oracle/flash_recovery_area'

*.db_recovery_file_dest_size=2147483648

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

*.job_queue_processes=10

#*.log_archive_dest_1='location=/u01/app/oracle/archivelog/archivelog/'

*.open_cursors=300

*.pga_aggregate_target=94371840

*.processes=150

*.remote_login_passwordfile='EXCLUSIVE'

*.sga_target=285212672

*.undo_management='AUTO'

*.undo_tablespace='UNDOTBS1'

*.user_dump_dest='/u01/app/oracle/admin/grs/udump'

 

# DB_NAME=grs

   *.DB_UNIQUE_NAME=grs

   *.LOG_ARCHIVE_CONFIG='DG_CONFIG=(grs,grs2)'

   *.LOG_ARCHIVE_DEST_1='LOCATION=/u01/app/oracle/archivelog/archivelog/ VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=grs'

   *.LOG_ARCHIVE_DEST_2='SERVICE=grs2 LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=grs2'

    *.LOG_ARCHIVE_DEST_STATE_1=ENABLE

    *.LOG_ARCHIVE_DEST_STATE_2=ENABLE

   # *.REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE

    *.LOG_ARCHIVE_FORMAT=%t_%s_%r.arc

    *.LOG_ARCHIVE_MAX_PROCESSES=30

 

    # 以下部分為主機切換為備庫使用

 

    *.FAL_SERVER=grs_192.168.2.185

    *.FAL_CLIENT=grs2_192.168.2.185

    *.DB_FILE_NAME_CONVERT='/u01/app/oradata/grs','/u02/app/oradata/grs2'

    *.LOG_FILE_NAME_CONVERT='/u01/app/oradata/grs','/u02/app/oradata/grs2'

    *.STANDBY_FILE_MANAGEMENT=AUTO

SQL> shutdown immediate;

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> create spfile from pfile='/u01/oracle/backup/pfile';

File created.

SQL> startup;

5將主庫設定為歸檔模式

SQL> archive log list;

Database log mode              Archive Mode

Automatic archival             Enabled

Archive destination            /u01/app/oracle/archivelog/archivelog/

Oldest online log sequence     3

Next log sequence to archive   5

Current log sequence           5

如果是disable,需要啟動到mount,然後SQL> alter database archivelog;

 

3物理standby建立的實際過程演示

  源資料庫primary

Ip:192.168.2.185

Oracle sid=grs

Db_unique_name=grs

安裝路徑:/u01/app/oracle/product/10.2.0/db_1/dbs

資料檔案:/u01/app/oracle/oradata/grs

歸檔路徑:/u01/oracle/backup

  目標資料庫standby

Ip:192.168.2.188

Oracle sid=grs2

Db_unique_name=grs2

安裝路徑:/u02/app/oracle/product/10.2.0/db_1/dbs

資料檔案:/u02/app/oracle/oradata/grs2

歸檔路徑:/u02/oracle/backup

1 primary主庫的配置及相關

1 檢查主庫的歸檔

[email protected] backup]$ export ORACLE_SID=grs

SQL> archive log list;

如果不是歸檔狀態,重新啟動到mount,alter database archivelog

2 將主庫設定為force loggin狀態

SQL> conn /as sysdba

Connected.

SQL> select force_logging from v$database;

FOR

---

NO

SQL> alter database force logging;

Database altered.

SQL> select force_logging from v$database;

FOR

---

YES

alter database no force  logging

3 配置主庫的初始化引數

SQL> create pfile ='/u01/oracle/backup/pfile' from spfile;

File created.

[[email protected] backup]$ vi pfile

# DB_NAME=grs

   *.DB_UNIQUE_NAME=grs

   *.LOG_ARCHIVE_CONFIG='DG_CONFIG=(grs,grs2)'

   *.LOG_ARCHIVE_DEST_1='LOCATION=/u01/app/oracle/archivelog/archivelog/ VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=grs'

   *.LOG_ARCHIVE_DEST_2='SERVICE=grs2 LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=grs2'

    *.LOG_ARCHIVE_DEST_STATE_1=ENABLE

    *.LOG_ARCHIVE_DEST_STATE_2=ENABLE

   # *.REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE

    *.LOG_ARCHIVE_FORMAT=%t_%s_%r.arc

    *.LOG_ARCHIVE_MAX_PROCESSES=30

 

    # 以下部分為主機切換為備庫使用

    *.FAL_SERVER=grs_192.168.2.185

    *.FAL_CLIENT=grs2_192.168.2.188

    *.DB_FILE_NAME_CONVERT='/u01/app/oradata/grs','/u02/app/oradata/grs2'

    *.LOG_FILE_NAME_CONVERT='/u01/app/oradata/grs','/u02/app/oradata/grs2'

    *.STANDBY_FILE_MANAGEMENT=AUTO

SQL> shutdown immediate;

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> create spfile from pfile='/u01/oracle/backup/pfile';

File created.

SQL> startup;

4 建立standby庫的控制檔案

SQL> ALTER DATABASE CREATE STANDBY CONTROLFILE AS '/u01/oracle/backup/control01.ctl';

5 複製相關檔案到standby資料庫

可以採用rman,expdp,cp等命令,複製相關資料檔案到standby

 

6 配置監聽跟網路服務名

[[email protected] admin]$ cp -p /u01/app/oracle/product/10.2.0/db_1/network/admin/listener.ora /u02/app/oracle/product/10.2.0/db_1/network/admin/

[[email protected] admin]$ cp -p /u01/app/oracle/product/10.2.0/db_1/network/admin/tnsnames.ora /u02/app/oracle/product/10.2.0/db_1/network/admin/

 

修改監聽檔案

 

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

 

# listener.ora Network Configuration File: /u01/app/oracle/product/10.2.0/db_1/network/admin/listener.ora

# Generated by Oracle configuration tools.

 

SID_LIST_LISTENER =

  (SID_LIST =

    (SID_DESC =

      (SID_NAME = PLSExtProc)

      (ORACLE_HOME = /u02/app/oracle/product/10.2.0/db_1)

      (PROGRAM = extproc)

    )

    (SID_DESC =

      (GLOBAL_DBNAME = Oracle8)

      (ORACLE_HOME = /u02/app/oracle/product/10.2.0/db_1)

      (SID_NAME = grs2)

    )

 

 )

 

LISTENER =

  (DESCRIPTION_LIST =

    (DESCRIPTION =

      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.2.185)(PORT = 1521))

    )

    (DESCRIPTION =

      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))

    )

)

 

 

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

 

# tnsnames.ora Network Configuration File: /u01/app/oracle/product/10.2.0/db_1/network/admin/tnsnames.ora

# Generated by Oracle configuration tools.

 

GRS2 =

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.2.185)(PORT = 1521))

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = grs2)

    )

  )

 

EXTPROC_CONNECTION_DATA =

  (DESCRIPTION =

    (ADDRESS_LIST =

      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))

    )

    (CONNECT_DATA =

      (SID = PLSExtProc)

      (PRESENTATION = RO)

    )

  )

7 建立金鑰檔案(並複製到standby對應路徑)

[[email protected] ~]# cd /u01/app/oracle/product/10.2.0/db_1/dbs/

[[email protected] dbs]# ll

-rw-r----- 1 oracle oinstall    1536 03-24 15:55 orapwgrs

不存在就建立

orapwd file=orapwgrs password="987064" entries=10 force=y;

2物理standby端的配置

[[email protected] backup]$ export ORACLE_SID=grs2

1 建立日誌檔案,後臺程序的相關目錄

[[email protected] oracle]$ mkdir -p archivelog/archivelog

[[email protected] oracle]$ mkdir -p /u02/app/oracle/flash_recovery_area/grs/onlinelog

[[email protected] oracle]$ 

[[email protected] oracle]$ pwd

/u02/app/oracle

[[email protected] oracle]$ mkdir admin

[[email protected] oracle]$ cd admin/

[[email protected] admin]$ mkdir grs2

[[email protected] admin]$ cd grs2/

[[email protected] grs2]$ mkdir adump bdump cdump udump

2配置監聽跟網路服務名

配置好後,可以tnsping

3修改standby的引數檔案

[[email protected] dbs]$ vi initgrs2.ora 

 

*.LOG_ARCHIVE_DEST_1='LOCATION=/u01/app/oracle/archivelog/archivelog/ VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=grs'

grs.__db_cache_size=192937984

grs.__java_pool_size=4194304

grs.__large_pool_size=4194304

grs.__shared_pool_size=75497472

grs.__streams_pool_size=4194304

*.audit_file_dest='/u02/app/oracle/admin/grs/adump'

*.background_dump_dest='/u02/app/oracle/admin/grs/bdump'

*.compatible='10.2.0.1.0'

*.control_files='/u02/app/oracle/oradata/grs/control01.ctl','/u02/app/oracle/oradata/grs/control02.ctl','/u02/app/oracle/oradata/grs/control03.ctl'

*.core_dump_dest='/u02/app/oracle/admin/grs/cdump'

*.db_block_size=8192

*.db_domain=''

*.db_file_multiblock_read_count=16

*.DB_FILE_NAME_CONVERT='/u02/app/oradata/grs2','/u01/app/oradata/grs'

*.db_name='grs'

*.db_recovery_file_dest='/u02/app/oracle/flash_recovery_area'

*.db_recovery_file_dest_size=2147483648

*.DB_UNIQUE_NAME='grs2'

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

*.FAL_CLIENT='grs_192.168.2.185'

*.FAL_SERVER='grs2_192.168.2.185'

*.job_queue_processes=10

*.LOG_ARCHIVE_CONFIG='DG_CONFIG=(grs2,grs)'

*.LOG_ARCHIVE_DEST_1='LOCATION=/u02/app/oracle/archivelog/archivelog/ VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=grs2'

*.LOG_ARCHIVE_DEST_2='SERVICE=grs LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=grs'

*.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='/u02/app/oradata/grs2','/u01/app/oradata/grs'

*.open_cursors=300

*.pga_aggregate_target=94371840

*.processes=150

*.remote_login_passwordfile='EXCLUSIVE'

*.sga_target=285212672

*.STANDBY_FILE_MANAGEMENT='AUTO'

*.undo_management='AUTO'

*.undo_tablespace='UNDOTBS1'

*.user_dump_dest='/u02/app/oracle/admin/grs2/udump'

4啟動物理standby到mount狀態

5接收歸檔檔案

  物理standby啟動到mount狀態後,就能夠接收來自primary端的redo日誌,需要切換到主庫

Primary sql>alter system set log_arhive_dest_state_2=ENABLE;

 然後primary庫就會發送redo到standby,檢視接收到的歸檔檔案,V$ARCHIVED_Log

Primary修改的資料能否在standby看到,受幾個方面的影響

 1同步模式:預設情況下primary傳送歸檔日誌通過ARCH方式,只有當日志切換時,才會把產生的歸檔日誌傳送到standby,如果standby端配置了standby redologs,就支援lgwr傳輸redo到standby,這樣產生的redo就能及時傳送到standby端

2 是否啟動了應用:將redo傳送到了standby端,並不意味著standby就有資料,必須手動執行應用命令,才能將修改的應用到standby,在預設的情況下,物理standby資料庫是執行的恢復過程,只有當主庫產生日誌切換時才會應用歸檔到standby,

3是否實時應用:在standby端配置了standby redologs,並且在傳輸redo資料時採用lgwr同步傳輸的方式,在這種情況下,redo是實時的,

  Oracle10g,物理的standby是不能實時看到資料的(邏輯standby或者11g物理standby才可以)

6啟動redo應用:即使當前standby處於open狀態,也不需要重啟,直接執行後,Oracle會切換到mount狀態

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

暫停redo應用(並不是停止,standby任然會接收,但不會應用)

SQL> alter database recover managed standby database cancel;

 

停止redo傳輸應用,standby資料庫

主庫:SQL> ALTER SYSTEM SET log_archive_dest_state_2='DEFER';

System altered.

備庫:SQL> alter database recover managed standby database cancel;

alter database recover managed standby database cancel

*

ERROR at line 1:

ORA-16136: Managed Standby Recovery not active

4 物理standby的角色切換

Switchover跟failover

Switchover:切換不會丟失資料,手動觸發或者定時計劃觸發,

Failover:不可預知的原因導致不能恢復或者恢復時間較長,這就需要failover,

1 物理的switchover切換

1轉換前的準備工作

檢查各資料庫的初始化引數,確認轉換的primary跟standby,以及確認是否正確的初始化引數的配置

檢查即將成為primary庫是否為歸檔

檢查物理standby的臨時檔案是否存在

確保standby資料庫的rac例項只有一個例項在啟動,

選擇一個最適合轉換的轉換成primary

2物理執行standbyswitchover

1檢查初始化引數

2檢查是否支援switchover(主庫)

SQL> select switchover_status from v$database;

 

SWITCHOVER_STATUS

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

SESSIONS ACTIVE:當前任然有人連線primary資料庫,(通過as sysdba連線,就會產生這樣的狀態)

 

primary>select switchover_status from v$database;

 

SWITCHOVER_STATUS

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

TO STANDBY

standby >select switchover_status from v$database;

 

SWITCHOVER_STATUS

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

NOT ALLOWED

 

SQL> select switchover_status from v$database;

 

SWITCHOVER_STATUS

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

TO STANDBY

如果該值為to standby,表示支援切換

SQL> select switchover_status from v$database;

 

SWITCHOVER_STATUS

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

RECOVERY NEEDED

3啟動switchover

首先將primary庫切換到standby狀態

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

並將該primary重新啟動到mount狀態

SQL> shutdown immediate

ORA-01109: database not open

 

Database dismounted.

ORACLE instance shut down.

SQL> startup nomount;

ORACLE instance started.

SQL> alter database mount standby database;

4 在standby上檢查是否支援switchover

SQL> select name,open_mode,protection_mode,database_role from v$database;

 

standby >select switchover_status from v$database;

 

SWITCHOVER_STATUS

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

NOT ALLOWED

顯示的狀態:SWITCHOVER_STATUS,TO PRIMARY,SWITCHOVER PENDING(當前standby資料沒有啟動redo應用,重新執行alter database recover managed standby database disconnect from session;

 

5轉換角色到primary

SQL> alter database commit to switchover to primary;

待轉換的standby可以是mount或者open read only狀態, 不能是read write

6重新開啟primary(新)

SQL> shutdown immediate

ORA-01507: database not mounted

 

ORACLE instance shut down.

SQL> startup

 

2物理的failover切換

Note:

1 failover後,原primary不再是dg的一部分

2 在多數情況下,其他物理/邏輯standby不直接參與failover過程,不需要做操作

3 某些情況下,新的primary資料庫配置後,需要重新建立dg配置中其他的所有的standby

4 在執行failover之前,儘量把primary的redo跟歸檔都複製到standby

 

如果待轉換的模式是最大保護模式,需要切換到最高可用模式

alter database set standby database to maximize performance;

 

1 檢查歸檔日誌是否連續

查詢待轉換的standby,

select thread#,low_sequence#,high_sequence# from v$archive_gap

如果有返回的記錄,按照列出的記錄號複製對應的歸檔到standby的伺服器,檔案複製過來,通過加入資料字典

alter database register physical logfile 'filespec1';

2 檢查歸檔檔案是否完整

主庫跟備庫分別執行

select distinct  thread#,max(sequence#)over(partition by thread#) from v$archived_Log

必須保證2個max相同,不然就需要拷貝歸檔到standby

3啟動failover

alter database recover managed standby database finish force;

force會停止當前活動的rfs程序

4 切換物理standby為primary

alter database commit to switchover to primary;

5啟動新的primary資料庫

處於mount,則直接open,open read only,則shutdown 然後重啟,

 

5 read only模式開啟物理standby

1物理standby直接從shutdown狀態啟動到read only

直接startup,就是read only狀態

2 物理standby從redo應用到read only狀態

首先需要取消redo應用

alter database recover managed standby database cancel;

然後在開啟db

Alter database open

3read only切換到redo應用

alter database recover managed standby database disconnect from session;

備庫,read only模式開啟後,可進行查詢,備份等操作

Ready wirte模式開啟資料庫,standby將暫停redo應用。此時可以在備庫上進行恢復,除錯資料,操作完成之後,將資料庫閃回到操作前的狀態(閃回之後,dg會自動同步standby)

 

6 管理影響物理standby的事件

1 建立表空間或資料檔案

  初始化引數standby_file_management用來控制是否自動將primary資料庫增加表空間或資料檔案的改動,傳播到standby伺服器AUTO/MANUAL

AUTO:自動傳播到standby

MANUAL:需要手動複製檔案到standby,並更新控制檔案

1 standby_file_management 設定為auto(主庫)

 

SQL> set sqlprompt "primary>"

primary>show parameter standby_file

 

NAME                                 TYPE                   VALUE

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

standby_file_management              string                 AUTO

SQL> create tablespace new_dg datafile'/u01/app/oracle/oradata/grs/new_dg.dbf' size 10m;

 

Tablespace created.

 

SQL> col tsname for a20

SQL> col dfname for a50

SQL> select ts.name tsname,df.name dfname from v$tablespace ts,v$datafile df

  2  where ts.ts#=df.ts#;

 

TSNAME               DFNAME

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

SYSTEM               /u01/app/oracle/oradata/grs/system01.dbf

UNDOTBS1             /u01/app/oracle/oradata/grs/undotbs01.dbf

SYSAUX               /u01/app/oracle/oradata/grs/sysaux01.dbf

 

21 rows selected.

備庫檢視

SQL> col tsname for a20

SQL> col dfname for a50

SQL> select ts.name tsname,df.name dfname from v$tablespace ts,v$datafile df

  2  where ts.ts#=df.ts#;

 

TSNAME               DFNAME

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

SYSTEM               /u01/app/oracle/oradata/grs/system01.dbf

UNDOTBS1             /u01/app/oracle/oradata/grs/undotbs01.dbf

SYSAUX               /u01/app/oracle/oradata/grs/sysaux01.dbf

USERS                /u01/app/oracle/oradata/grs/users01.dbf

 

20 rows selected.

報錯日誌:

Errors in file /u01/app/oracle/admin/grsdg/bdump/grsdg_dbw0_10650.trc:

ORA-01157: cannot identify/lock data file 20 - see DBWR trace file

ORA-01110: data file 20: '/u01/app/oracle/oradata/grs/SPICEI2I02.dbf'

ORA-27037: unable to obtain file status

Linux Error: 2: No such file or directory

Additional information: 3

Mon May  5 10:41:18 2014

RFS[5]: Archived Log: '/u01/app/oracle/archivelog/1_258_827453919.arc'

Primary database is in MAXIMUM PERFORMANCE mode

RFS[5]: No standby redo logfiles created

待解決::::???

12c dg

SQL> show parameter standby_file

 

NAME                                 TYPE

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

VALUE

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

standby_file_management              string

auto

SQL> create tablespace new_dg2 datafile'/u01/app/oracle/oradata/hongquan/hongquantest/new_dg2.dbf' size 10m;

 

Tablespace created.

 

2 將standby_file_management 設定為manual(主庫)

ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=MANUAL;

在重複上述操作

記錄多了一條,需要重新命名

ALTER DATABASE CREATE DATAFILE ‘/u01/app/oracle/oradata/grs/XXXX’AS

   /u01/app/oracle/oradata/grs/new_dg.dbf

然後重新啟動redo應用

alter database recover managed standby database disconnect from session;

disconnect from session---啟動應用,自動退到命令操作符

 

2 刪除表空間

 

--對於表空間和資料檔案的操作,STANDBY_FILE_MANAGEMENT=AUTO,無須手工干預,

 

3 重新命名資料檔案

 

--需要手工干預,STANDBY_FILE_MANAGEMENT=AUTO/MANUAL

 

在主庫rename datafile檔案,從庫需要手動操作

 

備庫:cancel redo logshutdown,重新命名資料檔案,在startup mount,重啟redo 應用

 

  alter tablespace new_dg2  offline;

 

  mv /u01/app/oracle/oradata/hongquan/hongquantest/new_dg2.dbf  /u01/app/oracle/oradata/hongquan/hongquantest/new_dg2_test.dbf

 

  alter tablespace new_dg2 rename datafile 

 

  '/u01/app/oracle/oradata/hongquan/hongquantest/new_dg2.dbf' to 

 

  '/u01/app/oracle/oradata/hongquan/hongquantest/new_dg2_test.dbf';

 

  alter tablespace new_dg2  online;

 

  alter system switch logfile;

 

  

 

  select name from v$datafile;

 

  alter database recover managed standby database cancel;

 

   mv /u02/app/oracle/oradata/hongquan1/hongquantest/new_dg2.dbf  /u02/app/oracle/oradata/hongquan1/hongquantest/new_dg2_test.dbf

 

----12c,備庫ready only模式,不能改

 

  alter tablespace new_dg2 rename datafile 

 

  '/u02/app/oracle/oradata/hongquan1/hongquantest/new_dg2.dbf' to 

 

  '/u02/app/oracle/oradata/hongquan1/hongquantest/new_dg2_test.dbf';

 

  alter database recover managed standby database disconnect from session;

 

  select name from v$datafile;

 

---12c 線上重新命名資料檔案

 

   ALTER DATABASE MOVE DATAFILE '/u02/app/oracle/oradata/hongquan1/hongquantest/new_dg2.dbf' 

 

   to 

 

  '/u02/app/oracle/oradata/hongquan1/hongquantest/new_dg2_test.dbf';

 

 

 

4 新增或刪除redologs檔案

 

--需要手工干預改檔案的刪除和建立

 

無論主庫端對日誌組或日誌檔案的操作是否傳播到了standby端,也不會影響到standby的執行。

 

在主庫增加或刪除redo logs時,一定記得手工同步相關物理standby中的相關設定,保證standby logprimary redolog多一組操作要將STANDBY_FILE_MANAGEMENT=MANUAL

 

5垮open_resetlogs的應用

1 監控primarystandby庫的事件

 

2 動態效能檢視

1v$managed_standby 顯示物理standby資料庫相關程序的當前狀態

standby>select process,client_process,sequence#,status from v$managed_standby;

ARCH               ARCH                      0 CONNECTED

MRP0               N/A                      37 APPLYING_LOG

RFS                ARCH                      0 IDLE

2 v$archive_dest_status 顯示歸檔檔案路徑配置資訊及redo的應用情況

standby>select dest_name,archived_thread#,archived_seq#,applied_thread#,applied_seq#,db_unique_name from v$archive_dest_status where status='VALID';

 

3v$archived_log 檢查歸檔檔案路徑和建立資訊

standby>select name,creator,sequence#,applied,completion_time from v$archived_log;

4 v$log_history 查詢歸檔歷史

select first_time,first_change#,next_change#,sequence# from v$log_history;

standby>select thread#,max(sequence#) as "last_applied_log" from v$log_history group by thread#;

 

5 檢視物理standby未接受的日誌檔案

standby>select local.thread#,local.sequence# from  

  2  (select thread#,sequence# from v$archived_log where dest_id=1) local

  3  where local.sequence# not in

  4  (select sequence# from v$archived_log where dest_id=2 and thread#=local.thread#);

3 管理歸檔中斷gap

 

 

4 standby的選擇資料保護模式

Primary的修改能否在standby端看到,受幾個方面的影響:

 1:同步模式:預設情況primary端傳送歸檔日誌通過ARCH的方式,只有當primary切換日誌時,產生的歸檔日誌才會傳送到standby端。如果standby端配置了standby redologs檔案,dg支援以lgwr方式傳輸redo資料,這樣primary產生的redo就能及時傳送到standby端。

 2:是否啟動了應用:將redo傳送到standby端,並不代表standby端應用了改redo,必須手動執行命令。預設情況下,物理standby的應用執行是恢復過程,只有當主庫primary庫執行切換操作後,才會對切換產生的歸檔檔案進行應用,在時效上比primary有延後

 3:是否實時應用:standby端配置了standby redologs,並且prim傳輸redo日誌時採用了lgwr同步傳輸的方式,這是redo傳輸實時(asyncsync

1 Dataguard 服務

1 redo傳輸服務rts

1 認識LOG_ARCHIVE_DEST_N引數

LOG_ARCHIVE_DEST_N1-10)定義redo 傳送的目的地,通過location或者service 來指定本地還是遠端serviceLOG_ARCHIVE_DEST_N都有對應的LOG_ARCHIVE_DEST_STATE_N用來指定LOG_ARCHIVE_DEST_N的屬性是否生效,有4種屬性

Enable:預設,表示允許傳輸

Defer:屬性有效,但暫不使用該歸檔路徑

Alternate:禁止傳輸,其他的失敗,會自動enable

Reset:與defer相似,

LOG_ARCHIVE_DEST_1='LOCATION=/u01/app/oracle/archivelog/ VALID_FOR=(ALL_LOGFILES,ALL_ROLES)

LOG_ARCHIVE_DEST_STATE_1='ENABLE'

  用過service關鍵字指定redo的傳輸

 LOG_ARCHIVE_DEST_2='SERVICE=‘’

log_archive_dest_state_2='DEFER'

  可以通過alter system set來修改2個引數,修改會在下次日誌切換時生效

Alter system set LOG_ARCHIVE_DEST_1='LOCATION=/u01/app/oracle/archivelog/ VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=grs'

SQL> col name for a15

SQL> col value for a20

SQL> set pageline 1000

SP2-0158: unknown SET option "pageline"

SQL> set pagesize 1000

SQL> set linesize 1000

SQL> show parameter log_archive_dest

 

NAME                                 TYPE                   VALUE

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

log_archive_dest                     string

log_archive_dest_1                   string                 LOCATION=/u01/app/oracle/archi

                                                            velog/ VALID_FOR=(ALL_LOGFILES

                                                            ,ALL_ROLES) DB_UNIQUE_NAME=grs

log_archive_dest_10                  string

log_archive_dest_2                   string                 SERVICE=grsdg LGWR ASYNC VALID

                                                            _FOR=(ONLINE_LOGFILES,PRIMARY_

                                                            ROLE) DB_UNIQUE_NAME=grsdg

2 使用ARCn程序傳送redo資料

  預設情況下,使用ARCn程序傳送redo資料,(只支援最高效能保護模式),在其他模式下需要lgwr傳輸,可以增加arcn程序

Alter system set log_archive_max_process=n;(0-30)

 ARCHn歸檔過程,

 Primary發生日誌切換時,就會產生歸檔,:分別在primary跟standby

 一旦arc0完成線上日誌的歸檔,arc1就開始傳輸歸檔中的redo到standby(假設有2個程序)

本地歸檔與遠端歸檔並無聯絡,

lgwr程序傳輸redo

Lgwr程序不需要等日誌完成切換或歸檔才傳輸,standby資料庫的lgwr程序會選擇一個standby redologs檔案對映primary資料庫當前活動的聯機重做日誌檔案,一旦primary有redo產生,根據引數中的sync或async來確定同步或非同步方式傳送redo

1 lgwr同步redo流程

*.LOG_ARCHIVE_DEST_1='LOCATION=/u01/app/oracle/archivelog/ VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=grs'

*.LOG_ARCHIVE_DEST_2='SERVICE=grsdg LGWR SYNC new_timeout=30

*.LOG_ARCHIVE_DEST_STATE_1='ENABLE'

*.log_archive_dest_state_2='DEFER'

---- new_timeout 連線超時,會返回錯誤

 

lgwr不同步歸檔流程

*.LOG_ARCHIVE_DEST_1='LOCATION=/u01/app/oracle/archivelog/ VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=grs'

*.LOG_ARCHIVE_DEST_2='SERVICE=grsdg LGWR ASYNC

*.LOG_ARCHIVE_DEST_STATE_1='ENABLE'

*.log_archive_dest_state_2='DEFER'

4安全傳輸redo

 Redo傳輸的過程中使用密碼驗證的方式,保證primary跟standby的sys密碼一樣

 

什麼時候傳送

 1 VALID_FOR屬性指定傳輸及接受物件

VALID_FOR=(ALL_LOGFILES,ALL_ROLES)

VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)

 2 通過db_unique_name指定資料庫

DB_UNIQUE_NAME='grs'

LOG_ARCHIVE_CONFIG='DG_CONFIG=(grs,grsdg)'

3 出錯了怎麼辦

LOG_ARCHIVE_DEST_1有幾個屬性來控制出現錯誤時採取的措施

1 reopen 指定時間後再次嘗試歸檔

Reopen=seconds(300)預設

LOG_ARCHIVE_DEST_2='SERVICE=grsdg LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=grsdg reopen=100'

 2 alternate指定替補歸檔路徑

LOG_ARCHIVE_DEST_1='LOCATION=/u01/app/oracle/archivelog/  alternate=LOG_ARCHIVE_DEST_2'

LOG_ARCHIVE_DEST_STATE_1='ENABLE'

LOG_ARCHIVE_DEST_2='LOCATION=/u01/app/oracle/archivelog2/'

LOG_ARCHIVE_DEST_STATE_2='ALTERNATE'

3 max_failure控制最大失敗次數

 LOG_ARCHIVE_DEST_2='SERVICE=grsdg LGWR ASYNC reopen=100 max_failure=3'

4 管理日誌檔案

預設情況下,本地的歸檔都是放在LOG_ARCHIVE_DEST_2='location的路徑下

設定是否可以被重用

設定控制檔案中記錄重用及增長規則

多個standby間共享檔案路徑

Dependency屬性

 

2 log應用服務(log apply service)

Data guard用過redo來維持primary跟standby之間的一致性

Redo:物理standby專用,通過介質恢復的方式保持一致

Sql:邏輯standby專用,通過logminer分析sql語句,在standby端執行

因此物理的standby必須是mount狀態(10g),邏輯可以是read only

1 redo實時應用

Redo不需要等歸檔完成了,接收到即可應用,standby端配置了standby redologs,物理實時啟動,

alter database recover managed standby database using current logfile

2 redo延遲應用

LOG_ARCHIVE_DEST_2='SERVICE=grsdg ARCH VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=grsdg DELAY=15'

  DELAY 預設30分鐘

alter database recover managed standby database nodelay disconnect;

3應用redo到standby資料庫

啟動redo應用

alter database recover managed standby database disconnect;

停止redo應用

alter database recover managed standby database cancel;

 

4選擇資料庫保護模式

1 檢視當前資料庫的保護模式

select db_unique_name,open_mode,database_role,switchover_status,

dataguard_broker,protection_mode,remote_archive,guard_status from 

v$database;

 

2 修改初始化引數

Alter system set

3設定新的保護模式,並重啟db

alter database set standby database to maximize availability