一般情况下,会采用自动管理standby数据库文件文件的方式,但是有时候会采用手工方式管理,比如standby数据库使用裸设备的情况。
  
看一个例子:
SQL> select name, open_mode, database_role, db_unique_name

  2  from v$database;

NAME                           OPEN_MODE  DATABASE_ROLE    DB_UNIQUE_NAME

------------------------------ ---------- ---------------- ------------------------------

PRIMARY                        READ WRITE PRIMARY          primary

SQL> select name from v$datafile;

NAME

----------------------------------------

/data/oradata/primary/system01.dbf

/data/oradata/primary/undotbs01.dbf

/data/oradata/primary/sysaux01.dbf

/data/oradata/primary/users01.dbf

/data/oradata/primary/test01.dbf

检查standby数据库文件信息:
SQL> select name, open_mode, database_role, db_unique_name

  2  from v$database;

NAME                           OPEN_MODE  DATABASE_ROLE    DB_UNIQUE_NAME

------------------------------ ---------- ---------------- ------------------------------

PRIMARY                        MOUNTED    PHYSICAL STANDBY standby

SQL> select name from v$datafile;

NAME

-----------------------------------

/data/oradata/standby/system01.dbf

/data/oradata/standby/undotbs01.dbf

/data/oradata/standby/sysaux01.dbf

/data/oradata/standby/users01.dbf

/data/oradata/standby/test01.dbf

SQL> show parameter standby_file

NAME                            TYPE        VALUE

------------------------------- ----------- ------------------------------

standby_file_management         string      AUTO

SQL> show parameter convert

NAME                            TYPE        VALUE

------------------------------- ----------- ------------------------------

db_file_name_convert            string      /data/oradata/primary, /data/oradata/standby

log_file_name_convert           string      /data/oradata/primary, /data/oradata/standby

虽然主库和备库的文件路径不一致,但是standby数据库配置了file_name_convert参数,Oracle可以根据主库的名称自动创建备库的数据文件:
SQL> create tablespace new         

  2  datafile '/data/oradata/primary/new01.dbf'

  3  size100m;

Tablespace created.

SQL> alter system switch logfile;

System altered.

检查备库的数据文件添加情况:
SQL> select name from v$datafile;

NAME

----------------------------------------

/data/oradata/standby/system01.dbf

/data/oradata/standby/undotbs01.dbf

/data/oradata/standby/sysaux01.dbf

/data/oradata/standby/users01.dbf

/data/oradata/standby/test01.dbf

/data/oradata/standby/new01.dbf

6 rows selected.

下面将standby数据库的数据文件管理设置手工状态:
SQL> alter system set standby_file_management = manual;

System altered.

这时主库增加新的数据文件:
SQL> alter tablespace new   

  2  add datafile '/data/oradata/primary/new02.dbf'

  3  size100m;

Tablespace altered.

SQL> alter system switch logfile;

System altered.

检查standby数据库的数据文件信息:
SQL> select name from v$datafile;

NAME

--------------------------------------------------

/data/oradata/standby/system01.dbf

/data/oradata/standby/undotbs01.dbf

/data/oradata/standby/sysaux01.dbf

/data/oradata/standby/users01.dbf

/data/oradata/standby/test01.dbf

/data/oradata/standby/new01.dbf

/opt/ora10g/product/10.2.0/db_1/dbs/UNNAMED00007

7 rows selected.

检查alert文件可以看到:
Fri Dec 24 05:34:35 2010

RFS[6]: Archived Log: '/data/oradata/standby/archivelog/1_15_737020478.dbf'

Primary database is in MAXIMUM PERFORMANCE mode

RFS[6]: No standby redo logfiles created

Fri Dec 24 05:34:35 2010

Media Recovery Log /data/oradata/standby/archivelog/1_15_737020478.dbf

Recovery created file /data/oradata/standby/new01.dbf

Successfully added datafile 6 to media recovery

Datafile #6: '/data/oradata/standby/new01.dbf'

Media Recovery Waiting for thread 1 sequence 16 (in transit)

Fri Dec 24 05:35:26 2010

ALTER SYSTEM SET standby_file_management='MANUAL' SCOPE=MEMORY;

Fri Dec 24 05:36:16 2010

RFS[6]: Archived Log: '/data/oradata/standby/archivelog/1_16_737020478.dbf'

Primary database is in MAXIMUM PERFORMANCE mode

RFS[6]: No standby redo logfiles created

Fri Dec 24 05:36:16 2010

Media Recovery Log /data/oradata/standby/archivelog/1_16_737020478.dbf

File #7 added to control file as 'UNNAMED00007' because

the parameter STANDBY_FILE_MANAGEMENT is set to MANUAL

The file should be manually created to continue.

Errors with log /data/oradata/standby/archivelog/1_16_737020478.dbf

MRP0: Background Media Recovery terminated with error 1274

Fri Dec 24 05:36:16 2010

Errors in file /opt/ora10g/admin/standby/bdump/standby_mrp0_17670.trc:

ORA-01274: cannot add datafile '/data/oradata/primary/new02.dbf' - file could not be created

Some recovered datafiles maybe left media fuzzy

Media recovery may continue but open resetlogs may fail

Fri Dec 24 05:36:17 2010

Errors in file /opt/ora10g/admin/standby/bdump/standby_mrp0_17670.trc:

ORA-01274: cannot add datafile '/data/oradata/primary/new02.dbf' - file could not be created

Fri Dec 24 05:36:17 2010

MRP0: Background Media Recovery process shutdown (standby)

可以看到,由于需要手工介入创建数据文件,Oracle自动停止了恢复过程。
下面通过手工方式添加新的数据文件:
SQL> alter database create datafile 

  2  '/opt/ora10g/product/10.2.0/db_1/dbs/UNNAMED00007'

  3  as '/data/oradata/standby/new02.db';

Database altered.

SQL> select name from v$datafile;

NAME

--------------------------------------------------

/data/oradata/standby/system01.dbf

/data/oradata/standby/undotbs01.dbf

/data/oradata/standby/sysaux01.dbf

/data/oradata/standby/users01.dbf

/data/oradata/standby/test01.dbf

/data/oradata/standby/new01.dbf

/data/oradata/standby/new02.db

7 rows selected.

SQL> alter database recover managed standby database disconnect from session;

启动standby数据库的恢复:
Fri Dec 24 05:49:16 2010

alter database create datafile

'/opt/ora10g/product/10.2.0/db_1/dbs/UNNAMED00007'

as '/data/oradata/standby/new02.db'

Fri Dec 24 05:49:17 2010

Completed: alter database create datafile

'/opt/ora10g/product/10.2.0/db_1/dbs/UNNAMED00007'

as '/data/oradata/standby/new02.db'

Fri Dec 24 05:51:22 2010

alter database recover managed standby database disconnect from session

Fri Dec 24 05:51:22 2010

Attempt to start background Managed Standby Recovery process (standby)

MRP0 started with pid=18, OS id=22218

Fri Dec 24 05:51:22 2010

MRP0: Background Managed Standby Recovery process started (standby)

Managed Standby Recovery not using Real Time Apply

 parallel recovery started with 7 processes

Media Recovery Log /data/oradata/standby/archivelog/1_16_737020478.dbf

Media Recovery Waiting for thread 1 sequence 17 (in transit)

Fri Dec 24 05:51:28 2010

Completed: alter database recover managed standby database disconnect from session

从日志中可以看到,STANDBY恢复正常。