当我们搭建了Oracle dagaguard双机热备架构后,如果主库需要对表空间新增数据文件,这个时候,备库是否能同步呢?
首先要查一下 STANDBY_FILE_MANAGEMENT这个参数

SQL> show parameter STANDBY_FILE_MANAGEMENT;
 
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
standby_file_management      string     AUTO

当数据库参数STANDBY_FILE_MANAGEMENT=AUTO的情况下,主库创建的数据文件,在备端应用日志时会自动创建(如果是正常路径的数据文件会根据convert参数在备库创建相对应的数据文件,如果是其他路径(即没有配置参数的路径)的数据文件,则会在备库创建与主库路径一致的数据文件(即使没有该路径,也会创建).同样 如果主库是drop,备库也会drop。

然而当不小心将参数设置STANDBY_FILE_MANAGEMENT=MANUAL的情况下,主库如果添加了一个数据文件,备库在应用日志时会报错:

File #24 added to control file as 'UNNAMED00024' because
the parameter STANDBY_FILE_MANAGEMENT is set to MANUAL
The file should be manually created to continue.
Errors with log /data/test/1_4609_811774267.dbf
MRP0: Background Media Recovery terminated with error 1274
Errors in file /opt/oracle/diag/rdbms/test/trace/test_00_5104.trc:
ORA-01274: cannot add datafile '/data/oradata/test/test.dbf' - file could not be created
Recovery interrupted!
Recovery stopped due to failure in applying recovery marker (opcode 17.30).
Datafiles are recovered to a consistent state at change 17175104292 but controlfile could be ahead of datafiles.

那是因为standby_file_management=MANUAL,被端不会自动创建该数据文件,但是其信息会记录在控制文件中:
此时查看控制文件信息:

SQL> select name from v$datafile;
/u01/oracle/dbs/UNNAMED00024

除了常规的数据文件外 多了一个UNNAMED的文件,
这个时候,需要根据/u01/oracle/dbs/UNNAMED00024在备库手工创建该数据文件,具体命令如下:

SQL>alter database create datafile '/u01/oracle/dbs/UNNAMED00024' as '/u01/oradata/orcl/test_1';
Database altered.

SQL> recover standby database;

如果是drop 数据文件,备库应用日志时不会报错,会在控制文件中drop掉该数据文件,但是物理上的文件仍然存在。
总结:所以在搭建Oracle dadaguard的时候,一定要记得将主备库的spfile参数文件都调整成:
STANDBY_FILE_MANAGEMENT=AUTO ,这样就保证两边表空间的数据文件保持一致!