数据库管理-第163期 19c重建ADG的两个方法(20240323

数据库管理-第163期 19c重建ADG的两个方法(20240323)

作者:胖头鱼的鱼缸(尹海文)
Oracle ACE Associate: Database(Oracle与MySQL)
国内某科技公司 DBA总监
10年数据库行业经验,现主要从事数据库服务工作
拥有OCM 11g/12c/19c、MySQL 8.0 OCP、Exadata、CDP等认证
墨天轮MVP、认证技术专家、年度墨力之星,ITPUB认证专家,OCM讲师
圈内拥有“总监”、“保安”、“国产数据库最大敌人”等称号,非著名社恐(社交恐怖分子)
公众号:胖头鱼的鱼缸;CSDN:胖头鱼的鱼缸(尹海文);墨天轮:胖头鱼的鱼缸;ITPUB:yhw1809。
除授权转载并标明出处外,均为“非法”抄袭。

这周就写了两篇文章,之前还有些事没有记录下来,多写写吧。

1 ORA-08103

祖上X8那台Exadata也是和X9M一样,用的4台4U服务器+集中存储做的ADG备库,突然有一天,业务方说,从备库取的外部数据报了下面的错:

ORA-08103: object no longer exists

从DG Broker上看,同步没有报错,但是确实在备库,有些表就是不存在,而主库上则是正常的。在业务方暂时将外部读取转回了备库。为了减少外部数据拉取对主库的影响(其实影响不大,主要是这台跑的业务系统太重要了),没有时间去探求为啥会出现ORA-08103的问题,因此想着恢复一下。

2 新办法

在19c中有一种不用重建DG恢复数据的方法,简单点说就是就是通过网络增量恢复数据文件。这种方法适用于归档丢失产生GAP和其他一些问题。
具体操作流程如下:

1 关闭MRP

sqlplus> alter database recover managed standby database cancel;
or
DGMGRL> edit database dbdg set state='APPLY-OFF';

2 恢复备库

RMAN> recover standby database from service dbaas;

3 其他操作

可能需要重建standby logfile

4 启动备库

sqlplus> startup nomount
sqlplus> alter database mount standby database;
sqlplus> alter database open read only;

5 启动MRP

sqlplus> alter database recover managed standby database using current logfile disconnect from session;
or
DGMGRL> edit database dbdg set state='APPLY-ON';

然而用这种方式在open数据库的时候总在报错,显示使用过期的备份数据文件,无法恢复。多次尝试仍然没办法,因此只能用笨办法了。但是不得不说,这种方式至少从流程上,比全量重新同步快多了。

3 老办法

老办法当然是需要重建ADG,从duplicate target database开始,这里可以去《数据库管理-第八十期 Exadata to RAC(x86) ADG(20230605)》去看看。这里需要注意一点的是,在DG Broker中remove configuration后,执行以下操作:

alter system set dg_broker_start=false;

并删除下面两个参数配置的对应文件:

show parameter dg_broker_config_file1
show parameter dg_broker_config_file2

asmcmd> rm +DATAC1/to/file1
asmcmd> rm +RECOC1/to/file2

然后再进行对应操作。

4 预告

2024数据技术嘉年华议程已出(详见https://www.modb.pro/dtc2024),欢迎新老朋友在现场欢聚一堂。
image.png

总结

其实本期技术内容,算是炒炒冷饭,也算是一个总结。
老规矩,知道写了些啥。

要在Oracle 19c中搭建ADG(Active Data Guard),需要执行以下步骤: 1. 在主数据库上启用归档模式: ``` SQL> ALTER DATABASE ARCHIVELOG; ``` 2. 创建一个备用数据库的实例: ``` $ export ORACLE_SID=ORACLE_19C_ADG $ sqlplus / as sysdba SQL> CREATE SPFILE FROM PFILE; ``` 3. 将主数据库的备份复制到备用服务器上,并在备用服务器上还原备份: ``` $ scp /backup/maindb/* oracle@adg_server:/backup/adg/ $ cd /backup/adg/ $ unzip maindb_backup.zip $ export ORACLE_SID=ORACLE_19C_ADG $ rman target / RMAN> DUPLICATE DATABASE FOR STANDBY FROM ACTIVE DATABASE SPFILE SET db_unique_name='ORACLE_19C_ADG' SET LOG_ARCHIVE_DEST_2='SERVICE=ORACLE_19C ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=ORACLE_19C' SET fal_client='ORACLE_19C' SET fal_server='ORACLE_19C_ADG' NOFILENAMECHECK; ``` 4. 配置主数据库的tnsnames.ora文件和备用数据库的tnsnames.ora文件,以便它们互相访问。 5. 在主数据库上创建一个log shipping连接,并将日志传输到备用数据库: ``` SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=ORACLE_19C_ADG ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=ORACLE_19C_ADG' SCOPE=BOTH; SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=ENABLE SCOPE=BOTH; ``` 6. 在备用数据库上启用日志应用: ``` SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION; ``` 完成上述步骤后,ADG就已经搭建完成了。可以使用以下命令检查ADG的状态: ``` SQL> SELECT DATABASE_ROLE FROM V$DATABASE; ``` 如果返回的结果为“PHYSICAL STANDBY”,则表示ADG已经成功搭建。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胖头鱼的鱼缸(尹海文)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值