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