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

Oracle 19c 单实例adg配置

原创 dbaking 2023-09-08
1254

本文是测试19c单实例的adg搭建,写的比较详细,可以供大家学习参考。

0.主备环境

属性 主库 备库
IP 192.168.24.7 192.168.24.8
架构 单实例 单实例
db_name prod proddg
db_unique_name prod proddg
instance prod proddg
data files /oracle/app/oracle/oradata/PROD/ /oracle/app/oracle/oradata/PROD/
control files /oracle/app/oracle/oradata/PROD/control01.ctl,/oracle/app/oracle/oradata/PROD/control02.ctl /oracle/app/oracle/oradata/PROD/control01.ctl,/oracle/app/oracle/oradata/PROD/control02.ctl
redolog files /oracle/app/oracle/oradata/PROD/ /oracle/app/oracle/oradata/PROD/

1.主库环境操作

1.1.检查数据库状态

1.1.1 检查数据库监听

ps -ef|grep tns lsnrctl status LISTENER
复制

1.1.2 检查数据库进程

ps -ef |grep pmon
复制

1.1.3 检查数据库的状态

select open_mode from v$database;
复制

1.1.4 建数据库的告警日志(最近2天)

set lines 199 pagesize 300 set COLSEP '|' col id for 9999999 col created for a18 col message_text for a140 SELECT record_id ID, to_char(originating_timestamp, 'yyyymmdd hh24:mi:ss') created, message_text FROM x$dbgalertext where originating_timestamp >= sysdate - 2 and (message_text like '%ORA-%' OR message_text LIKE '%fatal%' OR message_text LIKE '%error%' OR message_text LIKE '%terminating the instance%') ORDER BY RECORD_ID asc;
复制

1.2.业务检查

​ 由应用维护人员停止相关业务

1.3.数据库备份

1.3.1 创建备份目录/backup,并授予响应用户权限

mkdir -p /backup chmod 775 /backup chown oracle:oinstall /backup
复制

1.3.2 检查数据库是否打开归档

select log_mode from v$database;
复制

如果没有打开归档,需要重启数据库到mount,打开归档

  • 新建归档目录
mkdir -p /archivelog chmod 775 /archivelog chown oracle:oinstall /archivelog
复制
  • 修改归档路径
su - oracle sqlplus / as sysdba
复制
alter system set log_archive_dest_1='LOCATION=/archivelog'; shutdown immediate startup mount alter database archivelog; alter database open;
复制
  • 再次检查归档情况
select log_mode from v$database;
复制

1.3.3 切换到Oracle用户执行备份

su - oracle rman target /
复制
run { allocate channel c1 type disk; allocate channel c2 type disk; backup filesperset 3 database format '/backup/full_%d_%T_%s_%p'; sql 'alter system archive log current'; sql 'alter system archive log current'; sql 'alter system archive log current'; backup archivelog all format '/backup/arch_%d_%T_%s_%p' ; backup current controlfile format '/backup/ctl_%d_%T_%s_%p'; backup spfile format '/backup/spfile_%d_%T_%s_%p'; release channel c1; release channel c2; }
复制

1.4.检查密码文件是否创建

密码文件一般创建数据库的时候就已经默认创建了的

cd $ORACLE_HOME/dbs ls -ltr orapw*
复制

1.5.复制密码文件到备份目录

cp orapwprod /backup/orapwproddg
复制

1.6.检查force_logging模式是否开启

1.6.1 先确认是否在force_logging模式

select force_logging from v$database;
复制

1.6.2 如果force_logging未打开,需要打开force_logging

强制对数据库中所有对象启用LOGGING,避免有些表没使用LOG。
打开force_logging不用重启数据库。

alter database force logging;
复制

1.6.3 再确认是否成功修改force_logging模式

select force_logging from v$database;
复制

1.7.创建Standby redolog

给主库创建standby的redo日志组,方便角色切换为备库时使用,容量要和redo相同,数量是redo当前数量+1
要求:Standby Redo Log与Online Redo Log大小一致;
组数:【(maximum number of logfiles for each thread + 1) * maximum number of threads】即(每个节点的logfile数+1)*节点数

1.7.1 检查主库的日志情况

set lines 168 pages 168 col member for a50 select GROUP#,THREAD#,BYTES/1024/1024 mb,MEMBERS from v$log; select group#,type,member from v$logfile; select THREAD#,group#,sequence#,status, bytes/1024/1024 from v$standby_log;
复制

1.7.2 创建standby redolog

alter database add standby logfile thread 1 group 4 '/oracle/app/oracle/oradata/PROD/redo04.log' size 200M; alter database add standby logfile thread 1 group 5 '/oracle/app/oracle/oradata/PROD/redo05.log' size 200M; alter database add standby logfile thread 1 group 6 '/oracle/app/oracle/oradata/PROD/redo06.log' size 200M; alter database add standby logfile thread 1 group 7 '/oracle/app/oracle/oradata/PROD/redo07.log' size 200M;
复制

1.7.3 再次检查主库的日志情况

set lines 168 pages 168 col member for a50 select GROUP#,THREAD#,BYTES/1024/1024 mb,MEMBERS from v$log; select group#,type,member from v$logfile; select THREAD#,group#,sequence#,status, bytes/1024/1024 from v$standby_log;
复制

1.8.配置listener.ora文件

一般需要为adg单独配置一个监听,以免影响生产环境。监听文件添加以下内容:

cd $ORACLE_HOME/network/admin
vi listener.ora
复制
SID_LIST_LISTENER_ADG = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = prod) (ORACLE_HOME = /oracle/app/oracle/product/19.3.0/db_1) (SID_NAME = prod) ) ) LISTENER_ADG = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.24.7)(PORT = 1530)) )
复制

启动adg监听

lsnrctl start LISTENER_ADG
复制

检查adg监听状态

lsnrctl status LISTENER_ADG
复制

检查静态监听是否可以使用

sqlplus sys/oracle@192.168.24.7:1530/prod as sysdba
复制

1.9.配置tnsnames.ora文件

配置的是专有连接

cd $ORACLE_HOME/network/admin vi tnsnames.ora
复制
prodpri= (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST=192.168.24.7)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME =prod) ) ) prodstd= (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST=192.168.24.8)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME =proddg) ) )
复制

检查tnsnames.ora配置是否有问题,备库还没有配置,所以不用检测

tnsping prodpri
复制

非专有连接配置,只是给出来参考,不用配置。

prodpri= (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST =192.168.24.7)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = prod) ) )
复制

1.10.配置参数文件

1.10.1 检查关于dg配置的几个参数

检查相关参数,并记录相关参数

SQL> show parameter db_unique_name --当前为prod SQL> show parameter service_names --当前为prod SQL> show parameter log_archive_config --当前为空 SQL> show parameter fal_server --当前为空 SQL> show parameter standby_file_management --当前为MANUAL SQL> show parameter log_archive_dest_1 --当前为 LOCATION=/archivelog SQL> show parameter log_archive_dest_2 --当前为空 SQL> archive log list --当前为/archivelog SQL> show parameter db_recovery -- NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ db_recovery_file_dest string /oradata db_recovery_file_dest_size big integer 50G
复制

1.10.2 修改参数

--修改参数 alter system set db_unique_name=prod; --有值可以不用修改 alter system set log_archive_config='DG_CONFIG=(prod,proddg)'; --主备库db_unique_name列表 alter system set fal_server=prodpri; --tnsnames.ora配置的连接主库的连接串名,主库切换成备库的时候使用 alter system set fal_client=prodstd; --tnsnames.ora配置的连接备库库的连接串名,该参数11g已经弃用,可以不用配置 alter system set standby_file_management='AUTO'; --主库切换成备库的时候使用,主库添加数据文件时自动同步创建数据文件 alter system set log_archive_dest_2='SERVICE=prodstd LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=proddg'; alter system set log_archive_dest_state_2=defer; --先停用该参数,备库恢复到mount的时候再启用 alter system set db_file_name_convert='/oradata/','/u01/oradata/' scope=spfile; --主库切换成备库的时候使用,当主备库数据文件路径不一样时进行转换 alter system set log_file_name_convert='/oradata/','/u01/oradata/' scope=spfile; --主库切换成备库的时候使用,当主备库日志文件路径不一样时进行转换
复制

1.11备份参数文件到备份目录

备份参数文件到备份目录

create pfile='/backup/pfile20230908.ora' from spfile;
复制

2.将主库的备份文件拷贝备库

2.1 检查主库的备份文件

ls -l /backup/
复制

2.2 备库环境上创建存放主库备份的目录

mkdir /backup chmod 775 /backup chown oracle:oinstall /backup
复制

2.3 拷贝主库文件到备库

scp -P 22 /backup/* 192.168.24.8:/backup
复制

3.备库环境操作

3.1 检查主库拷贝过来的备份文件

ls -l /backup/
复制

3.2 配置备库监听文件

一般需要为adg单独配置一个监听,以免影响生产环境。监听文件添加以下内容:

cd $ORACLE_HOME/network/admin
vi listener.ora
复制
SID_LIST_LISTENER_ADG = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = prod) (ORACLE_HOME = /oracle/app/oracle/product/19.3.0/db_1) (SID_NAME = prod) ) ) LISTENER_ADG = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.24.8)(PORT = 1530)) )
复制

启动adg监听

lsnrctl start LISTENER_ADG
复制

检查adg监听状态

lsnrctl status LISTENER_ADG
复制

检查静态监听是否可以使用

sqlplus  sys/oracle@192.168.24.8:1530/prod  as sysdba
复制

3.3 配置tnsnames.ora文件

配置的是专有连接

cd $ORACLE_HOME/network/admin vi tnsnames.ora
复制
prodpri= (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST=192.168.24.7)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME =prod) ) ) prodstd= (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST=192.168.24.8)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME =proddg) ) )
复制

检查tnsnames.ora配置是否有问题,备库已经配置监听,可以检测

tnsping prodpri tnsping prodstd
复制

3.4 恢复口令文件

cd /backup/ cp orapwproddg $ORACLE_HOME/dbs cd $ORACLE_HOME/dbs ls -l
复制

3.5 恢复参数文件并配置为备库参数文件

cd /backup/ cp pfile20230908.ora $ORACLE_HOME/dbs/initproddg.ora
复制
*.audit_file_dest='/oracle/app/oracle/admin/prod/adump' *.audit_trail='db' *.compatible='19.0.0' *.control_files='/oracle/app/oracle/oradata/PROD/control01.ctl','/oracle/app/oracle/oradata/PROD/control02.ctl' *.db_block_size=8192 *.db_name='prod' *.db_unique_name=proddg *.diagnostic_dest='/oracle/app/oracle' *.dispatchers='(PROTOCOL=TCP) (SERVICE=prodXDB)' *.fal_client='PRODPRI' *.fal_server='PRODSTD' *.local_listener='LISTENER_PROD' *.log_archive_config='DG_CONFIG=(prod,proddg)' *.log_archive_dest_1='LOCATION=/archivelog' *.log_archive_dest_2='SERVICE=prodpri LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=prod' *.log_archive_dest_state_2='enable' *.nls_language='AMERICAN' *.nls_territory='AMERICA' *.open_cursors=300 *.pga_aggregate_target=2048m *.processes=640 *.remote_login_passwordfile='EXCLUSIVE' *.sga_target=6144m *.standby_file_management='AUTO' *.undo_tablespace='UNDOTBS1'
复制
mkdir -p /oracle/app/oracle/admin/prod/adump mkdir -p /archivelog chmod 775 /archivelog chown oracle:oinstall /archivelog
复制

3.6 启动数据库到nomount

3.6.1 将数据库启动nomount状态

startup nomount
复制

3.6.2 验证口令文件是否可以使用

sqlplus sys/oracle@192.168.3.119:1530/proddg as sysdba
复制

3.6.3 创建spfile

create spfile from pfile;
复制

3.6.4使用spfile启动数据库到mount

shutdown immediate startup nomount show parameter spfile
复制

3.7 恢复控制文件并启动到mount

3.7.1 恢复控制文件

cd /backup/ ls -l rman target / restore standby controlfile from '/backup/ctl_PROD_20230908_7_1';
复制

3.7.2 启动数据库到mount

alter database mount;
复制

3.7.3 恢复standby redolog

alter database add standby logfile thread 1 group 4 '/oracle/app/oracle/oradata/PROD/redo04.log' size 200M; alter database add standby logfile thread 1 group 5 '/oracle/app/oracle/oradata/PROD/redo05.log' size 200M; alter database add standby logfile thread 1 group 6 '/oracle/app/oracle/oradata/PROD/redo06.log' size 200M; alter database add standby logfile thread 1 group 7 '/oracle/app/oracle/oradata/PROD/redo07.log' size 200M;
复制

3.8 恢复数据文件

扫描识别备份文件,如果主库备份时的路径与备库备份存放的路径一样则可以不用重新扫描识别。

catalog start with '/backup';
复制

还原数据文件

restore database;
复制

3.9 打开主库log_archive_dest_state_2

3.9.1 打开主库log_archive_dest_state_2

alter system set log_archive_dest_state_2=enable;
复制

3.9.2 切主库归档,多切几次

alter system switch logfile; alter system switch logfile; alter system switch logfile;
复制

3.9.2 检查主库日志是否传输到了备库,可以切几次归档再检查

alter session set nls_date_format='yyyy-mm-dd hh:mi:ss'; col MESSAGE for a98 set lines 199 select FACILITY,SEVERITY,DEST_ID,MESSAGE_NUM,ERROR_CODE,CALLOUT,TIMESTAMP,MESSAGE from v$dataguard_status;
复制

3.9.3 检查备库日志是否接收到了日志

alter session set nls_date_format='yyyy-mm-dd hh:mi:ss'; col MESSAGE for a98 set lines 199 select FACILITY,SEVERITY,DEST_ID,MESSAGE_NUM,ERROR_CODE,CALLOUT,TIMESTAMP,MESSAGE from v$dataguard_status;
复制

3.8 recover database

3.8.1 在rman中操作

recover database;
复制

3.8.2 打开数据

alter database open;
复制

3.9 启用日志实时应用

alter database recover managed standby database using current logfile disconnect from session;
复制

如果要取消日志实时应用,则执行以下语句

alter database recover managed standby database cancel;
复制

3.10 检查备库的数据同步情况

一般情况会使用以下方法查询同步情况,但是有时候不准,需要检查备库与主库的scn号是否同步才行,不能同步的时候一般是重启日志的实时应用,就是3.9的步骤。

set line 1000 pages 1000 col value for a30 select SOURCE_DBID,SOURCE_DB_UNIQUE_NAME,NAME,VALUE, from V$DATAGUARD_STATS ;
复制

检查主库的current_scn

select current_scn from v$database;
复制

检查备库库的current_scn

select current_scn from v$database;
复制

3.11 主备库搭建完美完成

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

目录
  • 0.主备环境
  • 1.主库环境操作
    • 1.1.检查数据库状态
      • 1.1.1 检查数据库监听
      • 1.1.2 检查数据库进程
      • 1.1.3 检查数据库的状态
      • 1.1.4 建数据库的告警日志(最近2天)
    • 1.2.业务检查
    • 1.3.数据库备份
      • 1.3.1 创建备份目录/backup,并授予响应用户权限
      • 1.3.2 检查数据库是否打开归档
      • 1.3.3 切换到Oracle用户执行备份
    • 1.4.检查密码文件是否创建
    • 1.5.复制密码文件到备份目录
    • 1.6.检查force_logging模式是否开启
      • 1.6.1 先确认是否在force_logging模式
      • 1.6.2 如果force_logging未打开,需要打开force_logging
      • 1.6.3 再确认是否成功修改force_logging模式
    • 1.7.创建Standby redolog
      • 1.7.1 检查主库的日志情况
      • 1.7.2 创建standby redolog
    • 1.8.配置listener.ora文件
    • 1.9.配置tnsnames.ora文件
    • 1.10.配置参数文件
      • 1.10.1 检查关于dg配置的几个参数
      • 1.10.2 修改参数
    • 1.11备份参数文件到备份目录
  • 2.将主库的备份文件拷贝备库
    • 2.1 检查主库的备份文件
    • 2.2 备库环境上创建存放主库备份的目录
    • 2.3 拷贝主库文件到备库
  • 3.备库环境操作
    • 3.1 检查主库拷贝过来的备份文件
    • 3.2 配置备库监听文件
    • 3.3 配置tnsnames.ora文件
    • 3.4 恢复口令文件
    • 3.5 恢复参数文件并配置为备库参数文件
    • 3.6 启动数据库到nomount
      • 3.6.1 将数据库启动nomount状态
      • 3.6.2 验证口令文件是否可以使用
      • 3.6.3 创建spfile
      • 3.6.4使用spfile启动数据库到mount
    • 3.7 恢复控制文件并启动到mount
      • 3.7.1 恢复控制文件
      • 3.7.2 启动数据库到mount
      • 3.7.3 恢复standby redolog
    • 3.8 恢复数据文件
    • 3.9 打开主库log_archive_dest_state_2
    • 3.8 recover database
      • 3.8.1 在rman中操作
      • 3.8.2 打开数据
    • 3.9 启用日志实时应用
    • 3.10 检查备库的数据同步情况
    • 3.11 主备库搭建完美完成