oracle DG部署(新手看这一篇就够了)
手把手oracle dg新手部署
主库
1.检查主库是否开归档
archive log list
若没有
alter database archivelog;
alter database force logging;
ALTER SYSTEM SET LOG_ARCHIVE_DEST_1='LOCATION=/oraarch/CHERRY valid_for=(all_logfiles,all_roles)' SCOPE=BOTH sid='*';
2.添加standby redo log
select group#,THREAD#,bytes/1024/1024 from v$log;
GROUP# BYTES/1024/1024
---------- ---------------
1 1024
2 1024
3 1024
4 1024
alter database add standby logfile ('/oradata/CHERRY/stdredo1.log') size 150M;
alter database add standby logfile ('/oradata/CHERRY/stdredo2.log') size 150M;
alter database add standby logfile ('/oradata/CHERRY/stdredo3.log') size 150M;
alter database add standby logfile ('/oradata/CHERRY/stdredo4.log') size 150M;
SELECT GROUP#,THREAD#,SEQUENCE#,ARCHIVED,STATUS FROM gv$STANDBY_LOG;
3.修改主库参数
ALTER SYSTEM SET LOG_ARCHIVE_CONFIG='DG_CONFIG=(cherry,cherrydr)' scope=both sid='*';
ALTER SYSTEM SET LOG_ARCHIVE_DEST_1='LOCATION=/oraarch/CHERRY valid_for=(all_logfiles,all_roles)' SCOPE=BOTH sid='*';
ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=cherrydr ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=cherrydr' SCOPE=both sid='*';
ALTER SYSTEM SET FAL_SERVER='cherrydr' scope=both sid='*';
ALTER SYSTEM SET FAL_client='cherry' scope=both sid='*';
alter system set STANDBY_FILE_MANAGEMENT='AUTO' scope=both;
alter system set log_archive_format='%t_%s_%r.arc' scope=spfile sid='*';
alter system set remote_login_passwordfile='EXCLUSIVE' scope=spfile sid='*';
alter system set log_archive_dest_state_1=enable scope=both;
alter system set log_archive_dest_state_2=enable scope=both;
alter system set log_archive_format='%t_%s_%r.arc' scope=both;
4.拷贝密码文件
scp orapwcherry oracle@139.0.6.121:/u01/app/oracle/product/19.10.0/db_1/dbs/
5.修改主备端tnsnames.ora
!!!主备都要修改
cherry =
(DESCRIPTION=
(ADDRESS_LIST=
(LOAD_BALANCE = yes)
(ADDRESS=(PROTOCOL=TCP)(HOST=dc-ydmh-dg)(PORT=1521))
)
(CONNECT_DATA=
(SERVER = DEDICATED)
(SERVICE_NAME=cherry)
)
)
cherrydr =
(DESCRIPTION=
(ADDRESS_LIST=
(LOAD_BALANCE = yes)
(ADDRESS=(PROTOCOL=TCP)(HOST=dr-ydmh-dg)(PORT=1521))
)
(CONNECT_DATA=
(SERVER = DEDICATED)
(SERVICE_NAME=cherrydr)
)
)
6.修改主备端listener.ora
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = cherrydr )
(ORACLE_HOME =/u01/app/oracle/product/19.10.0/db_1)
(SID_NAME = cherry)
)
)
配置完监听后启动监听,静态监听信息如下:
Instance "cherry", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully
7.创建pfile并拷贝至备端修改
create pfile from spfile;
scp initcherry.ora oracle@139.0.6.121:/u01/app/oracle/product/19.10.0/db_1/dbs/
cherry.__data_transfer_cache_size=0
cherry.__db_cache_size=18723373056
cherry.__inmemory_ext_roarea=0
cherry.__inmemory_ext_rwarea=0
cherry.__java_pool_size=0
cherry.__large_pool_size=134217728
cherry.__oracle_base='/u01/app/oracle'#ORACLE_BASE set from environment
cherry.__pga_aggregate_target=5368709120
cherry.__sga_target=21474836480
cherry.__shared_io_pool_size=134217728
cherry.__shared_pool_size=2415919104
cherry.__streams_pool_size=0
cherry.__unified_pga_pool_size=0
*.audit_file_dest='/u01/app/oracle/admin/cherry/adump'
*.audit_trail='db'
*.compatible='19.0.0'
*.control_files='/oradata/CHERRY/control01.ctl','/oradata/CHERRY/control02.ctl'
*.db_block_size=8192
*.db_name='cherry'
*.db_unique_name='cherrydr'
*.diagnostic_dest='/u01/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=cherryXDB)'
*.fal_client='cherrydr'
*.fal_server='cherry'
*.log_archive_config='DG_CONFIG=(cherrydr,cherry)'
*.log_archive_dest_1='LOCATION=/oraarch/CHERRY valid_for=(all_logfiles,all_roles)'
*.log_archive_dest_2='SERVICE=cherry ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=cherry'
*.log_archive_dest_state_1='ENABLE'
*.log_archive_dest_state_2='ENABLE'
*.log_archive_format='%t_%s_%r.arc'
*.nls_language='AMERICAN'
*.nls_territory='AMERICA'
*.open_cursors=300
*.pga_aggregate_target=5g
*.processes=3000
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_target=20g
*.standby_file_management='AUTO'
*.undo_tablespace='UNDOTBS1'
8.创建目录
oracle用户给
cd /u01/app/oracle/
mkdir -p admin/cherry/adump
9.启动数据库到mount状态
使用上一步修改的pfile文件启动standby端到nomount状态
[oracle@dr-ydmh-db admin]$ export ORACLE_SID=cherry
[oracle@dr-ydmh-db admin]$ sqlplus / as sysdba
SQL> startup nomount
10.测试主备机连通性
sqlplus sys/oracle120@cherrydr as sysdba
sqlplus sys/oracle120@cherry as sysdba
11.rman登录主端,恢复数据
$rman target sys/oracle120@cherry auxiliary sys/oracle120@cherrydr
run{
allocate channel c1 device type disk;
allocate auxiliary channel c2 device type disk;
duplicate target database for standby from active database nofilenamecheck;
release channel c1;
release channel c2;
}
备库
show parameter standby_file_management
NAME TYPE VALUE
------------------------------------ -------------------- ------------------------------
standby_file_management string AUTO
SQL> alter system set standby_file_management=manual;
select member from v$logfile;
/u01/app/oracle/product/19.10.0/db_1/dbs/broken0
/u01/app/oracle/product/19.10.0/db_1/dbs/broken1
/u01/app/oracle/product/19.10.0/db_1/dbs/broken2
/u01/app/oracle/product/19.10.0/db_1/dbs/broken3
/u01/app/oracle/product/19.10.0/db_1/dbs/broken4
/u01/app/oracle/product/19.10.0/db_1/dbs/broken5
/u01/app/oracle/product/19.10.0/db_1/dbs/broken6
alter database rename file '/u01/app/oracle/product/19.10.0/db_1/dbs/broken0' to '/oradata/CHERRY/redo01.log';
alter database rename file '/u01/app/oracle/product/19.10.0/db_1/dbs/broken1' to '/oradata/CHERRY/redo02.log';
alter database rename file '/u01/app/oracle/product/19.10.0/db_1/dbs/broken2' to '/oradata/CHERRY/redo03.log';
alter database rename file '/u01/app/oracle/product/19.10.0/db_1/dbs/broken3' to '/oradata/CHERRY/stdredo1.log';
alter database rename file '/u01/app/oracle/product/19.10.0/db_1/dbs/broken4' to '/oradata/CHERRY/stdredo2.log';
alter database rename file '/u01/app/oracle/product/19.10.0/db_1/dbs/broken5' to '/oradata/CHERRY/stdredo3.log';
alter database rename file '/u01/app/oracle/product/19.10.0/db_1/dbs/broken6' to '/oradata/CHERRY/stdredo4.log';
1.将主备库归档路径设为ENABLE:
alter system set log_archive_dest_state_2 = enable;
2.启用日志传输:
alter database recover managed standby database using current logfile disconnect;
3.查看备库属性
set linesize 400
col open_mode format a30
col database_role format a30
col switchover_status format a30
col protection_mode format a30
select protection_mode,open_mode,database_role,switchover_status from v$database;
4.查看同步进度
set line 400
col NAME format a20;
col VALUE format a30;
col UNIT format a30;
col TIME_COMPUTED format a20;
col DATUM_TIME format a20;
select * from v$dataguard_stats;
5.查看日志传输状态
col TYPE for a20
col UNITS for a20
col COMMENTS for a20
select * from v$recovery_progress;
修改成ADG
1.停止日志传输
alter database recover managed standby database cancel;
2.将备库启动至只读
alter database open read only;
3.开启日志传输
alter database recover managed standby database using current logfile disconnect;
4.查看同步进度
set line 400
col NAME format a20;
col VALUE format a30;
col UNIT format a30;
col TIME_COMPUTED format a20;
col DATUM_TIME format a20;
select * from v$dataguard_stats;
select THREAD#,max(SEQUENCE#) from v$archived_log group by thread#;
select THREAD#,SEQUENCE#,APPLIED from v$archived_log ;
####配置broker ########
1.###在主库注册静态监听###
节点1:
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = cherry_DGMGRL)
(ORACLE_HOME = /u01/app/oracle/product/19.10.0/db_1)
(SID_NAME = cherry)
)
(SID_DESC =
(GLOBAL_DBNAME = jy31db )
(ORACLE_HOME = /u01/app/oracle/product/19.10.0/db_1)
(SID_NAME = jy31cdb1)
)
)
Lsnrctl reload
Lsnrctl status
2.###修改主库broker参数###
一个节点操作即可
alter system set dg_broker_start=false scope=both ;
alter system set dg_broker_config_file1='/oradata/CHERRY/dr1.dat' scope=both ;
alter system set dg_broker_config_file2='/oradata/CHERRY/dr2.dat' scope=both ;
alter system set dg_broker_start=TRUE scope=both ;
3.###修改备库broker参数###
一个节点操作即可
alter system set dg_broker_start=false scope=both;
alter system set dg_broker_config_file1='/oradata/CHERRY/dr1.dat' scope=both ;
alter system set dg_broker_config_file2='/oradata/CHERRY/dr2.dat' scope=both ;
alter system set dg_broker_start=TRUE scope=both ;
4.备库重置LOG_ARCHIVE_DEST_n参数
一个节点操作即可
alter system set log_archive_dest_2='' scope=both ;
!!!如果不重置LOG_ARCHIVE_DEST_n参数,则在broker中添加物理备库时会报错。
5.添加broker配置
主库操作
$ dgmgrl sys/oracle120@cherrydr
DGMGRL> CREATE CONFIGURATION dgconfig AS PRIMARY DATABASE IS cherry CONNECT IDENTIFIER IS cherry ;
DGMGRL> ADD DATABASE cherrydr AS CONNECT IDENTIFIER IS cherrydr ;
DGMGRL> ENABLE CONFIGURATION
DGMGRL> show configuration
Configuration - dgconfig
Protection Mode: MaxPerformance
Members:
orcl - Primary database
orcldg - Physical standby database
orclrmt - Physical standby database
Fast-Start Failover: Disabled
Configuration Status:
SUCCESS (status updated 34 seconds ago)
切换测试:
DGMGRL> switchover to cherry
1> 首先在主库上配置一个TAF的service
begin
DBMS_SERVICE.CREATE_SERVICE(service_name => 'cherry_srv',
network_name => 'cherry_srv',
aq_ha_notifications => TRUE,
failover_method => 'BASIC',
failover_type => 'SELECT',
failover_retries => 30,
failover_delay => 5);
end;
/
2> 建立一个存储过程,用于调用service,确保只在主库运行
create or replace procedure dg_taf_proc_cherry is v_role VARCHAR(30);
begin
select DATABASE_ROLE into v_role from V$DATABASE;
if v_role = 'PRIMARY' then
DBMS_SERVICE.START_SERVICE('cherry_srv');
else
DBMS_SERVICE.STOP_SERVICE('cherry_srv');
end if;
end;
/
3>创建1个触发器来确保服务可以运行
create or replace TRIGGER dg_taf_trg_startup_cherry
after startup or db_role_change on database
begin
dg_taf_proc_cherry;
end;
/
4>启动新创建的service
主库执行:exec dg_taf_proc_cherry
Service "dg_taf_cherry" has 1 instance(s).
Instance "cherry", status READY, has 1 handler(s) for this service...
5>在备库查询,确认触发器和存过已经应用到备库
select trigger_name, trigger_name from dba_triggers where trigger_name = 'dg_taf_trg_startup_cherry';
select d.owner,d.OBJECT_NAME from dba_procedures d where d.OBJECT_NAME = 'dg_taf_proc_cherry';

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐
所有评论(0)