ORACLE DG 11G 搭建

huzhichengforce發表於2015-03-24
1、連續三天搭建了三套DG 每天一套下面記錄搭建過程

ORACLE 11g DG 搭建

前言

1、裝DG 可以跨平臺跨位數(32/64)但是不能跨版本

211G DG 可以已read only 狀態開啟分擔備份,查詢報表等業務。

311G DG 可以透過RMAN DUPLICATE 方式建立(本次採用的建立方式)

4、資料庫的db_name必須相同,db_unique_name必須不同

5、監聽必須是靜態監聽
6、主機/etc/hosts 需配置好如
192.168.88.22 dg2.localdomain dg2
192.168.88.21 dg1.localdomain dg1

規劃

主機名稱

DG1

DG2

作業系統

Redhat 5

Redhat 5

ORACLE 資料版本

11G R2

11G R2

資料檔案位置

/u01/oradata/dg1

/u01/oradata/dg2

例項名稱

dg1(db_unique_name)

dg2(db_unique_name)

Tnsnames名稱

DG1DG2TNSNAME裡面內容一摸一樣即可)

DG2,DG1(TNSNAME裡面內容一摸一樣即可)

搭建方式

RMAN DUPLICATE

實施過程

前提:主庫已經建立好(現有業務系統)

一、主庫:

1、  修改監聽為靜態註冊如下(修改完後需要重新啟動)

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.233.200)(PORT = 1521))--IP
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = dg1)----你的例項名
     (ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)---你的ORACLE_HOME
      (SID_NAME = dg1)----例項名
    )
  )

2、  修改tnsnames.ora

 

DG1 =

  (DESCRIPTION =

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

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = dg1)

    )

  )

DG2 =

  (DESCRIPTION =

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

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = dg2)

    )

  )

3、  確認主庫為歸檔模式(不是需自行修改參考)

SQL> archive log list;

Database log mode         Archive Mode

Automatic archival          Enabled

Archive destination         /data/arch

Oldest online log sequence     87

Next log sequence to archive   89

Current log sequence               89

http://www.blogjava.net/freeman1984/archive/2011/05/17/350375.html參考修改方式

4、  將主庫設定為force logging

Sql>alter database force logging;

5、  新增standby redo log

alter database add standby logfile group 4 '/u01/oradata/dg1/standby_redo04.log' size 50M;

alter database add standby logfile group 5 '/u01/oradata/dg1/standby_redo05.log' size 50M;

alter database add standby logfile group 6 '/u01/oradata/dg1/standby_redo06.log' size 50M;

alter database add standby logfile group 7 '/u01/oradata/dg1/standby_redo07.log' size 50M;

路徑自行修改為自己的存放路徑

6、  設定DB 引數為生成備庫的pfile 做準備

alter system set db_unique_name='dg1' scope=spfile;  --

alter system set log_archive_config='DG_CONFIG=(DG1,DG2)';  ----對應TNS裡面的

alter system set log_archive_dest_1='LOCATION=/data/arch valid_for=(all_logfiles,all_roles) db_unique_name=dg1' scope=spfile; ---/data/arch 主庫的歸檔路徑一設定

alter system set log_archive_dest_2='SERVICE=dg2 lgwr async valid_for=(online_logfile,primary_role) db_unique_name=dg2'; --主庫的歸檔路徑通向主機二

alter system set fal_client='dg1';  --客戶端

alter system set fal_server='dg2';  --服務端 備庫是調換過來的

alter system set standby_file_management=auto;   

alter system set db_name=dg  scope=spfile     ; --設定db_name 主庫和備庫必須相同,這裡修改完主庫後等會建立的pfile 裡面會體現出來 在備庫引數的時候就不需要修改這個引數了· 主庫修改完畢

7、重啟資料庫

sql>Shutdown immediate

sql>startup

8、建立備庫所使用的引數檔案

sql>create pfile=’/u01/init.ora’ 將這個檔案複製到備庫

以上操作都是主庫操作!

二、備庫

前提:備庫已經安裝好資料庫軟體(安裝好軟體,監聽配置了,沒有建立例項)

1、修改監聽為靜態註冊(修改完後需要重新啟動)(引數配置和主庫差不多)

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.233.200)(PORT = 1521))--IP
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = dg2)----你的例項名
     (ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)---你的ORACLE_HOME
      (SID_NAME = dg2)----例項名
    )
  )

2、修改tnsnames.ora

 

DG1 =

  (DESCRIPTION =

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

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = dg1)

    )

  )

DG2 =

  (DESCRIPTION =

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

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = dg2)

    )

  )

使用TNSPING 看是否配置成功

tnsping DG1
tnsping DG2

5、修改pfile引數(以下為修改完的完整的)

*.audit_file_dest='/u01/admin/dg2/adump'----(警告日誌目錄)備庫上需要建立相應目錄

*.audit_trail='db'

*.compatible='11.2.0.0.0'

*.control_files='/u01/oradata/dg2/control01.ctl','/u01/flash_recovery_area/dg2/control02.ctl'---(備庫的控制檔案存放位置)備庫上需要相應建立目錄

*.db_block_size=8192

*.db_domain=''

*.db_name='dg'----不用修改主庫和備庫需相同

*.db_recovery_file_dest='/u01/flash_recovery_area'--備庫的恢復目錄

*.db_recovery_file_dest_size=3565158400

*.db_unique_name='dg2'----備庫唯一標識

*.diagnostic_dest='/u01'

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

*.fal_client='dg2'客戶端

*.fal_server='dg1'服務端 對主庫是反過來的

*.log_archive_config='DG_CONFIG=(DG1,DG2)'

*.log_archive_dest_1='LOCATION=/data/arch valid_for=(all_logfiles,all_roles) db_unique_name=dg2'----備庫的歸檔路徑一

*.log_archive_dest_2='SERVICE=dg1 lgwr async valid_for=(online_logfile,primary_role) db_unique_name=dg1'----備庫的歸檔路徑二指向主庫

*.log_archive_dest_state_1='ENABLE'

*.log_archive_dest_state_2='ENABLE'

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

*.log_file_name_convert='/u01/oradata/dg1','/u01/oradata/dg2'----資料檔案存放位置不同需做轉換這裡是redo log 不是archive log

*.db_file_name_convert='/u01/oradata/dg1','/u01/oradata/dg2'----主機存放資料檔案的位置和備庫的不同做轉換

*.open_cursors=300

*.pga_aggregate_target=310378496

*.processes=150

*.remote_login_passwordfile='EXCLUSIVE'

*.sga_target=931135488

*.standby_file_management='AUTO'

*.undo_tablespace='UNDOTBS1'

6、建立口令檔案

orapwd file='/u01/oracle/dbs/orapwdg2’ password=oracle 需要和主庫的sys密碼相同

7. 使用修改好的pfile啟動到nomount狀態

Sqlplus / as sysdba

Sql>create spfile from pfile=’/u01/initdg2.ora’;

Sql>startup nomount

備庫修改完畢!

三:RMAN DUPLICATE 複製庫

在主庫:

1、進入rman

$ rman target sys/oracle@DG1 auxiliary 2

恢復管理器: Release 11.2.0.3.0 - Production on 星期日 8月 4 00:53:40 2013
Copyright (c) 1982, 2011,  and/or its affiliates.  All rights reserved.
已連線到目標資料庫: ORCL (DBID=1350215700)
已連線到輔助資料庫: ORCL (nomount)

2、開始複製庫:
RMAN> duplicate target database for standby nofilenamecheck from active database;
等待完成

Rman>exit;

3. 檢視備庫狀態
說明:duplicate資料庫之後,備庫只是處於mount狀態,檢視備庫狀態。
[oracle@slave orcl]$ sqlplus /nolog
SQL*Plus: Release 11.2.0.3.0 Production on
星期日 8 4 01:09:07 2013
Copyright (c) 1982, 2011, Oracle.  All rights reserved.
SQL> conn / as sysdba;
已連線。

# 檢視備庫狀態
SQL>  select open_mode,database_role,db_unique_name from v$database;
OPEN_MODE          DATABASE_ROLE    DB_UNIQUE_NAME
-------------------- ---------------- ------------------------------
MOUNTED            PHYSICAL STANDBY DG
 
4.
將備庫置與應用日誌模式狀態
SQL> alter database recover managed standby database using current logfile disconnect from session;  
Database altered.  
SQL> select open_mode,database_role,db_unique_name from v$database;
OPEN_MODE            DATABASE_ROLE    DB_UNIQUE_NAME
-------------------- ---------------- ------------------------------
MOUNTED              PHYSICAL STANDBY DG
 
5.
驗證物理備庫日誌應用
1
)主庫上操作
SQL> conn / as sysdba;

Sql>create tablespace hzwsjdata01  datafile ‘/u01/oradata/dg1/test.dbf’ size100M;
SQL> create user hzwsj  identified by hzwsj  default tablespace hzwsjdata01;
使用者已建立。
SQL> grant resource,connect to hzwsj  ;
授權成功。
SQL> conn hzwsj/ hzwsj
已連線。
SQL> create table test ( id number);
SQL> insert into test values ( 0 );
SQL> commit;

2)備庫上驗證
sqlplus hzwsj/hzwsj

Sql>select * from test;

四、備註:

select open_mode,database_role,db_unique_name from v$database;

alter database recover managed standby database using current logfile disconnect from session; 

select sequence#,first_time,next_time,applied from v$archived_log order by sequence#;
以下為參考資料
說明: IN-MEMORY11G的新特性。
 
五、將備庫置於Active DataGuard模式,體驗實時查詢

Oracle 11g之前,物理備庫(physical Standby)在應用redo的時候,資料庫需要處於mount狀態。從11g開始,應用redo的時
候,物理備庫可以處於read-only模式,這就稱為Active Data Guard 。透過Active Data Guard,可以在物理備庫進行查詢或者
匯出資料,從而減少對主庫的訪問和壓力。

1. 備庫上操作
1)
檢視備庫當前狀態 mount
SQL> select open_mode,database_role,db_unique_name from v$database;
OPEN_MODE            DATABASE_ROLE    DB_UNIQUE_NAME
-------------------- ---------------- ------------------------------
MOUNTED              PHYSICAL STANDBY DG

2) 取消備庫的自動恢復

SQL> alter database recover managed standby database cancel;
資料庫已更改。

3) OPEN備庫為只讀模式(Dataguard只能啟動到readonly模式)

SQL> alter database open;
資料庫已更改。

SQL> select open_mode from v$database;

OPEN_MODE
--------------------
READ ONLY

4)開啟實時應用狀態模式

SQL> alter database recover managed standby database using current logfile disconnect;
資料庫已更改。

SQL> select open_mode,database_role,db_unique_name from v$database;
OPEN_MODE            DATABASE_ROLE    DB_UNIQUE_NAME
-------------------- ---------------- ------------------------------
READ ONLY WITH APPLY PHYSICAL STANDBY DG
 
2.
主庫上操作執行DDL,DML操作
# su - oracle
$ sqlplus /nolog
SQL> conn / as sysdba;
SQL> create tablespace abc datafile '/u01/app/oracle/oradata/orcl/abc.dbf' size 10m autoextend on next 10m;
表空間已建立。
SQL> conn abc/abc
已連線。
SQL> insert into abc values (1 , 'bbb');
已建立 1 行。
SQL> commit;
提交完成。
SQL>

3. 備庫上檢視
SQL> select name from v$tablespace;
NAME
------------------------------
SYSTEM
SYSAUX
UNDOTBS1
USERS
TEMP
ABC
已選擇6行。

SQL> conn abc/abc;
已連線。
SQL> select * from abc;
        ID NAME
---------- ----------
        0 aaa
        1 bbb

主備的修改很快在備庫上應用。

五 維護:

Oracle 11G DataGuard重啟詳細過程

 場景,重啟資料庫,不重啟linux系統,所以不用考慮監聽程式,

 1 資料庫關閉

 1.1 關閉主庫

 SHUTDOWN IMMEDIATE;

 1.2 關閉備庫

ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;

SHUTDOWN IMMEDIATE;

資料庫啟動,

 開啟的時候先開備庫啟動備庫監聽,再開主庫

 2.1 啟動備庫

 #STARTUP MOUNT;

 # ALTER DATABASE OPEN;

 # 這裡不用設定歸檔,歸檔設定一次是永久生效的,直接startup啟動就行

2.2 啟動主庫

 STARTUP ;

 SQL> STARTUP ;

2.3 啟動備庫應用

alter database recover managed standby database using current logfile disconnect;


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26764973/viewspace-1472490/,如需轉載,請註明出處,否則將追究法律責任。

相關文章