我有一台 Oracle 18c XE 服务器,其中主 XE 数据库的 system01.dbf 文件损坏。
所有用户数据都在 PDB 数据库中,幸运的是,该数据库看起来没问题(PDB 现在正在生产中运行)。
问题是我无法使用 备份 PDB expdp
,因为expdp
出现以下错误:
UDE-00604: operation generated ORACLE error 604
ORA-00604: errore riscontrato in SQL ricorsivo livello 2
ORA-01578: blocco dati ORACLE danneggiato (file # 1, blocco # 636)
ORA-01110: file di dati 1: '/opt/oracle/oradata/XE/system01.dbf'
同样,我无法连接 RMAN,因为出现同样的错误:
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-00554: initialization of internal recovery manager package failed
RMAN-04005: error from target database:
ORA-00604: errore riscontrato in SQL ricorsivo livello 2
ORA-01578: blocco dati ORACLE danneggiato (file # 1, blocco # 636)
ORA-01110: file di dati 1: '/opt/oracle/oradata/XE/system01.dbf'
RMAN-04015: error setting target database character set to US7ASCII
为了简单起见,我只想备份 PDB,然后从头开始删除并重新安装整个 18c XE 数据库,然后恢复 PDB(不需要恢复任何内容,因为损坏发生在主 XE 数据库中,而 PDB 没问题)。
有没有办法做到这一点?
我没有以前的 RMAN 备份,因为我一直用进行所有备份expdp
,但是备份现在已经很旧了,因为expdp
几天前可能发生损坏时它就停止工作了。
更新
最终唯一可行的解决方案是:
- 在另一台机器上安装 Oracle 18c XE
expdp
从旧转储中恢复新机器上没有行的数据库模式- 创建从新机器到正在运行的 PDB 的原始服务器的数据库链接
- 手动将
INSERT INTO ... SELECT
所有表从原始链接服务器迁移到新机器 expdp
用新机器转储- 在原始服务器上重新安装 Oracle 并导入新创建的转储
答案1
系统表空间 (system01.dbf) 包含由容器和可插拔数据库共享的数据字典对象。您无法备份 PDB,在 CDB 未运行的情况下无法打开它进行访问。我认为您需要从较早的 RMAN 备份中恢复系统表空间,然后才能对 PDB 进行新的备份或将其拔出。
请参阅此处了解更多指导:https://oracle-base.com/articles/12c/multitenant-rman-backup-recovery-cdb-and-pdb-12cr1#cdb-recovery