Oracle 只有数据文件的恢复

 

数据库版本都为 Oracle10G

 

  1. 在A数据库服务器操作: 将需要转移的数据库A冷备份,冷备份,我很简单。
  2. 开始->运行:
  3. sqlplus /as sysdba //使用DBA权限登陆到数据库
    sqlplus>shutdown immediate //关闭数据库实例
  4. 在提示后ORACLE 例程已经关闭后,将对应A数据库中的X:\Oracle\oradata\SourDB数据库目录全部拷贝出来。
  5. 我的数据库目录内含REDO01.LOG 、REDO02.LOG、 REDO03.LOG,SYSAUX01.DBF,SYSTEM01.DBF,TEMP01.DBF,UNDOTBS01.DBF,USERS01.DBF,TEST.DBF CONTROL01.CTL,CONTROL02.CTL,CONTROL03.CTL

 

在B数据库(实例DestDB) 我的程序安装在X:\oracle\product\10.1.0\db_1\ 数据目录在X:\oracle\database\DestDB(无子目录)

a、备份数据库B的控制文件 开始->运行:

sqlplus
sqlplus>conn DetDB sys as sysdba //连接到指定的DetDB实例上
sqlplus>alter database backup controlfile to trace as D:\ctlbak.ctl //备份控制器成文件
sqlplus>show parameter spfile;  //显示spfile路径
sqlplus>create pfile from spfile; //备份数据库B的控制文件

生成的文件在x:\oracle\product\10.1.0\db_1\database\下的 INITDestDB.ORA,备份吧。

b、sqlplus>shutdown immediate \\关闭数据库实例

删除数据目录在x:\oracle\database\DestDB的目录下的数据文件、控制文件和日志文件,反正我是目录下的都删除了。

将数据库A备份的sourDB的*.log、*.DBF复制进去。

删除数据库B中的,x:\oracle\product\10.1.0\db_1\database\SPFILEDestDB.ORA控制文件

修改INITDestDB.ORA文件,删除*.control_files对应的字串

c、启动数据库B到nomount状态

开始->运行:

sqlplus /nolog 
sqlplus>conn DestDB as sysdba 
sqlplus>startup nomount    
ORACLE 例程已经启动。     
Total System Global Area  171966464 bytes     
Fixed Size 787988 bytes    
Variable Size  144964076 bytes     
Database Buffers  25165824 bytes     
Redo Buffers 1048576 bytes

使用下面的语句生成数据库B的新的控制文件,将DestDB改掉目录的数据库名就行了。 (不要添加临时表空间进控制器)

sql>CREATE CONTROLFILE SET DATABASE "DestDB" RESETLOGS  ARCHIVELOG     
MAXLOGFILES 16     
MAXLOGMEMBERS 3     
MAXDATAFILES 100     
MAXINSTANCES 8     
MAXLOGHISTORY 454 
LOGFILE   
GROUP 1 x:\oracle\database\DestDB\REDO01.LOG  SIZE 10M,   
GROUP 2 x:\oracle\database\DestDB\REDO02.LOG  SIZE 10M,   
GROUP 3 x:\oracle\database\DestDB\REDO03.LOG  SIZE 10M 
DATAFILE   x:\oracle\database\DestDB\SYSTEM01.DBF,  
 x:\oracle\database\DestDB\UNDOTBS01.DBF,  
 x:\oracle\database\DestDB\SYSAUX01.DBF,  
 x:\oracle\database\DestDB\USERS01.DBF,  
 x:\oracle\database\DestDB\ZJTEST.DBF
 CHARACTER SET ZHS16GBK;

关闭数据库 sql>shutdown immediate

d、添加(参考备份的initsourDB.ORA)    *.control_files=‘x:\oracle\database\DestDB\control01.ctl‘,‘x:\oracle\database\DestDB\control02.ctl‘,‘x:\oracle\database\DestDB\control03.ctl‘ 新的控制文件,生成到目录x:\oracle\database\DestDB,修改x:\oracle\product\10.1.0\db_1 \database\下的initsourDB.ORA,我看到我的目录内生成了3个控制文件,所以加了3个。

e、指定pfile参数启动,并生成spfile,完成恢复工作。

sql>startup pfile="x:\oracle\product\10.1.0\db_1\database\initsourDB.ORA"; 
ORACLE 例程已经启动。
Total System Global Area  171966464 bytes 
Fixed Size                   787988 bytes 
Variable Size             144964076 bytes 
Database Buffers           25165824 bytes 
Redo Buffers                1048576 bytes
 数据库装载完毕。

ORA-01589: 要打开数据库则必须使用 RESETLOGS 或 NORESETLOGS 选项

SQL> alter database open resetlogs; 数据库已更改。

SQL> create spfile from pfile; 文件已创建。

SQL> select count(*) from dba_users;   COUNT(*) ----------         30

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。