oracle data guard

1.配置oracle環境變量


export ORACLE_BASE=/export/home/oracle/ora12c    (對應oracle安裝路徑)
export ORACLE_HOME=$ORACLE_BASE/product/12.1.0/dbhome_1
export ORACLE_SID=orcl
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
export PATH=$ORACLE_HOME/bin:/bin:/sbin:/usr/ccs/bin:/usr/local/bin
export TMPDIR=/var/tmp
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$ORACLE_HOME/network/lib:/lib64:/usr/local/lib
umask 022 


2.開啓監聽


lsnrctl start


3.配置primary的listener.ora 和 tnsnames.ora


======================================================================================================
(/export/home/oracle/ora12c/product/12.1.0/db_home1/network/admin/listener.ora)
listener.ora


SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = /export/home/oracle/ora12c/product/12.1.0/db_home1)
      (PROGRAM = extproc)
    )
    (SID_DESC =
      (ORACLE_HOME = /export/home/oracle/ora12c/product/12.1.0/db_home1) 
      (SID_NAME = orcl)
    )
  )




LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.55)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )
  
=================================================================================================
 
  tnsnames.ora
  
  dbpry =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.55)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )


LISTENER_ORCL =
  (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.55)(PORT = 1521))




dbstb =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.231)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )


ORCL =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.55)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )
===================================================================================================


將修改好的 listener.ora 和 tnsnames.ora 拷貝到 standby (修改listener.ora相應的路徑)


scp -r listener.ora tnsnames.ora  192.168.1.118:/export/home/oracle/ora12c/product/12.1.0/dbhome_1/network/admin/


重新啓動lsnrctl start --l lsnrctl stop
primary-----
$ sqlplus /nolog
SQL> conn sys/oracle@dbstb as sysdba
Connected to an idle instance.


standby----
$ sqlplus /nolog
SQL> conn sys/oracle@dbpry as sysdba
Connected.




4 強制primary force logging


SQL> alter database force logging;
SQL> create pfile from spfile;


5.創建pwd文件
orapwd file=orapwddbpry password=oracle entries=3 


6.修改initorcl.ora
添加-----------------




#DG CONFIG


log_archive_dest_1='LOCATION=/export/home/oracle/ora12c/fast_recovery_area/DBPRY/archivelog’ 


log_archive_dest_state_1=enable
log_archive_dest_2='SERVICE=dbstb' (standby unique id standby設置相反)
log_archive_dest_state_2=enable
log_archive_start=true
log_archive_format='%t_%s_%r.arc'
log_archive_max_processes=2
fal_client=dbpry (primary unique id  此參數在standby是dbstb)
fal_server=dbstb (standby unique id  此參數在standby是dbpry)
db_unique_name=dbpry (pry unique id  此參數在standby是dbstb)


***修改log_archive_dest_1 的值 (可以使用archive log list查找) 如果不存在則需要創建***






7.創建standby controlfile
startup mount;


alter database archivelog;


sql>archive log list 
Database log mode              Archive Mode
Automatic archival             Enabled(必須是enable模式)
Archive destination            /RECO/oreo/(歸檔路徑)
Oldest online log sequence     3
Next log sequence to archive   5
Current log sequence           5


sql>shutdown immediate;


sql>startup mount;
sql> alter database create standby controlfile as '/export/home/oracle/ora12c/oradata/DBPRY/controlfile/standby.ctl';
sql> alter database create standby controlfile as '/export/home/oracle/ora12c/fast_recovery_area/DBPRY/controlfile/standby.ctl';
sql>shutdown immediate;










8.拷貝數據文件到standby
standby /export/home/oracle/ora12c/oradata 存放數據庫數據


1:$ scp -r File-name standby-IP:/export/home/oracle/ora12c/oradata


如scp -r ORCL 192.168.1.233:/export/home/oracle/ora12c/oradata(檢查目錄結構,看是否在ORCL下)


standby  /export/home/oracle/ora12c/admin/ 


2:$scp -r primarySID standby-IP:/export/home/oracle/ora12c/admin/
如scp -r orcl 192.168.1.233:/export/home/oracle/ora12c/admin/(檢查目錄結構,看是否在orcl下)


3:$scp -r initora.ora orapworcl standby-IP:/export/home/oracle/ora12c/product/12.1.0/db_home1/dbs
  如scp -r initora12c1.ora orapwora12c1 192.168.1.118:/export/home/oracle/ora12c/product/12.1.0/dbhome_1/dbs


4:$ scp -r * 192.168.1.233:/export/home/oracle/ora12c/fast_recovery_area/


***需要將新的control file 替換原來的control 否則回報 ctl inconsistent **


standby 查看文件名 
$ls /export/home/oracle/ora12c/product/12.1.0/dbhome_1/dbs


$ mv initora12c1.ora initorcl.ora (initSID.ora)
$ mv orapwora12c1 orapworcl (oraSID)


$vi initorcl.ora  查看log_archive_dest_1路徑是否存在不存在則創建,檢查其他參數是否正確
====================================
#DG CONFIG


log_archive_dest_1='LOCATION=/export/home/oracle/ora12c/fast_recovery_area/DBPRY/archivelog' 


log_archive_dest_state_1=enable
log_archive_dest_2='SERVICE=dbpry'
log_archive_dest_state_2=enable
log_archive_start=true
log_archive_format='%t_%s_%r.arc'
log_archive_max_processes=2
fal_client=dbstb
fal_server=dbpry
db_unique_name=dbstb 
===================================================






$ cd /export/home/oracle/ora12c/oradata/
$ cp standby.ctl controlfile/


$ ls
 將新加入的ctl換成原來的文件名,備份原來的ctl文件或者刪除
 
 9.啓動主備庫
 primary--
 xxx/dbs$ mv spfileSID.
 
 $ sqlplus /nolog
 sql>conn / as sysdba
 
sql> create spfile from pfile;
sql>startup




standby---
1。查看listener 啓動 lsnrctl start


sql> create spfile from pfile; 
sql> startup nomount;
sql> alter database mount standby database;
sql> select name,database_role from v$database ;
sql> alter database recover managed standby database disconnect from session;(不是實時應用 延遲30分鐘)


sql> select sequence#,first_time,next_time from v$archived_log order by sequence#;
 
 sql> select sequence#,applied from  v$archived_log order by sequence#;


sql> alter database recover managed standby database cancel;


sql> alter database open read only;
sql> alter system archive log current;




打開實時應用redo特性:
    物理standby: ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE;
    邏輯standby:ALTER DATABASE START LOGICAL STANDBY APPLY IMMEDIATE;


primary--
加速數據傳遞
sql>alter system switch logfile;








常見錯誤
1.shm max xxx======


#vi system
    添加如下內容
    set noexec_user_stack=1
    set semsys:seminfo_semmni=300
    set semsys:seminfo_semmns=1050
    set semsys:seminfo_semmsl=400
    set semsys:seminfo_semvmx=32767
    set shmsys:shminfo_shmmax=4294967295
    set shmsys:shminfo_shmmin=1
    set shmsys:shminfo_shmmni=300
    set shmsys:shminfo_shmseg=30


2.OS audit file could not be created;
路徑沒正確


3.
ERROR at line 1:
ORA-10458: standby database requires recovery
ORA-01152: file 1 was not restored from a sufficiently old backup
ORA-01110: data file 1:


這種情況,可能是兩個原因造成
第一個可能是參數問題
第二個 就是主庫在你RESTORE 到備庫的時候進行了 歸檔, 而這個歸檔文件恰恰沒有傳輸過來,
控制文件的信息記錄了這個,但是沒有這個文件 這個時候 就需要把歸檔目錄下 缺失的文件拷貝到備庫上,進行RECOVER即可。


(查看歸檔路徑是否正確   $archive log list )






ln -s 目標file 指定file (鏈接目標file到指定file)




ERROR at line 1:
ORA-10456: cannot open standby database; media recovery session may be in
progress
SQL> alter database recover managed standby database cancel;
Database altered.


SQL> alter database open;
Database altered.


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






DGMGRL> show configuration;


Configuration - prod


  Protection Mode: MaxAvailability
  Databases:
    prod - Primary database
    sbdb - Physical standby database
      Error: ORA-16766: Redo Apply is stopped


Fast-Start Failover: DISABLED


Configuration Status:
ERROR


/* 以上可以看到物理備庫SBDB上的REDO APPLY被停止了,我們可以在DGMGRL中啓動其REDO APPLY */


DGMGRL> edit database sbdb set state='APPLY-ON';
Succeeded.


DGMGRL> show configuration;












*****************data backup***************






數據庫備份**********************************




rman target /


run
{
 allocate channel c0 device type disk;
 allocate channel c1 device type disk;
 CONFIGURE CONTROLFILE AUTOBACKUP ON;
 CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/RECO/rman/%F';
 backup  database format '/RECO/rman/ora11g_full_db_%d_%T_%u.bak';
 BACKUP ARCHIVELOG ALL FORMAT '/RECO/rman/ora11g_arc_%s_%p_%t.bak';
 }    
   
 
   
RMAN> list backup of controlfile;


using target database control file instead of recovery catalog


List of Backup Sets
===================




BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
5       Full    9.36M      DISK        00:00:05     11-JAN-14      
        BP Key: 5   Status: AVAILABLE  Compressed: NO  Tag: TAG20140111T090409
        Piece Name: /RECO/rman/c-1347530101-20140111-00
  Control File Included: Ckp SCN: 1050232      Ckp time: 11-JAN-14
  
 
[oracle@oreopdb rman]$ scp * 192.168.1.233:/RECO/rman
oracle@oreostb's password: 
c-1347530101-20140111-00                                                                          100% 9600KB   9.4MB/s   00:01    
ora11g_arc_3_1_836557446.bak                                                                      100% 8990KB   8.8MB/s   00:00    
ora11g_arc_4_1_836557446.bak                                                                      100% 3473KB   3.4MB/s   00:01    
ora11g_full_db_OREO_20140111_01otpmf9.bak                                                         100%  602MB   8.6MB/s   01:10    
ora11g_full_db_OREO_20140111_02otpmf9.bak                                                         100%  458MB   6.5MB/s   01:10






#################################################
主庫duplicate target database for standby


[oracle@oreopdb ~]$ rman target /


Recovery Manager: Release 11.2.0.3.0 - Production on Sat Jan 11 09:14:07 2014


Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.


connected to target database: OREO (DBID=1347530101)


RMAN> connect auxiliary sys/oracle@dbstb


connected to auxiliary database: OREO (not mounted)


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


將主庫的LOG_ARCHIVE_DEST_STATE_2設置爲ENABLE


ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2='ENABLE';


ALTER SYSTEM SET log_archive_dest_state_2='ENABLE' SCOPE=BOTH;




添加standby redo log
SQL> select member from v$logfile;


MEMBER
--------------------------------------------------------------------------------
/ORADATA/oreopdb/redo03.log
/ORADATA/oreopdb/redo02.log
/ORADATA/oreopdb/redo01.log
         
SQL>SELECT GROUP#, BYTES FROM V$STANDBY_LOG;
no rows selected


#FOR PRIMARY
ALTER DATABASE ADD STANDBY LOGFILE GROUP 4 '/export/home/oracle/ora12c/oradata/DBPRY/sredo04.log' size 50M;
ALTER DATABASE ADD STANDBY LOGFILE GROUP 5 '/export/home/oracle/ora12c/oradata/DBPRY/sredo05.log' size 50M;
ALTER DATABASE ADD STANDBY LOGFILE GROUP 6 '/export/home/oracle/ora12c/oradata/DBPRY/sredo06.log' size 50M;
ALTER DATABASE ADD STANDBY LOGFILE GROUP 7 '/export/home/oracle/ora12c/oradata/DBPRY/sredo07.log' size 50M;
ALTER DATABASE ADD STANDBY LOGFILE GROUP 8 '/export/home/oracle/ora12c/oradata/DBPRY/sredo08.log' size 50M;
 


#FOR STANDBY
SQL> select member from v$logfile;


MEMBER
--------------------------------------------------------------------------------
/ORADATA/oreostb/redo03.log
/ORADATA/oreostb/redo02.log
/ORADATA/oreostb/redo01.log




ALTER DATABASE ADD STANDBY LOGFILE GROUP 4 '/export/home/oracle/ora12c/oradata/DBPRY/sredo04.log' size 50M;
ALTER DATABASE ADD STANDBY LOGFILE GROUP 5 '/export/home/oracle/ora12c/oradata/DBPRY/sredo05.log' size 50M;
ALTER DATABASE ADD STANDBY LOGFILE GROUP 6 '/export/home/oracle/ora12c/oradata/DBPRY/sredo06.log' size 50M;
ALTER DATABASE ADD STANDBY LOGFILE GROUP 7 '/export/home/oracle/ora12c/oradata/DBPRY/sredo07.log' size 50M;
ALTER DATABASE ADD STANDBY LOGFILE GROUP 8 '/export/home/oracle/ora12c/oradata/DBPRY/sredo08.log' size 50M;
 


**********************************




 Oracle 10g R2 實現dataguard實時日誌應用 




 在primary   select dest_name,status,recovery_mode from v$archive_dest_status; 檢查是否是實時
 
SQL> select dest_name,status,recovery_mode from v$archive_dest_status
  2  ;


DEST_NAME
--------------------------------------------------------------------------------
STATUS             RECOVERY_MODE
------------------ ----------------------------------------------
LOG_ARCHIVE_DEST_1
VALID              MANAGED REAL TIME APPLY
 
SQL> show parameter log_archive_dest_2 (查看是否設置)


NAME                                 TYPE
------------------------------------ ----------------------
VALUE
------------------------------
log_archive_dest_2                   string
service=dbstb lgwr async
 
 
1.在主機端:設置歸檔方法: alter system set log_archive_dest_2='service=dbstb lgwr SYNC '; 其中dest爲備機的tnsname,其他爲歸檔關鍵字.




2.在備機端: 添加standby logfile :   使用此命令查看是否設置( SELECT GROUP#, BYTES FROM V$STANDBY_LOG; )
alter database add standby logfile
 group 5 '/db1/oradata/bbs/redo105.log' size 104858112 reuse,
 group 6 '/db1/oradata/bbs/redo106.log' size 104858112 reuse;
   
   
   
3.在備機端:啓動數據庫到實時恢復管理模式,
SQL> select process,status from v$managed_standby;


PROCESS            STATUS
------------------ ------------------------
ARCH               CONNECTED
ARCH               CONNECTED     將日誌進行歸檔
MRP0               APPLYING_LOG   Managed recovery process (MRP)將歸檔文件應用到備用機上(正在使用,如沒有則執行下面的command) 
RFS                IDLE           Remote file server (RFS) 負責從主數據庫上接收歸檔文件
RFS                IDLE




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








--主要看RFS和MRP0
--RFS(Remote File Server)進程:接收primary數據庫的redo,保存在standby redo log(arch模式不寫standby,直接保存歸檔)
    狀態值有:
                     WRITING:進程活躍,正在把redo寫到歸檔日誌中
                     IDLE:空閒,沒有日誌同步
                     RECEIVING:收聽網絡通信
                     OPENING:正在打開歸檔日誌
--MRP0(Manager Recover Process):負責日誌應用個,只要啓用到日誌應用纔會有這個服務。在物理standby中是MRP,在邏輯standby中是LSP。
狀態值:
                        WAIT_FOR_LOG:等待日誌完成
                        APPLYING_LOG:正在應用日誌




從最大performance到最大availability步驟
1、修改主數據庫歸檔參數
alter system set log_archive_dest_2='service=stby LGWR SYNC AFFIRM valid_for=(online_logfile,primary_role) db_unique_name=stby'
2、重啓數據庫到mount狀態,然後執行
SQL>  alter database set standby database to maximize availability;
SQL> select protection_mode from v$database;
PROTECTION_MODE
--------------------
MAXIMUM AVAILABILITY
這個模式對於logical standby比較有用,如果在logical standby上面執行了Real-Time Apply
SQL>alter database start logical standby apply immediate
得到的數據是Real-Time,正常情況下數據和主數據庫完全同步!




查看是否歸檔 select name,log_mode from v$database;










 1.改變非歸檔模式到歸檔模式:
 
  1)SQL> conn / as sysdba (以DBA身份連接數據庫)
 
  2)SQL> shutdown immediate; (立即關閉數據庫)
 
  3)SQL> startup mount (啓動實例並加載數據庫,但不打開)
 
  4)SQL> alter database archivelog; (更改數據庫爲歸檔模式)
 
  5)SQL> alter database open; (打開數據庫)
 
  6)SQL> alter system archive log start; (啓用自動歸檔)
 
  7)SQL> exit (退出)




 2.改變歸檔模式到非歸檔模式:
 
  1)SQL>SHUTDOWN NORMAL/IMMEDIATE;
 
  2)SQL>STARTUP MOUNT;
 
  3)SQL>ALTER DATABASE NOARCHIVELOG;
 

  4)SQL>ALTER DATABASE OPEN;


如果還有什麼疑問可以給我發QQ消息  394818428




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章