ORACLE DG搭建


准備工作

確定主庫從庫的ip,主機名,實例名

主庫配置

配置前准備
在/app/文件夾下創建interlib文件夾,再創建子文件夾log。
日志文件路徑 logUrl=’C:\app\interlib\log’。
控制文件路徑:standbyUrl=’C:\app\interlib’;

 

1.設置強制歸檔模式

sqlplus / as sysdba
select name from v$database
若不為所需搭建數據庫
sqlplus /@數據庫名稱 as sysdba;
SQL>shutdown immediate; 
SQL>startup mount; 
SQL>alter database archivelog; 
SQL>alter database open; 
#設置強制歸檔模式 
SQL> alter database force logging; 

PS:查看命令:select log_mode,force_logging from v$database ;   查看是否歸檔命令:Archive log list ;

  


2.為備用庫創建日志文件

alter database add standby logfile group 4 ('C:\app\interlib\log\STAN04.LOG') size 50m;
alter database add standby logfile group 5 ('C:\app\interlib\log\STAN05.LOG') size 50m;
alter database add standby logfile group 6 ('C:\app\interlib\log\STAN06.LOG') size 50m;
PS:logUrl是日志文件的路徑,路徑需要加單引號,否則會報錯ora-02236。

 


3.創建standby控制文件

alter database create standby controlfile as 'C:\app\interlib\standby.ctl';

  

4.導出當前數據庫參數文件並修改

create pfile='C:\app\interlib\initora.ora' from spfile;

standbyUrl是控制文件路徑,只是為了保存initora.ora文件,方便查找。

  


5.編輯initora.ora文件,增加下面的內容。

#下面這部分是要添加的
*.db_unique_name='primary'
*.archive_lag_target=1800
*.fal_client='standby'
*.fal_server='primary'
*.log_archive_config='DG_CONFIG=(primary,standby)'
*.log_archive_dest_1='LOCATION=C:\app\interlib\log VALID_FOR=(all_logfiles,all_roles) db_unique_name=primary'
*.log_archive_dest_2='service=standby arch async valid_for=(online_logfiles,primary_role) db_unique_name=standby' #加粗位置可根據需求修改lgwr sync,否則需要等歸檔才同步
*.log_archive_dest_state_1='enable'
*.log_archive_dest_state_2='enable'
*.log_archive_format='%t_%s_%r.dbf'
*.DB_FILE_NAME_CONVERT='D:\ oracle數據庫數據文件路徑','oracle數據庫數據文件路徑(例如D:\app\Administrator\oradata\orcl\)'
*.LOG_FILE_NAME_CONVERT='C:\app\interlib\log','C:\app\interlib\log'
*.standby_file_management='auto'
PS:該效果圖中的路徑不是正確的,只是提供一個參考,具體的路徑需根據實際情況配置。

  


6.按照順序執行下面命令:

shutdown immediate;
#使用新參數文件啟動數據庫
startup pfile='C:\app\interlib\initora.ora' nomount;
#創建新的spfile文件
create spfile from pfile='C:\app\interlib\initora.ora';
#停止服務
shutdown immediate;
#啟動服務
startup;

  

7.創建密碼文件

#該語句在DOS窗口執行,不需要登錄sqlplus,路徑不能加引號,否則匯報opw-00001錯誤
orapwd file=passwordUrl\PWDorcl.ora password=123 entries=10

PS:密碼文件存放路徑:passwordUrl=D:\app\Administrator\product\11.2.0\dbhome_1\database
可以查看相應位置是否有密碼文件,若有可以不創建

  

8.配置監聽和訪問服務
  修改listener.ora
  監聽服務文件路徑:/app/product/11.2.0/dbhome_1/NETWORK/ADMIN/listener.ora
  修改listener.ora文件,加粗的是要添加和修改的內容

#修改SID_LIST_LISTENER
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = CLRExtProc)
(ORACLE_HOME = D:\app\Administrator\product\11.2.0\dbhome_1)
(PROGRAM = extproc)
(ENVS = "EXTPROC_DLLS=ONLY:D:\app\Administrator\product\11.2.0\dbhome_1\bin\oraclr11.dll")
)
#添加SID_DESC
(SID_DESC = 
(GLOBAL_DBNAME = 實例名)
(ORACLE_HOME = oracle主目錄(例如D:\app\Administrator\product\11.2.0\dbhome_1))
(SID_NAME = 實例名)
)
)
#修改LISTENER
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
#在原來的基礎上添加SID_DESC
(ADDRESS = (PROTOCOL = TCP)(HOST = 主庫主機IP)(PORT = 1521))
)
)

ADR_BASE_LISTENER = D:\app\Administrator

  

 

  修改tnsname.ora文件
  # 路徑: D:\app\Administrator\product\11.2.0\dbhome_1\network\admin\tnsnames.ora

#增加主庫配置
PRIMARY = 
(DESCRIPTION = 
(ADDRESS_LIST = 
(ADDRESS = (PROTOCOL = TCP) (HOST = 192.168.1.57) (PORT = 1521))
)
(CONNECT_DATA = 
(SERVICE_NAME = orcl)
)
)
#增加從庫配置
STANDBY= 
(DESCRIPTION = 
(ADDRESS_LIST = 
(ADDRESS = (PROTOCOL = TCP) (HOST = 192.168.1.58) (PORT = 1521))
)
(CONNECT_DATA = 
(SERVICE_NAME = orcl)
)
)

ORACLR_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
(CONNECT_DATA =
(SID = CLRExtProc)
(PRESENTATION = RO)
)
)

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

  

9.測試監聽

#停止服務
SQL>shutdown immediate;
SQL>startup mount;
#alter database open是數據庫處於mount狀態,從mount狀態打開數據庫的命令。
SQL>alter database open;
lsnrctl stop
lsnrctl start
#測試配置是否正確
SQL>sqlplus sys/pwd@primary as sysdba

PS:若連接失敗,檢查防火牆設置或者ping下IP地址是否正常。

關閉主數據庫
SQL>shutdown immediate;

  

 

從庫配置

1.主庫復制文件到從庫

將主庫oracle目錄下的admin,cfgtollogs,diag,flash_recover_area目錄拷貝到備用庫的相同路徑,備庫已經有的文件和文件夾直接覆蓋掉吧。
將主庫oracle目錄下的oradata文件夾下內容復制到從庫相同目錄下 。
將主庫生成的密碼文件拷貝到從庫相同路徑下。 將D:\app\interlib拷貝到備庫相同路徑 。
將standby.ctl文件拷貝到備庫的數據文件夾內(D:\app\Administrator\oradata\orcl\)和D:\app\Administrator\flash_recovery_area\orcl\下。在兩個路徑下將文件復制為control01.ctl,control02.ctl,control03.ctl。
將主庫的listener.ora和tnsname.ora拷貝到備庫相同路徑 。
主庫和備庫創建D:\app\interlib\tmp文件夾。
修改備庫listener.ora文件的Ip為備庫Ip(10.10.203.111 )。

2.備庫新建實例

#在備庫上注冊oracle實例到服務中,具體命令如下:

oradim -new -sid orcl(實例名)
PS:如果已經裝了數據庫,執行的話也會提示這個實例已經存在,接着繼續下面的就可以 

 


3.備庫啟動監聽

#DOS中執行

lsnrctl start


4.修改備庫參數文件並創建實例

將剛才從主庫拷貝過來的initora.ora作下面的修改,用下面的內容覆蓋主庫增加的內容。

#下面是要修改的地方
*.db_unique_name='standby'
*.archive_lag_target=1800
*.fal_client='primary'
*.fal_server='standby'
*.log_archive_config='DG_CONFIG=(primary,standby)'
*.log_archive_dest_1='LOCATION=D:\app\interlib\log\ VALID_FOR=(all_logfiles,all_roles) db_unique_name=standby' 
*.log_archive_dest_2='service=primary arch async valid_for=(online_logfiles,primary_role) db_unique_name=primary' #加粗位置可修改為lgwr sync
*.log_archive_dest_state_1='enable'
*.log_archive_dest_state_2='enable'
*.log_archive_format='%t_%s_%r.dbf'
*.DB_FILE_NAME_CONVERT='D:\app\Administrator\oradata\orcl\','D:\app\Administrator\oradata\orcl\'
*.LOG_FILE_NAME_CONVERT='D:\app\interlib\log\','D:\app\interlib\log\'
*.standby_file_management='auto'

  

 

5.使用新參數文件建立從庫實例

startup nomount pfile='C:\app\interlib\initora.ora';
create spfile from pfile='C:\app\interlib\initora.ora';
shutdown immediate;

 

6.配置從庫為備用庫模式

#啟動備用數據庫為掛載備庫模式
SQL>startup nomount;
SQL>alter database mount standby database;
#在備用服務器上啟動日志傳送服務
SQL>alter database recover managed standby database disconnect from session;
SQL>shutdown immediate;
SQL>startup;

  

 

檢測配置與總結

1.檢測配置是否成功

#查看切換狀態:
SQL>select switchover_status from v$database;
#手動切換歸檔,查看歸檔文件是否自動同步到備用庫. 切換歸檔:
SQL> alter system switch logfile;
#在主庫和從庫查看歸檔日志是否同步:
SQL>SELECT SEQUENCE#,APPLIED FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;

  

  具體操作步驟:

1. 查看oradata/archive文件是否傳過去了
2. 在dbprimary上插入一些數據
#主庫操作,查看當前sequence
(dbprimary)sql>select max(sequence#) from v$archived_log; 
#從庫操作,查看當前sequence
(dbstandby)sql>select max(sequence#) from v$archived_log;
#主庫操作,查看當前sequence
(dbprimary)sql>alter system switch logfile;
#主庫操作,查看當前sequence
(dbprimary)sql>select max(sequence#) from v$archived_log; 
#從庫操作,查看當前sequence
(dbstandby)sql>select max(sequence#) from v$archived_log;
如果dbstandby的sequence跟着改變,說明已經好了

  如果查看從庫可以看到歸檔日志,表示歸檔日志同步成功,如果APPLIED列的值為yes,表示重做應用成功.

2.常用命令

#檢測Data Guard方式的命令
SELECT PROTECTION_MODE FROM V$DATABASE;
#修改Data Guard保護模式
ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE {AVAILABILITY | PERFORMANCE | PROTECTION};
#對單實例數據庫或RAC中的當前實例執行日志切換;
ALTER SYSTEM SWITCH LOGFILE
#會對數據庫中的所有實例執行日志切換。
而ALTER SYSTEM ARCHIVE LOG CURRENT
#設置自動歸檔時間間隔(單位是秒)
alter system set archive_lag_target=1800 scope=both; 
#物理備庫開啟實時應用
alter database recover managed standby database using current logfile disconnect from session;
#取消歸檔日志時間間隔-物理備庫
alter database recover managed standby database nodelay ;

  

 

3.常見錯誤處理辦法
錯誤號 錯誤描述

ORA-10456	cannot open standby database; media recovery session may be in progress
#解決辦法
alter database recover managed standby database cancel; 
alter database open; 
alter database recover managed standby database using current logfile disconnect ;

 

ora-16004,ora-01152,ora-01110	從庫啟動報錯,
解決辦法:
SQL> alter database recover managed standby database using current logfile disconnect from session; (需要在備庫建立standby logfile,否則會出現ORA-38500錯誤)

在主庫
sql> alter system switch logfile;

在備庫
SQL> alter database recover managed standby database cancel;
數據庫已更改。
SQL> alter database open;

  

4.參考鏈接:

https://blog.csdn.net/chengxumengzhidui/article/details/77961524

http://blog.csdn.net/qq_23412263/article/details/70240485   

https://blog.csdn.net/Oracle_zsq/article/details/80566768

  

 



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM