[转载牛人教程和自己的实验结果] 7.手工备份恢复--复制数据库(练习9)
复制数据库成为复本或克隆数据库,数据库的副本名称与原数据库相同,克隆数据库与原数据库名称不同。我们可以运用前面讲过的还原和恢复技术,可以方便复制数据库。通过复制数据库可以为自己以及开发团队带来好处:
- 开发团队拥有一个用于编程和测试的模拟数据库;
- 可以验证当前数据库备份的质量;
- 可以练习数据库恢复技能
利用Oracle工具,可以用三种方式复制数据库:
- 可以使用操作系统的文件拷贝进行物理数据库的还原和恢复;
- 可以用Oracle Export和Oracle Import工具将原数据库逻辑还原到一个新的数据库;
- 用Oracle的恢复管理其进行数据文件和控制文件的一个物理文件还原。
复制数据库看上去很简单,如MS SQLServer只需要把MDF文件复制到另一个地方即可,Oracle的复制实际上并没有那么简单。复制Oracle数据库包括数据文件、重做日志文件和控制文件三类文件类型的处理。
练习9:克隆打开的PRACTICE数据库
克隆数据库大致的步骤:首先建立CLNE数据库存放的路径、参数文件、口令文件和Windows服务,接着把PRACTICE数据文件复制到CLNE数据库的数据文件目录下,然后将生成为CLNE数据库创建一个新的控制文件所需的命令脚本,最后运行这个命令完成CLNE数据库的创建。
步骤一:准备CLNE数据库
首先,创建CLNE数据库所需的路径:
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
--> 1 set ORACLE_SID=CLNE 2 set ORACLE_BASE=D:oracle 3 set ORACLE_HOME=D:oracleproduct10.1.0 4 set ORACLE_DATA=D:oracle%ORACLE_SID% 5 set ORACLE_ADMIN=%ORACLE_HOME%admin%ORACLE_SID% 6 md %ORACLE_ADMIN% 7 md %ORACLE_ADMIN%pfile 8 md %ORACLE_ADMIN%bdump 9 md %ORACLE_ADMIN%cdump10 md %ORACLE_ADMIN%udump11 md %ORACLE_ADMIN%create12 md %ORACLE_DATA%13 md %ORACLE_DATA%ARCHIVE
可以通过这个命令创建数据库路径接口,如果有差别可以调整相关参数的路径,当然可以通过Window系统建立文件夹建立需要的文件夹。
接着,进入D:oracleproduct10.1.0Db_1database文件夹,复制PRACTICE参数文件SPFILEPRACTICE.ORA并命名为SPFILEPCLNE.ORA,使用写字板打开,将文件中出现”PRACTICE”替换为”CLNE”。
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->1 WIN> orapwd file=D:oracleproduct10.1.0Db_1databasePWDCLNE.ora password=CLNE entries=4
再次,为CLNE创建一个名为OracleSerciveCLNE的数据库服务,使用CLNE口令:
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->1 WIN> oradim -NEW -SID CLNE -SYSPWD CLNE
最后,配置TNS服务:打开D:oracleproduct10.1.0Db_1NETWORKADMIN tnsnames.ora添加目标数据库服务;
对第5节练习5创建的脚本进行调整:
- 在PRACITCE数据库打开时,把数据文件拷贝到CLNE数据目录下;
- 删除用于创建控制文件复制命令的行。
删除后如下(具体用户参见练习5):
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
--> 1 set feedback off pagesize 0 heading off verify off linesize 200 trimspool on 2 define dir = 'D:oracleCLNE' 3 define fil = 'D:oracleCODEtmpcopy_database_commands.sql' 4 define spo = '&diropen_backup_output.lst' 5 prompt *** Spooling to &fil 6 set serveroutput on 7 spool &fil 8 prompt spool &spo 9 prompt archive log list;;10 prompt alter system switch logfile;;11 DECLARE12 CURSOR cur_tablespace IS13 SELECT tablespace_name 14 FROM dba_tablespaces15 WHERE status <> 'READ ONLY';16 CURSOR cur_datafile (tn VARCHAR) IS17 SELECT file_name18 FROM dba_data_files19 WHERE tablespace_name = tn;20 BEGIN21 FOR ct IN cur_tablespace LOOP22 dbms_output.put_line('alter tablespace ' || ct.tablespace_name || ' begin backup;');23 FOR cd IN cur_datafile(ct.tablespace_name) LOOP24 dbms_output.put_line('host copy ' || cd.file_name || ' &dir');25 END LOOP;26 dbms_output.put_line('alter tablespace ' || ct.tablespace_name || ' end backup;');27 END LOOP;28 END;29 /30 prompt alter system switch logfile;;31 prompt archive log list;;32 prompt spool off;;33 spool off;34 @&fil
步骤三:配置控制文件脚本
有一个捷径可以让数据库产生创建一个新的控制文件所需要的指令:
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->1 SQL> ALTER DATABASE BACKUP CONTROLFILE TO TRACE RESETLOGS;
使用这个命令Oracle会创建包含创建控制文件所需要的全部命令,文件的位置由user_dump_dest初始化参数确定。
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->1 SQL>SELECT value FROM v$parameter WHERE name = ‘user_dump_dest’;2 SQL>SHOW PARAMETER user_dump_dest
这个文件可能以ora123.trc之类的名称命名,寻找一个日期/时间与提交跟踪命令时刻相同的文件,打开该文件将看到创建一个控制文件和启动数据库所需要的全部命令。把该文件命名为create_control_open.sql,并剪切到D:oracleproduct10.1.0adminCLNEcreate目录下,并做如下改动:
- 删除脚本的注释行;
- 将CREATE CONTROLFILE命令中的REUSE关键字换成SET关键字;
- 将CREATE CONTROLFILE命令中的”PRACTICE”换成”CLNE”;
- 将每个数据文件和重做日志的所在位置从D:oraclePRACTICE更为换为D:oracleCLNE
完成修改后,文件如下:
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
--> 1 STARTUP NOMOUNT 2 CREATE CONTROLFILE SET DATABASE "CLNE" RESETLOGS ARCHIVELOG 3 MAXLOGFILES 16 4 MAXLOGMEMBERS 3 5 MAXDATAFILES 100 6 MAXINSTANCES 8 7 MAXLOGHISTORY 454 8 LOGFILE 9 GROUP 1 'D:ORACLECLNEREDO01.LOG' SIZE 10M,10 GROUP 2 'D:ORACLECLNEREDO02.LOG' SIZE 10M,11 GROUP 3 'D:ORACLECLNEREDO03.LOG' SIZE 10M12 DATAFILE13 'D:ORACLECLNESYSTEM01.DBF',14 'D:ORACLECLNEUNDOTBS01.DBF',15 'D:ORACLECLNESYSAUX01.DBF',16 'D:ORACLECLNEUSERS01.DBF',17 'D:ORACLECLNEUSERS02.DBF',18 'D:ORACLECLNETOOLS01.DBF',19 'D:ORACLECLNETS4DROP01.DBF'20 CHARACTER SET ZHS16GBK;
- 第1行启动数据库实例,并打开控制文件。可以用PFILE选项制定数据库参数文件,若不指定参数文件,Oracle服务器会根据ORACLE_SID设置以及操作系统打开某一个默认位置下的文件;
- 第2行创建控制文件,当创建控制文件时,将会重新命名数据库。由于不能改变重做日志中的数据库名称,因此这些重做日志必须重新创建。为了改变控制文件中的数据库名称,可以在CREATE CONTROLFILE命令中使用SET和RESETLOGS关键字,控制文件中的RESETLOGS选项将创建新的重做日志;
- 第8-11行用创建日志文件,用RESETLOGS选项表示重新创建;
- 第12-20行定义组成数据库的那些数据文件。
步骤四:运行控制文件脚本
使用SYSDBA登录SQL*Plus数据库,运行D:oracleproduct10.1.0adminCLNEcreate路径下的create_control_open.sql脚本,创建一组新的控制文件。
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->1 WIN>SET ORACLE_SID=CLNE2 WIN>sqlplus /nolog3 SQL>conn sys/CLNE as sysdba4 SQL>@D:oracleproduct10.1.0adminCLNEcreatecreate_control_open.sql
步骤五:恢复克隆数据库
步骤四已经为CLNE数据库创建了一组新的控制文件,由于数据文件是打开数据库备份的,所以必须对这些归档日志进行恢复。无论采用完全或不完全恢复,需使用PRACTICE的归档日志文件:
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->1 SQL> SET LOGSOURCE D:oraclePRACTICEARCHIVE;
命令通知CLNE实例在PRACTICE数据库的归档目的路径中寻在用于恢复的归档日志,在这里采用取消式恢复:
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->1 SQL> RECOVER DATABASE USING BACKUP CONTROLFILE UNTIL CANCEL;
在提示下至少应用过一个归档日志文件,通过应用重做日志,所有的数据文件都将提升到同样的SCN。如果要进行完全恢复,可以采用如下两种选择:
- 在PRACTICE数据库上进行强制数据库切换,将新归档的日志应用于CLNE数据库;
- 关闭PRACTICE数据库,把其数据库的当前重做日志应用于CLNE数据库上。
如果恢复了CLNE数据库,将看到MEDIA RECOVERY COMPLETE。需要注意数据库不断写入到当前联机日志,所以在PRACTICE数据库打开是不要尝试应用PRACITCE当前重做日志到CLNE中。
步骤六:打开克隆数据库
截至恢复被取消或完成的消息之后,使用RESETLOG选项打开数据库:
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->1 SQL> ALTER DATABASE OPEN RESETLOGS;
------------------------------------实验没有开归档,用的是不完全恢复-------------------------------------------------
SQL> shutdown abort;
ORACLE 例程已经关闭。
SQL> @D:oracleproduct10.2.0adminorcl02createcreate_control_open.sql;
ORACLE 例程已经启动。
Total System Global Area 167772160 bytes
Fixed Size 1247876 bytes
Variable Size 92276092 bytes
Database Buffers 67108864 bytes
Redo Buffers 7139328 bytes
控制文件已创建。
ORA-00279: ?? 579694 (? 10/26/2011 23:50:56 ??) ???? 1 ????
ORA-00289: ??:
D:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREAORCL02ARCHIVELOG2011_10_27O1_MF_
1_3_%U_.ARC
ORA-00280: ?? 579694 (???? 1) ??? #3 ?
ORA-00308: ???????? '--'
ORA-27041: ??????
OSD-04002: ????????????
O/S-Error: (OS 2) ??????????????????????
ORA-00308: ???????? 'ALTER'
ORA-27041: ??????
OSD-04002: ????????????
O/S-Error: (OS 2) ??????????????????????
ORA-00308: ???????? '--'
ORA-27041: ??????
OSD-04002: ????????????
O/S-Error: (OS 2) ??????????????????????
ORA-00308: ???????? '--'
ORA-27041: ??????
OSD-04002: ????????????
O/S-Error: (OS 2) ??????????????????????
ORA-00308: ???????? '--'
ORA-27041: ??????
OSD-04002: ????????????
O/S-Error: (OS 2) ??????????????????????
ORA-00308: ???????? 'ALTER'
ORA-27041: ??????
OSD-04002: ????????????
O/S-Error: (OS 2) ??????????????????????
ORA-00308: ???????? 'SIZE'
ORA-27041: ??????
OSD-04002: ????????????
O/S-Error: (OS 2) ??????????????????????
ORA-00308: ???????? '--'
ORA-27041: ??????
OSD-04002: ????????????
O/S-Error: (OS 2) ??????????????????????
ORA-00308: ???????? '--'
ORA-27041: ??????
OSD-04002: ????????????
O/S-Error: (OS 2) ??????????????????????
指定日志: {=suggested | filename | AUTO | CANCEL}
Auto
ORA-00308: ????????
'D:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREAORCL02ARCHIVELOG2011_10_27O1_MF
_1_3_%U_.ARC'
ORA-27041: ??????
OSD-04002: ????????????
O/S-Error: (OS 2) ??????????????????????
ORA-00308: ????????
'D:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREAORCL02ARCHIVELOG2011_10_27O1_MF
_1_3_%U_.ARC'
ORA-27041: ??????
OSD-04002: ????????????
O/S-Error: (OS 2) ??????????????????????
SQL> alter databse open resetlogs;
alter databse open resetlogs
*
第 1 行出现错误:
ORA-00940: ??? ALTER ??
SQL> alter database open resetlogs;
alter database open resetlogs
*
第 1 行出现错误:
ORA-01113: ?? 1 ??????
ORA-01110: ???? 1: 'D:ORACLEPRODUCT10.2.0ORADATAORCL02SYSTEM01.DBF'
SQL> RECOVER DATABASE USING BACKUP CONTROLFILE UNTIL CANCEL;
ORA-00279: ?? 579694 (? 10/26/2011 23:50:56 ??) ???? 1 ????
ORA-00289: ??:
D:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREAORCL02ARCHIVELOG2011_10_27O1_MF_
1_3_%U_.ARC
ORA-00280: ?? 579694 (???? 1) ??? #3 ?
指定日志: {=suggested | filename | AUTO | CANCEL}
ORA-00308: ????????
'D:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREAORCL02ARCHIVELOG2011_10_27O1_MF
_1_3_%U_.ARC'
ORA-27041: ??????
OSD-04002: ????????????
O/S-Error: (OS 2) ??????????????????????
SQL>
SQL> RECOVER DATABASE USING BACKUP CONTROLFILE UNTIL CANCEL;
ORA-00279: ?? 579694 (? 10/26/2011 23:50:56 ??) ???? 1 ????
ORA-00289: ??:
D:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREAORCL02ARCHIVELOG2011_10_27O1_MF_
1_3_%U_.ARC
ORA-00280: ?? 579694 (???? 1) ??? #3 ?
指定日志: {=suggested | filename | AUTO | CANCEL}
Cancel
介质恢复已取消。
SQL> alter database open resetlogs;
数据库已更改。
SQL> select * from v$instance;
INSTANCE_NUMBER INSTANCE_NAME
--------------- ----------------
HOST_NAME
----------------------------------------------------------------
VERSION STARTUP_TIME STATUS PAR THREAD# ARCHIVE
----------------- -------------- ------------ --- ---------- -------
LOG_SWITCH_WAIT LOGINS SHU DATABASE_STATUS INSTANCE_ROLE ACTIVE_ST
--------------- ---------- --- ----------------- ------------------ ---------
BLO
---
1 orcl02
ACER-AE70AD3423
10.2.0.1.0 27-10? -11 OPEN NO 1 STOPPED
INSTANCE_NUMBER INSTANCE_NAME
--------------- ----------------
HOST_NAME
----------------------------------------------------------------
VERSION STARTUP_TIME STATUS PAR THREAD# ARCHIVE
----------------- -------------- ------------ --- ---------- -------
LOG_SWITCH_WAIT LOGINS SHU DATABASE_STATUS INSTANCE_ROLE ACTIVE_ST
--------------- ---------- --- ----------------- ------------------ ---------
BLO
---
ALLOWED NO ACTIVE PRIMARY_INSTANCE NORMAL
NO
SQL> select * from distributors ;
DID NAME
---------- ----------------------------------------
1 test01
2 test02
SQL>
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/8337095/viewspace-1055974/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/8337095/viewspace-1055974/