oracle 19c adg中主库加表空间备库不会自动同步,必须主备库分别执行create tablespace语句且路径、文件名、大小严格一致;omf环境下备库不触发自动命名,需查主库实际文件名后手动复用。

主库加表空间,备库不会自动同步
Oracle 19c ADG 中,ALTER TABLESPACE ... ADD DATAFILE 操作只在主库生效,物理备库**完全不会自动创建对应数据文件**。这是因为 standby_file_management=auto 只管 DATAFILE(永久段),不管 TEMPFILE,更不延伸到新建表空间本身。备库上缺失该文件会导致后续切换或只读查询报 ORA-01157(无法识别数据文件)或 ORA-01110(文件不存在)。
必须分两步:先主库建,再备库手动加
不能依赖“一次命令两边生效”,必须显式在两个库分别执行。关键点是路径和命名要严格对齐:
- 主库执行:
CREATE TABLESPACE app_ts DATAFILE '/u01/oradata/ORCL/app_ts01.dbf' SIZE 1G AUTOEXTEND ON NEXT 100M MAXSIZE 10G; - 备库执行前先确认目录存在且 oracle 用户有写权限:
ls -ld /u01/oradata/ORCL/ - 备库执行(路径、文件名、大小必须与主库一致):
CREATE TABLESPACE app_ts DATAFILE '/u01/oradata/ORCL/app_ts01.dbf' SIZE 1G AUTOEXTEND ON NEXT 100M MAXSIZE 10G; - 若用 ASM,主备都得用 ASM 别名格式(如
'+DATA/ORCL/DATAFILE/app_ts.257.123456789'),不能拼接字符串
OMF 环境下更需谨慎
如果主库启用了 DB_CREATE_FILE_DEST(即 OMF),主库建表空间可省略文件路径:CREATE TABLESPACE app_ts DATAFILE SIZE 1G;。但备库**不会自动生成同名文件**——OMF 规则在备库不触发。此时你必须:
- 查主库实际生成的文件名:
SELECT file_name FROM dba_data_files WHERE tablespace_name = 'APP_TS'; - 把查到的完整 ASM 或文件系统路径,原样用于备库的
CREATE TABLESPACE语句中 - 不能在备库也用
SIZE 1G让 OMF 自建,否则文件名不同,备库恢复进程会拒绝应用日志
验证与收尾不能跳过
主备都执行完后,别以为就结束了。容易被忽略的是容器上下文和状态检查:
- 多租户环境下,确保你在 CDB$ROOT 执行(建公用表空间)或已
ALTER SESSION SET CONTAINER = pdb_name(建 PDB 专属表空间) - 主库验证:
SELECT tablespace_name, file_name FROM dba_data_files WHERE tablespace_name = 'APP_TS'; - 备库验证(必须在 MOUNT 或 OPEN READ ONLY WITH APPLY 状态下):
SELECT name FROM v$datafile WHERE name LIKE '%app_ts%'; - 检查备库是否真正识别该文件:
SELECT status, enabled FROM v$datafile WHERE name = '/u01/oradata/ORCL/app_ts01.dbf';—— status 应为ONLINE,enabled 应为READ WRITE(即使库是只读,datafile 的 enabled 状态仍是 READ WRITE)
最常漏掉的是备库上文件权限或路径不存在,导致看似执行成功,实则文件未落盘,下次日志应用时直接中断。











