暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

【工作笔记】Oracle19c Non-CDB ADG搭建

dblife 2021-11-15
1443

1. 环境描述


主库从库
操作系统RHEL7.8RHEL7.8
软件Oracle19.11Oracle19.11
IP192.168.64.134192.168.66.151
主机名fadb01fadb02
SIDfadbfadb
db_namefadbfadb
db_unique_namefadbfadb_stb

2. 主库配置

2.1 开启强制日志

  1. alter database force logging;

复制

2.2 开启归档日志

  1. alter system set db_recovery_file_dest_size=80g scope=both;

  2. alter system set db_recovery_file_dest='/data/fast_recovery_area';


  3. shutdown immediate;

  4. startup mount;

  5. alter database archivelog;

  6. alter database open;

  7. archive log list;

  8. show parameter db_recovery

复制

2.3 主库创建standby日志组

  1. alter system set standby_file_management=manual;

  2. alter database add standby logfile group 7 '/data/oradata/FADB/standby_redo07.log' size 500M ;

  3. alter database add standby logfile group 8 '/data/oradata/FADB/standby_redo08.log' size 500M ;

  4. alter database add standby logfile group 9 '/data/oradata/FADB/standby_redo09.log' size 500M ;

  5. alter database add standby logfile group 10 '/data/oradata/FADB/standby_redo10.log' size 500M ;

  6. alter database add standby logfile group 11 '/data/oradata/FADB/standby_redo11.log' size 500M ;

  7. alter database add standby logfile group 12 '/data/oradata/FADB/standby_redo12.log' size 500M ;

  8. alter database add standby logfile group 13 '/data/oradata/FADB/standby_redo13.log' size 500M ;

  9. alter system set standby_file_management=auto;


  10. col member for a60

  11. set linesize 200

  12. select group#,type,member from v$logfile order by group#;

复制

2.4 参数配置

  1. fadb.__data_transfer_cache_size=0

  2. fadb.__db_cache_size=17448304640

  3. fadb.__inmemory_ext_roarea=0

  4. fadb.__inmemory_ext_rwarea=0

  5. fadb.__java_pool_size=268435456

  6. fadb.__large_pool_size=134217728

  7. fadb.__oracle_base='/u01/app/oracle'#ORACLE_BASE set from environment

  8. fadb.__pga_aggregate_target=4294967296

  9. fadb.__sga_target=21474836480

  10. fadb.__shared_io_pool_size=134217728

  11. fadb.__shared_pool_size=3019898880

  12. fadb.__streams_pool_size=134217728

  13. fadb.__unified_pga_pool_size=0

  14. *.audit_file_dest='/u01/app/oracle/admin/fadb/adump'

  15. *.audit_trail='db'

  16. *.compatible='19.0.0'

  17. *.control_files='/data/oradata/FADB/control01.ctl','/data/fast_recovery_area/FADB/control02.ctl'

  18. *.db_block_size=8192

  19. *.db_file_name_convert='/data/oradata/FADB_STB','/data/oradata/FADB' # 新增,备库在前

  20. *.db_name='fadb'

  21. *.db_unique_name='fadb' # 新增,主库、备库必须不一样

  22. *.db_recovery_file_dest='/data/fast_recovery_area'

  23. *.db_recovery_file_dest_size=85899345920

  24. *.deferred_segment_creation=FALSE

  25. *.diagnostic_dest='/u01/app/oracle'

  26. *.dispatchers='(PROTOCOL=TCP) (SERVICE=fadbXDB)'

  27. *.fal_server='fadb_stb' # 新增

  28. *.log_archive_config='DG_CONFIG=(fadb,fadb_stb)' # 新增

  29. *.log_archive_dest_1='location=use_db_recovery_file_dest VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=fadb' # 新增

  30. *.log_archive_dest_2='service=fadb_stb lgwr async valid_for=(online_logfiles,primary_role) db_unique_name=fadb_stb' # 新增

  31. *.log_archive_dest_state_1='ENABLE' # 新增

  32. *.log_archive_dest_state_2='ENABLE' # 新增

  33. *.log_file_name_convert='/data/oradata/FADB_STB','/data/oradata/FADB' # 新增

  34. *.local_listener='LISTENER_FADB'

  35. *.log_buffer=268435456

  36. *.nls_language='AMERICAN'

  37. *.nls_territory='AMERICA'

  38. *.open_cursors=300

  39. *.pga_aggregate_target=4294967296

  40. *.processes=2000

  41. *.remote_login_passwordfile='EXCLUSIVE'

  42. *.sga_max_size=21474836480

  43. *.sga_target=21474836480

  44. *.undo_tablespace='UNDOTBS1'

复制

主库通过静态参数文件pfile,重新生成二进制参数文件

  1. shutdown immediate;

  2. create spfile from pfile='/home/oracle/init.ora';

  3. startup

复制

2.5 配置TNS

  1. [oracle@fadb01 admin]$ cat tnsnames.ora

  2. FADB =

  3. (DESCRIPTION =

  4. (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.64.134)(PORT = 1521))

  5. (CONNECT_DATA =

  6. (SERVER = DEDICATED)

  7. (SERVICE_NAME = fadb)

  8. )

  9. )


  10. FADB_STB =

  11. (DESCRIPTION =

  12. (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.66.151)(PORT = 1521))

  13. (CONNECT_DATA =

  14. (SERVER = DEDICATED)

  15. (SERVICE_NAME = fadb_stb)

  16. )

  17. )


  18. LISTENER_FADB =

  19. (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.64.134)(PORT = 1521))

复制

2.6 主库配置监听(静态)

  1. [oracle@fadb01 admin]$ cat listener.ora


  2. LISTENER =

  3. (DESCRIPTION_LIST =

  4. (DESCRIPTION =

  5. (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.64.134)(PORT = 1521))

  6. (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))

  7. )

  8. )


  9. SID_LIST_LISTENER =

  10. (SID_LIST =

  11. (SID_DESC =

  12. (GLOBAL_DBNAME = fadb)

  13. (ORACLE_HOME=/u01/app/oracle/product/19c/db_1)

  14. (SID_NAME = fadb)

  15. )

  16. )

复制

重启监听

  1. lsnrctl stop

  2. lsnrctl start

  3. sqlplus sys/Oracle_123@fadb as sysdba

复制

3. 备库配置

3.1 备库参数配置(把主库的pfile文件拷贝到备库,直接修改)

  1. fadb.__data_transfer_cache_size=0

  2. fadb.__db_cache_size=17448304640

  3. fadb.__inmemory_ext_roarea=0

  4. fadb.__inmemory_ext_rwarea=0

  5. fadb.__java_pool_size=268435456

  6. fadb.__large_pool_size=134217728

  7. fadb.__oracle_base='/u01/app/oracle'#ORACLE_BASE set from environment

  8. fadb.__pga_aggregate_target=4294967296

  9. fadb.__sga_target=21474836480

  10. fadb.__shared_io_pool_size=134217728

  11. fadb.__shared_pool_size=3019898880

  12. fadb.__streams_pool_size=134217728

  13. fadb.__unified_pga_pool_size=0

  14. *.audit_file_dest='/u01/app/oracle/admin/fadb_stb/adump' # 修改fadb为fadb_stb,创建adump目录

  15. *.audit_trail='db'

  16. *.compatible='19.0.0'

  17. *.control_files='/data/oradata/FADB_STB/control01.ctl','/data/fast_recovery_area/FADB_STB/control02.ctl' # 修改FADB为FADB_STB

  18. *.db_block_size=8192

  19. *.db_file_name_convert='/data/oradata/FADB','/data/oradata/FADB_STB' # 新增,主库在前

  20. *.db_name='fadb'

  21. *.db_unique_name='fadb_stb' # 新增,主库、备库必须不一样

  22. *.db_recovery_file_dest='/data/fast_recovery_area'

  23. *.db_recovery_file_dest_size=85899345920

  24. *.deferred_segment_creation=FALSE

  25. *.diagnostic_dest='/u01/app/oracle'

  26. *.dispatchers='(PROTOCOL=TCP) (SERVICE=fadb_stbXDB)'

  27. *.fal_server='fadb' # 新增

  28. *.log_archive_config='DG_CONFIG=(fadb_stb,fadb)' # 新增

  29. *.log_archive_dest_1='location=use_db_recovery_file_dest VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=fadb_stb' # 新增

  30. *.log_archive_dest_2='service=fadb lgwr async valid_for=(online_logfiles,primary_role) db_unique_name=fadb' # 新增

  31. *.log_archive_dest_state_1='ENABLE' # 新增

  32. *.log_archive_dest_state_2='ENABLE' # 新增

  33. *.log_file_name_convert='/data/oradata/FADB','/data/oradata/FADB_STB' # 新增

  34. *.local_listener='LISTENER_FADB'

  35. *.log_buffer=268435456

  36. *.nls_language='AMERICAN'

  37. *.nls_territory='AMERICA'

  38. *.open_cursors=300

  39. *.pga_aggregate_target=4294967296

  40. *.processes=2000

  41. *.remote_login_passwordfile='EXCLUSIVE'

  42. *.sga_max_size=21474836480

  43. *.sga_target=21474836480

  44. *.undo_tablespace='UNDOTBS1'

复制

3.2 参数说明

  1. VALID_FOR参数说明

  2. VALID_FOR属性由2部分组成:archive_source(online_logfile,standby_logfile,all_logfiles)和database_role(primary_role,standby_role,all_role).

  3. online_logfile: 表示归档联机重做日志

  4. standby_logfile:表示归档备用数据库的重做日志/接受来自主库的重做日志

  5. all_logfiles: online_logfile && standby_logfile


  6. primary_role: 仅当数据库角色为主库时候生效

  7. standby_role: 仅当数据库角色为备库时候生效

  8. all_role: 任意角色均生效

复制

3.3 备库创建对应目录

  1. 备库创建对应目录

  2. mkdir -/u01/app/oracle/admin/fadb_stb/adump

  3. mkdir -/data/oradata/FADB_STB

复制

3.4 配置TNS

  1. FADB =

  2. (DESCRIPTION =

  3. (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.64.134)(PORT = 1521))

  4. (CONNECT_DATA =

  5. (SERVER = DEDICATED)

  6. (SERVICE_NAME = fadb)

  7. )

  8. )


  9. FADB_STB =

  10. (DESCRIPTION =

  11. (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.66.151)(PORT = 1521))

  12. (CONNECT_DATA =

  13. (SERVER = DEDICATED)

  14. (SERVICE_NAME = fadb_stb)

  15. )

  16. )


  17. LISTENER_FADB =

  18. (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.64.134)(PORT = 1521))


  19. 尝试在备库连接字符串登录主库

  20. sqlplus sys/Oracle_123@fadb as sysdba

复制

3.5 备库监听配置

  1. LISTENER =

  2. (DESCRIPTION_LIST =

  3. (DESCRIPTION =

  4. (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.66.151)(PORT = 1521))

  5. (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))

  6. )

  7. )


  8. SID_LIST_LISTENER =

  9. (SID_LIST =

  10. (SID_DESC =

  11. (GLOBAL_DBNAME = fadb_stb)

  12. (ORACLE_HOME=/u01/app/oracle/product/19c/db_1)

  13. (SID_NAME = fadb)

  14. )

  15. )


  16. 启动监听

  17. lsnrctl start

复制

3.6 拷贝主库的密码文件到备库

3.7 备库创建spfile

  1. create spfile from pfile='$ORACLE_HOME/dbs/init.ora';

  2. startup nomount

复制

4. 通过duplicate命令复制

在主库或备库中执行都可以,开始复制,复制时需要注意是否使用nofilenamecheck参数,如果两个实例相关数据目录结构完全相同,则需要指定,否则报错。

  1. RMAN> rman target sys/Oracle_123@fadb auxiliary sys/Oracle_123@fadb_stb

  2. RMAN> duplicate target database for standby from active database;

  3. duplicate target database for standby from active database dorecover nofilenamecheck)

  4. 或者

  5. run {

  6. allocate channel c1 type disk;

  7. allocate channel c2 type disk;

  8. allocate AUXILIARY channel c3 type disk;

  9. allocate AUXILIARY channel c4 type disk;

  10. duplicate target database for standby from active database dorecover nofilenamecheck;

  11. release channel c1;

  12. release channel c2;

  13. release channel c3;

  14. release channel c4;

  15. }

复制

5. 主库归档删除策略

  1. RMAN> CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON STANDBY;


  2. using target database control file instead of recovery catalog

  3. new RMAN configuration parameters:

  4. CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON STANDBY;

  5. new RMAN configuration parameters are successfully stored

  6. RMAN-08591: warning: invalid archived log deletion policy #告警



  7. CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON ALL STANDBY; #
    如果启用该策略且配置为APPLIED ON STANDBY子句,则所有强制standby位置被apply后,这些归档日志会被RMAN删除

  8. SHIPPED to ALL standby; #
    如果启用该策略且配置为SHIPPED ON STANDBY子句,则所有强制standby位置被成功传送后,这些归档日志会被RMAN删除

复制

6. 同步说明

备库建好后,默认状态是mount

  1. select database_role,open_mode,protection_mode from v$database;

复制

备库开启同步

  1. alter database recover managed standby database disconnect from session;

复制

查看主备库当前最新归档

  1. select unique thread#,max(sequence#) over(partition by thread#) last from v$archived_log;

复制

备库取消同步

  1. alter database recover managed standby database cancel;

复制

备库open

  1. alter database open; #read only模式

复制

备库开启同步

  1. alter database recover managed standby database disconnect from session; #启动mrp进程

复制

在12c之前版本中,MRP的默认配置是对备用数据库上的归档日志文件进行应用重做,从12c开始,默认配置是使用实时应用,直接从备用重做日志文件应用重做,当前版本为19c,备库开启同步后,默认是实时应用。

  1. alter database recover managed standby database using archived logfile disconnect; #(应用归档日志,非实时同步)

复制

查询是否为实时应用

  1. select dest_name,status,recovery_mode from v$archive_dest_status;

  2. select dest_name,status,type,database_mode,protection_mode,destination,applied_seq#,db_unique_name from v$archive_dest_status;

复制

在12c之前,例如11g,开启实时应用,需要如下命令

  1. alter database recover managed standby database using current logfile disconnect from session;

复制

7. 检查

  1. 检查主库

  2. select DEST_NAME,STATUS,ERROR from v$archive_dest where DEST_ID=2;

  3. select process,status,sequence# from v$managed_standby(v$dataguard_process );

  4. 检查备库

  5. select process,status,sequence# from v$managed_standby(v$dataguard_process );

  6. 验证主、备库传送路径是否正常

  7. set linesize 200 pagesize 1000

  8. set long 99999

  9. col dest_name for a50

  10. col destination for a50

  11. select dest_name,status,database_mode,destination

  12. from v$archive_dest_status where dest_id<3;

  13. 主库端检测是否存在日志缺陷:

  14. select status,gap_status from v$archive_dest_status where dest_id=2;


  15. 备库检查

  16. 验证接受日志以及日志应用进程是否正确

  17. select client_process,process,thread#,sequence#,status

  18. from v$managed_standby

  19. where client_process='LGWR' or process='MRP0'; # 如果是waiting_log_gap,则是存在未应用的日志


  20. 备库日志接收日志以及应用日志检查

  21. select thread#,sequence#,'Last Applied:' logs,

  22. to_char(next_time,'DD-MON-YYYY:HH24:MI:SS') Time

  23. from v$archived_log

  24. where sequence#=(select max(sequence#) from v$archived_log where applied='YES')

  25. union

  26. select thread#,sequence#,'Last Received:' Log,

  27. to_char(next_time,'DD-MON-YYYY:HH24:MI:SS') Time

  28. from v$archived_log

  29. where sequence#=(select max(sequence#) from v$archived_log);


  30. 备库端检测应用成功的最大日志序列

  31. select max(sequence#) from v$archived_log where applied='YES' and thread#=2;


  32. 备库端删除已经应用的日志

  33. delete archivelog sequence xxx thread 1;

复制

8. ADG切换验证

8.1 查看adg状态

  1. select * from v$dataguard_stats;

复制

8.2 主库查看

  1. SQL> select OPEN_MODE, DATABASE_ROLE, SWITCHOVER_STATUS, FORCE_LOGGING, DATAGUARD_BROKER, GUARD_STATUS from v$database;


  2. OPEN_MODE DATABASE_ROLE SWITCHOVER_STATUS FORCE_LOGGING DATAGUAR GUARD_S

  3. -------------------- ---------------- -------------------- --------------------------------------- -------- -------

  4. READ WRITE PRIMARY TO STANDBY YES DISABLED NONE


  5. SQL> alter database switchover to devops verify; #要求备库必须处于日志应用状态

  6. alter database switchover to devops verify

  7. *

  8. ERROR at line 1:

  9. ORA-16470: Redo Apply is not running on switchover target

复制

8.3 备库

  1. SQL> alter database recover managed standby database disconnect from session;


  2. Database altered.

复制

8.4 主库

  1. SQL> alter database switchover to devopsd verify;


  2. Database altered.


  3. SQL> alter database switchover to devopsd;


  4. Database altered.


  5. SQL> select database_role,open_mode,protection_mode from v$database; #执行完上一步后,数据库就挂了,必须重启

  6. select database_role,open_mode,protection_mode from v$database

  7. *

  8. ERROR at line 1:

  9. ORA-01034: ORACLE not available

  10. Process ID: 25001

  11. Session ID: 2 Serial number: 58596


  12. SQL> conn / as sysdba

  13. Connected to an idle instance. #这里说明数据库实例挂了

  14. SQL> startup

  15. ORACLE instance started.


  16. Total System Global Area 3607099528 bytes

  17. Fixed Size 8902792 bytes

  18. Variable Size 721420288 bytes

  19. Database Buffers 2868903936 bytes

  20. Redo Buffers 7872512 bytes

  21. Database mounted.

  22. Database opened.


  23. SQL> select database_role,open_mode,protection_mode from v$database;


  24. DATABASE_ROLE OPEN_MODE PROTECTION_MODE

  25. ---------------- -------------------- --------------------

  26. PHYSICAL STANDBY READ ONLY MAXIMUM PERFORMANCE


  27. 新备库启动并开启MRP

  28. SQL> alter database recover managed standby database disconnect from session;


  29. Database altered.

复制

8.5 源从库

  1. SQL> select database_role,open_mode,protection_mode from v$database; #在主库执行 switchover后,从库挂掉

  2. select database_role,open_mode,protection_mode from v$database

  3. *

  4. ERROR at line 1:

  5. ORA-03135: connection lost contact

  6. Process ID: 30809

  7. Session ID: 497 Serial number: 58174


  8. SQL> conn / as sysdba

  9. Connected.

  10. SQL> select open_mode from v$database;


  11. OPEN_MODE

  12. --------------------

  13. MOUNTED --- 实例由open only转为mounted


  14. SQL> alter database open;


  15. Database altered.


  16. select * from v$archive_gap;



  17. SQL> select database_role,open_mode,protection_mode from v$database;


  18. DATABASE_ROLE OPEN_MODE PROTECTION_MODE

  19. ---------------- -------------------- --------------------

  20. PRIMARY READ WRITE MAXIMUM PERFORMANCE

  21. 可以看到,源从库切换为了主库

复制

9. 备库归档删除任务

  1. mkdir /home/oracle/scripts

  2. cd /home/oracle/scripts

  3. vi del_arch.sh


  4. rman target / <<EOF >> /home/oracle/scripts/del_arch.log

  5. delete noprompt archivelog all completed before 'sysdate - 1/24';

  6. EOF


  7. crontab -e

  8. 0 * * * * /bin/sh /home/oracle/scripts/del_arch.sh

复制


文章转载自dblife,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论