数据库管理163期 2024-03-23
数据库管理-第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),欢迎新老朋友在现场欢聚一堂。
总结
其实本期技术内容,算是炒炒冷饭,也算是一个总结。
老规矩,知道写了些啥。