基于用户管理的同机数据库克隆(二)
er_dump_dest目录下
SQL> alter database backup controlfile to trace resetlogs;
--备份原数据库,如果数据库文件较多,使用热备脚本来完成
SQL> alter database begin backup;
--复制数据库文件到目标数据库目录
SQL> host cp /u01/database/sybo3/oradata/* /u01/database/sybo4/oradata
SQL> alter database end backup;
--e、启动目标数据库到nomount状态并创建控制文件
$ export ORACLE_SID=sybo4
$ sqlplus / as sysdba
SQL> startup nomount pfile=/u01/oracle/db_1/dbs/initsybo4.ora;
ORACLE instance started.
SQL> get sybo4ctl.sql
1 CREATE CONTROLFILE SET DATABASE "sybo4" RESETLOGS ARCHIVELOG
2 MAXLOGFILES 16
3 MAXLOGMEMBERS 3
4 MAXDATAFILES 100
5 MAXINSTANCES 8
6 MAXLOGHISTORY 292
7 LOGFILE
8 GROUP 1 '/u01/database/sybo4/redo/redo01.log' SIZE 50M BLOCKSIZE 512,
9 GROUP 2 '/u01/database/sybo4/redo/redo02.log' SIZE 50M BLOCKSIZE 512,
10 GROUP 3 '/u01/database/sybo4/redo/redo03.log' SIZE 50M BLOCKSIZE 512
11 DATAFILE
12 '/u01/database/sybo4/oradata/system01.dbf',
13 '/u01/database/sybo4/oradata/sysaux01.dbf',
14 '/u01/database/sybo4/oradata/undotbs01.dbf',
15 '/u01/database/sybo4/oradata/users01.dbf',
16 '/u01/database/sybo4/oradata/example01.dbf'
17 CHARACTER SET AL32UTF8
18* ;
SQL> @sybo4ctl.sql
Control file created.
SQL> alter database mount; -->注意创建控制文件之后,数据库已经被mount,如下我们收到了错误提示
alter database mount
*
ERROR at line 1:
ORA-01100: database already mounted
--上面我们修改了控制文件脚本,使用了set database以及resetlogs方式来创建数据库
--f、恢复目标数据库
SQL> set logsource '/u01/database/sybo3/flash_recovery_area/SYBO3/archivelog/2013_07_24';
SQL> recover database using backup controlfile until cancel;
ORA-00279: change 847086 generated at 07/24/2013 14:42:06 needed for thread 1
ORA-00289: suggestion :
/u01/database/sybo3/flash_recovery_area/SYBO3/archivelog/2013_07_24/o1_mf_1_7_8216
17241.dbf
ORA-00280: change 847086 for thread 1 is in sequence #7
Specify log: {
=suggested | filename | AUTO | CANCEL}
/u01/database/sybo3/redo/redo01.log
Log applied.
Media recovery complete.
--g、打开目标数据库
SQL> alter database open resetlogs;
Database altered.
--h、校验数据库及添加临时数据文件
SQL> select * from t;
NAME ACTION
---------- --------------------
Robinson Transfer DB
SQL> select name from v$datafile;
NAME
------------------------------------------------------------
/u01/database/sybo4/oradata/system01.dbf
/u01/database/sybo4/oradata/sysaux01.dbf
/u01/database/sybo4/oradata/undotbs01.dbf
/u01/database/sybo4/oradata/users01.dbf
/u01/database/sybo4/oradata/example01.dbf
SQL> col member format a60
SQL> select member from v$logfile;
MEMBER
------------------------------------------------------------
/u01/database/sybo4/redo/redo03.log
/u01/database/sybo4/redo/redo02.log
/u01/database/sybo4/redo/redo01.log
SQL> select name from v$controlfile;
NAME
------------------------------------------------------------
/u01/database/sybo4/controlf/control01.ctl
/u01/database/sybo4/controlf/control02.ctl
--Author : Robinson
SQL> select * from v$tempfile;
no rows selected
SQL> select property_name,property_value from database_properties where property_name like '%DEFAULT%';
PROPERTY_NAME PROPERTY_VALUE
------------------------------ ----------------------------