RAC (oracle應用叢集) 互相備份
DATAGARD (災備) 資料備援
-----------------
Data Guard三種保護模式
Oracle Data Guard為我們提供了非常人性化的三種保護模式,其目的應用于不同的保護級别和場合,存在的目的就是讓我們的資料庫,健健康康活着,創造出自己的價值
1)保護最大化:主庫與備庫實時同步資料,如果主庫挂了,備庫也不能前進,等主庫好了,備庫才能前進(在寫入主庫的redo日志時同時寫入備庫redo日志,并且保證至少有一個備庫redo日志可用【當你有多個備庫時】),最大限度的保證資料的完整性,不允許丢資料。實際生産很少用
2)可用最大化:主庫與備庫實時同步資料,當網絡或備庫出現問題時,不影響主庫的工作
而是轉換為“性能最大化”模式,等備庫恢複正常後,再轉換為可用最大化模式。實際生産很少用
3)性能最大化:主庫與備庫是異步傳輸資料(定期傳日志),保證主庫的性能最好,如果主庫挂了,盡最大努力恢複備庫。實際生産很多用
總結:最大保護和最大可用都需要至少一個備庫的redo日志可用。最大性能有可能丢資料,隻能盡最大努力去恢複備庫
1.解除安裝8.2 上的oracle
[oracle@sq18 ~]$ /oracle/app/oracle/product/10.2.0/db_1/bin/localconfig delete
(擷取解除安裝資訊)
[oracle@sq18 ~]$ cd $ORACLE_HOME/bin
[oracle@sq18 bin]$ su root
[root@sq18 bin]# /oracle/app/oracle/product/10.2.0/db_1/bin/localconfig delete
(删除本地配置,第二行報錯不影響)
[root@sq18 bin]# rm -rf /etc/oraInst.loc /etc/oratab
[root@sq18 bin]# rm -rf /etc/oracle/
[root@sq18 bin]# rm -rf /usr/local/bin/coraenv /usr/local/bin/dbhome /usr/local/bin/oraenv
[oracle@sq ~]$ rm -rf $ORACLE_BASE/*
2.主機8.2重新安裝
[oracle@sq ~]$ vi .bash_profile
ORACLE_SID=TEST
(把之前配置好的sid改為8.5一樣的TEST)
oracle 登陸重新安裝
./runInstaller
3.重裝完後
$ cd $ORACLE_HOME/dbs
沒有spfile
--------------------------------------
主庫8.2
1.确認為歸檔模式
2.确認主庫強制寫日志
SQL> select force_logging from v$database;
(所有sql語句nologging操作時 也會強制寫日志)
SQL> alter database force logging;
3.修改主備資料庫的參數檔案
[oracle@sq123 ~]$ cd /oracle/app/oracle/product/10.2.0/db_1/dbs/
[oracle@sq123 dbs]$ more spfileTEST.ora (複制到記事本添加下面内容)
DB_UNIQUE_NAME=TEST --show parameter DB_UNIQUE_NAME确認主庫名稱
LOG_ARCHIVE_CONFIG='DG_CONFIG=(db82,db85)' --此處為主庫網絡連接配接串(tnsnames.ora)
LOG_ARCHIVE_DEST_1='LOCATION=/home/oracle/archive VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=TEST' --主庫的歸檔日志路徑
LOG_ARCHIVE_DEST_2='SERVICE=db82 LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=TEST'
FAL_SERVER=db82 --網絡異常恢複後自動将延遲的歸檔日志傳輸到備庫,此處為主庫網絡連接配接串(tnsnames.ora)
FAL_CLIENT=db85
STANDBY_FILE_MANAGEMENT=AUTO (預設隻傳遞資料,此作用主庫把新建立的資料檔案也傳到備庫)
[oracle@sq123 admin]$ vi tnsnames.ora
db85 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.8.5)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = TEST)
)
db82 =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.8.2)(PORT = 1521))
[oracle@sq123 ~]$ mkdir /home/oracle/archive
[oracle@sq123 ~]$ vi initnew.ora
(把記事本中内容粘貼到建立文檔)
SQL> startup pfile='/home/oracle/initnew.ora' force
SQL> show parameter ARCHIVE(檢視到剛才配置的值生效了)
SQL> show parameter fal
---------
修改備庫的參數檔案
把主庫的參數檔案拷貝到備庫
備庫8.2上
[oracle@sq18 dbs]$ mkdir /home/oracle/archive
[oracle@sq18 dbs]$ cd $ORACLE_HOME/dbs
修改3行
LOG_ARCHIVE_DEST_2='SERVICE=db85 LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=TEST'
FAL_SERVER=db85
FAL_CLIENT=db82
[oracle@sq18 admin]$ sqlplus sys/123456 as sysdba
(報錯沒有相應目錄)
[oracle@sq18 admin]$ mkdir -p /oracle/app/admin/TEST/adump
[oracle@sq18 admin]$ mkdir -p /oracle/app/admin/TEST/bdump
[oracle@sq18 admin]$ mkdir -p /oracle/app/admin/TEST/cdump
[oracle@sq18 admin]$ mkdir -p /oracle/app/flash_recovery_area
[oracle@sq18 admin]$ mkdir -p /oracle/app/admin/TEST/udump
(連接配接成功)
SQL> startup nomount force;
4、保證資料庫兩邊的密碼檔案中的密碼一緻(主備資料庫sys使用者密碼必須相同)
5、保證主備資料庫之間通過tns網絡連接配接串能夠互相連通對方
85上本地測試
[oracle@sq123 ~]$ sqlplus sys/123456@db85 as sysdba(成功)
[oracle@sq123 ~]$ sqlplus sys/123456@db82 as sysdba (不成功)
把85上的listener.ora ,tnsnames.ora複制過去
[oracle@sq18 ~]$ lsnrctl start
85上
[oracle@sq123 ~]$ sqlplus sys/123456@db82 as sysdba
(還是不成功,報權限錯誤,但sys登陸不可能出現權限問題,因為82上沒有密碼檔案)
82上
[oracle@sq18 ~]$ cd $ORACLE_HOME/dbs(沒有密碼檔案)
85上(拷貝密碼檔案過去)
[oracle@sq123 dbs]$ scp orapwTEST [email protected]:$ORACLE_HOME/dbs
[oracle@sq123 dbs]$ sqlplus sys/123456@db82 as sysdba(連接配接成功)
[oracle@sq18 dbs]$ sqlplus sys/123456@db85 as sysdba(成功)
6.遷移主庫資料庫檔案到備庫,以下RMAN操作全部在主庫執行
主庫上85
[oracle@sq123 ~]$ mkdir db_bak
RMAN> backup full database format='/home/oracle/db_bak/%U' include current controlfile for standby;
82上(傳輸備份片檔案到備庫的相同備份目錄下)
[oracle@sq18 ~]$ mkdir /home/oracle/db_bak
[oracle@sq18 app]$ mkdir -p oradata/TEST/
[oracle@sq123 db_bak]$ scp * [email protected]:/home/oracle/db_bak/
RMAN> connect auxiliary sys/123456@db82(85上,一定不要退出上次的RMAN連接配接)
RMAN> duplicate target database for standby nofilenamecheck;
7.檢視程序
SQL> select process from v$managed_standby;
(沒有災備的程序)
檢視歸檔錯誤資訊
SQL> select error from v$archive_dest;
SQL> alter database mount;
SQL> alter system switch logfile;
PROCESS
ARCH
LNS
(已經有了程序,lns傳輸程序)
RFS
(已經有了程序,rfs接收程序)
備庫具有恢複日志程序,需要手動激活此程序
SQL> alter database recover managed standby database disconnect from session;
SQL> select process from v$managed_standby;
MRP0
SQL> create spfile from pfile='/home/oracle/initnew.ora';
8.驗證
85 主庫上
SQL> create table t01 as select * from dba_objects;
SQL> commit;
(主庫隻有切換日志時,備庫會同步,但主庫日志變化 備庫會記錄到歸檔日志中)
SQL> alter database recover managed standby database cancel;
(備庫上,隻有把恢複日志程序取消,才可以打開資料庫)
SQL> alter database open;
SQL> select count(*) from t01;(已經有了)
=================================================
注意:
(1)備用資料庫在日志恢複過程中(MRP程序存在期間)資料庫處于MOUNTED狀态,此時備用資料庫無法打開供讀取使用
(2)打開備用資料庫
停止備用庫的日志恢複程序MRP
alter database recover managed standby database cancel;
open備用資料庫,備用資料庫預設打開為隻讀方式
alter database open;
(3)重新啟動備用資料庫的MRP程序,資料庫自動從OPEN狀态轉換到MOUNT 狀态
alter database recover managed standby database disconnect from session;
(4)mrp程序停止期間,隻要RFS程序存在,那麼不影響日志的接收
====================================================
本文轉自陳繼松 51CTO部落格,原文連結:http://blog.51cto.com/chenjisong/1737593,如需轉載請自行聯系原作者