程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> Oracle安裝(3)快速搭建DataGurad之物理standby

Oracle安裝(3)快速搭建DataGurad之物理standby

編輯:Oracle教程

Data Gurad的作用就不多說了,主在這說下物理standby的搭建步驟。
大致有這三種方式創建standby庫
方式一:用rman的方式生成standby. (用rman的duplice方式直接創建,無須先備份)
方式二:用rman的restore方式生成。(先用rman全備份主庫後,再用rman通過restore的方式創建)
方式三:用cp的方式生成 (關閉主庫後,復制控件文件,密碼文件,數據文件到備庫所在位置)
我主要在這用duplice方式,優點無須多說,假設你的數據庫上T,你會選哪種方法?

Oracle測試版本為11g;
1. 設置好主備庫的環境變量,及創建好相關目錄
主庫:

su - oracle
  --歸檔日志存放目錄
  --例子放在/u01/app/oracle/archivelog/xcldb 下
  mkdir -p $ORACLE_BASE/archivelog/$ORACLE_SID
環境變量注意下面兩個參數:
ORACLE_SID=xcldb
ORACLE_UNQNAME=xcldb

備庫:
 su - oracle
  --生成相關的目錄,還要注意下權限, 另11g就這幾個,10G還有幾個目錄
  mkdir -p $ORACLE_BASE/admin/$ORACLE_SID/{adump,bdump,cdump,dpdump,udump,pfile}
  --數據庫所在目錄
  mkdir -p $ORACLE_BASE/oradata/$ORACLE_SID
  --閃回
  mkdir -p $ORACLE_BASE/flash_recovery_area/$ORACLE_SID
  --歸檔日志存放目錄
  mkdir -p $ORACLE_BASE/archivelog/$ORACLE_SID
環境變量注意下面兩個參數:
ORACLE_SID=xcldbdg
ORACLE_UNQNAME=xcldbdg

2. 設置數據庫為歸檔模式
   --查看當前模式
   archive log list
  --設定歸檔日志的路徑,可以生成多份一樣的日志,保存多個位置,以防丟失
  --如果沒設置,默認會設到$ORACLE_HOME/dbs下。
  alter system set log_archive_dest_1='location=/u01/app/oracle/archivelog/xcldb';
  shutdown immediate
  startup mount
  alter database archivelog;
  archive log list;

3.設置force logging 強制日志模式
 alter database force logging
   select force_logging from v$database;
   --取消此模式:alter database no force logging;
   --手工切換日志,好生成歸檔日志
   alter system switch logfile --執行個三次
   select name from v$archived_log;
   --查看已有的日志文件
   select * from v$logfile;

4.創建Standby redo log
創建個數建議公式:
Standby redo log 組數公式>=(每個instance日志組個數+1)*instance個數
(maximum number of logfiles for each thread + 1) * maximum number of threads
 --找到最大的group#,因為group#不能重復
  select max(group#) from v$log;
   --可用這兩條查詢看到組號及文件大小, 11g默認是52428800
  SELECT GROUP#, BYTES FROM V$LOG;
  SELECT GROUP#, BYTES FROM V$STANDBY_LOG;
  
  --注意下大小一致,我是測試,沒管size
  alter database add standby logfile thread 1 group 11 '/u01/app/oracle/oradata/xcldb/redo11.log' size 50m;
  alter database add standby logfile thread 1 group 12 '/u01/app/oracle/oradata/xcldb/redo12.log' size 50m;
  alter database add standby logfile thread 1 group 13 '/u01/app/oracle/oradata/xcldb/redo13.log' size 50m;
  alter database add standby logfile thread 1 group 14 '/u01/app/oracle/oradata/xcldb/redo14.log' size 50m;

注意:
在add standby logfile 時,如果是單實例數據庫thread 1可以不加,但如果是RAC數據庫,
則要分別為每個實例各增加相關的Standby log;
另外如果是用OMF管理的可用下面的命令創建:
alter database add standby logfile thread 1 group 11 size 500m;

驗證下成果:
col member format a50
select group#, type, member from v$logfile where type = 'STANDBY';

5.在主庫創建standby的控制文件,並復制過到備庫所在服務器
startup mount;
alter database create standby controlfile as '/home/oracle/xcldbdg.ctl';
alter database open;

scp /home/oracle/xcldbdg.ctl 172.18.2.34:/home/oracle/

6.批量更改主庫的參數,設置成dg方式。
a. vi /home/oracle/dgsetprimary.sql
---------------------------------------------------
	set serveroutput on;
	--alter system set db_unique_name='xcldb' scope=spfile;
	alter system set log_archive_config='dg_config=(xcldb,xcldbdg)';
	alter system set log_archive_dest_1='LOCATION=/u01/app/oracle/archivelog/xcldb VALID_FOR=(all_logfiles,all_roles) db_unique_name=xcldb';
	alter system set log_archive_dest_2='service=xcldbdg LGWR ASYNC NOAFFIRM valid_for=(ONLINE_LOGFILE,PRIMARY_ROLE) db_unique_name=xcldbdg';
	alter system set log_archive_dest_state_1='enable';
	alter system set log_archive_dest_state_2='enable';
	alter system set standby_file_management='AUTO';
	
	alter system set fal_server='xcldbdg';
	alter system set db_file_name_convert='/xcldb/','/xcldbdg/' scope=spfile;
	alter system set log_file_name_convert='/xcldb/','/xcldbdg/' scope=spfile;
	----------------------------
	show parameter log_archive_config;
	show parameter db_file_name_convert;
	show parameter log_file_name_convert;
	---------------------------
要注意fal_client參數,11g已經廢了它,11g之前的版本還是需要這個參數
--alter system set fal_client='xcldb';

b.運行參數更改sql
@/home/oracle/dgsetprimary.sql

c.重新啟動數據庫,使參數生效。以防止一些不能動態更改的參數不起作用。
shutdown immediate;
startup

7.主備庫配置Oracle Net
listener.ora 設置要特別注意,一定要設置靜態監聽。
且Global_dbname和sid_name在主備庫各自指向各自的的數據庫。
主庫listener.ora:
 SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = xcldb)
      (ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
      (SID_NAME = xcldb)
    )
  )


LISTENER =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 172.18.2.32)(PORT = 1521))
  )


ADR_BASE_LISTENER = /u01/app/oracle

tnsnames.ora兩邊一樣就行了
 [oracle@xcldg1] :cat tnsnames.ora
# tnsnames.ora Network Configuration File: /u01/app/oracle/product/11.2.0/db_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.


XCLDB =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 172.18.2.32)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = xcldb)
    )
  )


XCLDBDG =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 172.18.2.34)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = xcldbdg)
    )
  )

詳細說明:
靜態監聽,就是要設global_dbname和sid_name。
原因:
如果配置的動態監聽,只要有實例沒有啟動到open狀態,就無法通過
網絡將服務注冊到數據庫,而只有靜態監聽可以.
可以通過lsnrctl start時可以看到.在靜態監聽開啟的情況下,實例狀態
顯示為"UNKNOWN",而動態監聽為"READY"
如數據庫啟動到mount狀態下,不能通過網絡方式注冊到數據庫sqlplus sys@xcldb as sysdba
出現 ORA-01031:insufficient privileges
是密碼文件的問題,可用select * from v$pwfile_users;查看
用orapwd 建一個就可以了.密碼文件名要注意命名規則orapw<sid>

8. 在主備庫重啟監聽
lsnrctl stop
lsnrctl start

9. 如果是Windows的,創建好數據庫服務,如不是則略過這步。
oradim -NEW -SID xcldb -STARTMODE manual

10。在主庫服務器創建standby備庫的密碼文件,注意,sys密碼要一樣.並復制到備庫服務器。
orapwd file=$ORACLE_HOME/dbs/orapwxcldbdg password=111111 force=y;
scp /home/oracle/initxcldb_bak.ora 172.18.2.34:/home/oracle/

11.在備庫服務器創建standby的初始化參數文件
cd $ORACLE_HOME/dbs
echo DB_NAME=xcldbdg>initxcldbdg.ora
cat initxcldbdg.ora
--DB_NAME=xcldbdg --就只有這一條記錄
--之所以要建這個文件是因為startup nomout要,用duplicate後會
--創建spfile,這個就沒用了.

12.啟動standby數據庫,記得要帶設好的standby的init<sid>.ora文件啟動
export ORACLE_SID=xcldbdg
echo $ORACLE_SID
sqlplus / as sysdba
startup nomount pfile=$ORACLE_HOME/dbs/initxcldbdg.ora

13.創建standby庫
a.創建duplicate備庫的腳本文件 。
vi /home/oracle/dgdup2standby.rman
run{
   allocate channel prmy1 type disk;
   allocate channel prmy2 type disk;
   allocate auxiliary channel stby type disk;
   duplicate target database for standby from active database nofilenamecheck spfile parameter_value_convert 'xcldb','xcldbdg'
   set db_unique_name='xcldbdg'
   set log_archive_config='dg_config=(xcldb,xcldbdg)'
   set log_archive_dest_1='LOCATION=/u01/app/oracle/archivelog/xcldbdg VALID_FOR=(all_logfiles,all_roles) db_unique_name=xcldbdg'
   set log_archive_dest_2='service=xcldbdg LGWR ASYNC NOAFFIRM valid_for=(ONLINE_LOGFILES,PRIMARY_ROLE) db_unique_name=xcldbdg'
   set log_archive_dest_state_1='enable'
   set log_archive_dest_state_2='enable'
   set standby_file_management='AUTO'
   set fal_server='xcldb'
   set db_file_name_convert='/xcldb/','/xcldbdg/'
   set log_file_name_convert='/xcldb/','/xcldbdg/'
   set control_files='/u01/app/oracle/oradata/xcldbdg/xcldbdg.ctl'
   set log_archive_max_processes=30 ;
}
 --set fal_client='xcldbdg'

b.使用rman以auxiliary方式連接standby數據庫,我用tee記錄下日志
rman target sys/111111@xcldb auxiliary sys/111111@xcldbdg | tee /home/oracle/createxcldb_standby.log

c.運行腳本,復制數據庫的同時,配置好了DG所需的參數。
RMAN> @/home/oracle/dgdup2standby.rman

14. 備庫設為standby模式。
startup mount;
alter database recover managed standby database disconnect from session

15.檢查
   --查看兩邊的數據庫狀態
   select name,open_mode,database_role,dataguard_broker,guard_status,force_logging,db_unique_name from v$database;
   
   --在主庫執行日志切換
    alter system switch logfile;
	
   --對比兩邊的日志情況,檢查是否有同步過來。
    SELECT sequence#,first_time,next_time,name FROM v$archived_log ORDER BY sequence#;

至此,物理的Standby就順利搭建好了。

MAIL: [email protected]

BLOG: http://blog.csdn.net/xcl168


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved