能恢复,但必须异机RMAN恢复:在独立主机搭建辅助实例,用原RAC备份+归档还原表空间,再通过DBLINK或Data Pump导回数据;RMAN recover table在RAC下不适用,因依赖单机辅助实例,与OCR/ASM/集群机制冲突。
能恢复,但不能直接在原rac集群上操作——必须用rman异地恢复(即在独立主机上搭建辅助实例),再通过dblink或data pump把数据捞回。原集群不参与恢复过程,只提供备份、归档和dbid等元信息。
RMAN recover table 在 RAC 下不适用
Oracle 12c 的 recover table 命令看似便捷,但它要求目标数据库是单实例、读写模式、且不能是RAC中的任一节点。RAC环境下执行会报错:ORA-19566: exceeded limit of 0 corrupt blocks for file ... 或直接拒绝启动辅助实例。根本原因是该命令底层依赖自动创建的单机辅助实例(auxiliary instance),而RAC的OCR、ASM、集群注册机制与之冲突。
- 它只支持非SYS用户、非SYSTEM/SYSAUX表空间中的普通表
- 即使你手动指定
AUXILIARY DESTINATION,RMAN仍会尝试在本地节点起库,失败概率极高 - RAC中PDB里的表也不能直接用此命令恢复——必须先连CDB$ROOT,且备份需包含CDB级SYSTEM/UNDO
必须走异地表空间级恢复:核心步骤与避坑点
这是RAC误删表空间后最可靠、生产环境验证过的路径。本质是“用备份在新机器上还原出一个时间点一致的只读副本”,再导出数据。
- 新主机必须装同版本Oracle(如原RAC是12.1.0.2,则新机也得是12.1.0.2,补丁集最好一致)
- 目录结构尽量对齐:比如原RAC数据文件在
+DATA/orcl/datafile/,新机就建/u01/oradata/orcl/并用set newname映射过去 -
DBID必须从原RAC的v$database.dbid查出,RMAN里第一句就得set dbid xxx,否则restore controlfile会失败 - 控制文件必须从RMAN备份中恢复(不能用
backup controlfile to trace生成的SQL),因为trace文件不含归档日志序列链信息 - 恢复时用
restore tablespace TBS_NAME+recover database until time 'yyyy-mm-dd hh24:mi:ss',别用skip forever tablespace——那会导致SCN不一致,open时报ORA-01113
归档日志缺失或路径不匹配导致recover卡住
异地恢复最常卡在recover database阶段,报错类似:archived log for thread 1 with sequence 12345 not found 或 ORA-19505: failed to identify a file。这不是备份坏了,而是归档没拷全或路径没注册。
- 必须把所有归档日志(包括RAC所有instance的thread 1/2/…)都拷到新机同一目录下,例如
/backup/arch/ - RMAN里要显式
catalog start with '/backup/arch/',不能只靠crosscheck - 如果归档名含+ASM路径(如
+ARCH/.../arch_1_12345.arc),需提前用cp重命名成普通路径格式,否则catalog无法识别 - 遇到
redo log header corruption,通常是因为归档被截断,删掉提示的那几个日志文件再重试即可
数据捞回时DBLINK连不上或字符集错乱
辅助实例open read only后,主RAC用DBLINK查数据,常出现连接超时或中文变问号。这不是网络问题,而是初始化参数没对齐。
- 新主机的
listener.ora和tnsnames.ora必须配置正确,且lsnrctl status能看到服务已注册 - 主RAC建DBLINK前,先确认两边
NLS_CHARACTERSET一致:select * from nls_database_parameters where parameter='NLS_CHARACTERSET';不一致就改新机的init.ora加character_set=ZHS16GBK(按实际值填) - DBLINK用户名密码要用双引号包裹,避免大小写敏感问题:
create database link aux_link connect to "LEI" identified by "pwd123" using 'AUX_INST'; - 查数据时加
sqlplus / as sysdba进主库再执行,别用应用连接池——某些连接池会缓存字符集设置
整个过程最耗时的不是RMAN命令本身,而是归档日志的传输与catalog注册;最容易被忽略的是新主机的ulimit -n(文件描述符数),低于4096会导致RMAN并发channel失败。做完恢复后,记得清空新主机的$ORACLE_HOME/dbs下临时密码文件和spfile,避免残留敏感信息。


















