将oracle冷备份恢复到另外一个数据库实例中

因更换服务器需要将Oracle数据库转移到另外台Oracle中。
说明:
1、测试环境为:windows server2003 和 oracle 10g.
2、2台服务器安装的程序目录一样,数据目录不一样。
特别借签了Afshen兄弟发的实践将oracle冷备份恢复到另外一个数据库实例中操作文章。但是对于新手来说没有详细说明,且我的操作有点点差异。另外我是新手,只知道工作完成,但是不知道是否此操作是否对于数据库使用存在何影响,还需要后期开发使用在知道,希望能给大家提供对比作为操作中的参考。(因时间仓促未俯图)

1)在A数据库服务器操作:
将需要转移的数据库A冷备份,冷备份,我很简单。
开始->运行:sqlplus
sqlplus>conn SourDB sys as sysdba
sqlplus>shutdown immediate \\关闭数据库实例
在提示后ORACLE 例程已经关闭后,将对应A数据库中的e:\Oracle\oradata\SourDB数据库目录全部拷贝出来。
我的数据库目录内含REDO01.LOG 、REDO02.LOG、REDO03.LOG,SYSAUX01.DBF,SYSTEM01.DBF,TEMP01.DBF,UNDOTBS01.DBF,USERS01.DBF,ZJTEST.DBF
CONTROL01.CTL,CONTROL02.CTL,CONTROL03.CTL
疑惑:这3个控制文件后面发现没用上,新数据库重新生成控制文件就行了。因新接触不了解,哪位同学知道的,解疑下。

2)在B数据库(实例DestDB)
我的程序安装在x:\oracle\product\10.1.0\db_1\
数据目录在x:\oracle\database\DestDB(无子目录)
a、备份数据库B的控制文件
开始->运行:sqlplus
sqlplus>conn DetDB sys as sysdba
sqlplus>alter database backup controlfile to trace
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
sql>conn DestDB as sysdba
sql>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
SQL> select count(*) from dba_users where username=‘test‘;
COUNT(*)
----------

文章出处:飞诺网(www.diybl.com):http://www.diybl.com/course/7_databases/oracle/oraclejs/20110814/558381.html

1、首先安装一个全新的Oracle,包括服务名、SID,安装目录应最好与原来的ORACLE目录一致。

2、删除安装目录下所有的datafile、logfile.(oradata目录下的文件)

3、Copy原来的数据文件到oradata目录下,包括系统数据文件等。

4、alter database backup controlfile to trace; 备份当前数据库控制文件,控制文件一般备份到D:\oracle\PRoduct\10.2.0\admin\bstest\udump下,请注意最新一个就是了。

删除原控制文件,重新创建一个控制文件,请注意修改各个路径的位置,如下:

CREATE CONTROLFILE SET DATABASE "TEST" RESETLOGS NOARCHIVELOG

MAXLOGFILES 16

MAXLOGMEMBERS 3

MAXDATAFILES 100

MAXINSTANCES 8

MAXLOGHISTORY 292

LOGFILE

GROUP 1 ‘D:\ORACLE\PRODUCT\10.2.0\ORADATA\BSTEST\REDO01.LOG‘ SIZE 50M,

GROUP 2 ‘D:\ORACLE\PRODUCT\10.2.0\ORADATA\BSTEST\REDO02.LOG‘ SIZE 50M,

GROUP 3 ‘D:\ORACLE\PRODUCT\10.2.0\ORADATA\BSTEST\REDO03.LOG‘ SIZE 50M

-- STANDBY LOGFILE

DATAFILE

‘D:\ORACLE\PRODUCT\10.2.0\ORADATA\BSTEST\SYSTEM01.DBF‘,

‘D:\ORACLE\PRODUCT\10.2.0\ORADATA\BSTEST\UNDOTBS01.DBF‘,

‘D:\ORACLE\PRODUCT\10.2.0\ORADATA\BSTEST\SYSAUX01.DBF‘,

‘D:\ORACLE\PRODUCT\10.2.0\ORADATA\BSTEST\USERS01.DBF‘,

‘D:\ORACLE\PRODUCT\10.2.0\ORADATA\BSTEST\TEST.DAT‘

CHARACTER SET ZHS16GBK

;

注意修改数据文件的路径,如果是原数据文件,加上你原来所有的数据文件路径,如红色则是我原来的数据文件。

11、重启,启动到startup mount;然后 

执行recover database;成功,

再执行alter database open;打开成功了。

12、现在已基本成功了,但是经过这样处理,为了安全起见,

最好用EXP先将数据全部导出,然后再重新安装ORACLE,然后再用IMP重新导入。

而当我导出时却出现错误:提示临时表空间为空。

用select name from v$tempfile;查看,确实为空,则:

如temp01.dbf已存在,则如下:

alter tablespace temp add tempfile ‘D:\oracle\product\10.2.0\oradata\bstest\temp01.dbf‘

否则:

alter tablespace temp add tempfile ‘D:\oracle\product\10.2.0\oradata\bstest\temp01.dbf‘ size 10M;

再用EXP导出,成功!

还是打不开。出现以下错误:
 alter database open RESETLOGS
*
ERROR 位于第 1 行:
ORA-01092: ORACLE 例程终止。强行断开连接

10、 将UNDO日志改为手动模式:

alter system set undo_management=‘manual‘ scope=spfile;

5、startup nomount;启动到nomount状态,然后执行以上控制文件重建语句。

6、执行recover database using backup controlfile until cancel;

输入cancel回车,后出现错误。

7、alter database open resetlogs;执行后出现以下错误。

ORA-01194: 文件1需要更多的恢复来保持一致性
ORA-01110: 数据文件 1: ‘D:\ORACLE\ORADATA\ZQKH\SYSTEM01.DBF‘

8、#系统文件出错,看到“一致性”自然想到 _allow_resetlogs_corruption的隐含命令
alter system set "_allow_resetlogs_corruption"=true scope=spfile;
9、alter database open RESETLOGS;

时间: 2024-10-14 11:26:34

将oracle冷备份恢复到另外一个数据库实例中的相关文章

定时从一个数据库表中的数据存储到另外一个数据库中的表,而且怎么处理重复的数据?

原文:http://www.iteye.com/problems/77856 定时从一个数据库表中的数据存储到另外一个数据库中的表,而且怎么处理重复的数据? 表结构肯定是不能破坏,但是临时表如果是自己的数据库还行,问题是这个Oracle数据库是客户的数据库呢,你不能在他的数据库做任何多余的操作吧?还有别的更好的方法吗? 这个真的是比较困难. 首先,你要从客户机oracle取数据,因为这1分钟间隔之内不知道用户机新增加了哪些数据(大部分情况下是用户使用别的系统插入数据,而你又没有这个系统的程序接口

oracle的环境配置-单独创建数据库实例

单独创建数据库实例 数据库1    数据库2ORCL        LAW  ------RDBMS(服务)  |                  |-----------------------    安装数据库软件(DBMS) 单独再创建一个RDBMS--LAW [[email protected] ~]# xhost +access control disabled, clients can connect from any host  --自动启动了xmanager passive[[

12C RAC中的一个数据库实例自动crash并报ORA-27157、ORA-27300等错误

rhel7.2上安装12C RAC数据库后,其中一个数据库实例经常会自动crash.查看alert日志发现以下错误信息: Errors in file /d12/app/oracle/diag/rdbms/rac12c/rac12c2/trace/rac12c2_j000_21047.trc: ORA-27157: OS post/wait facility removed ORA-27300: OS system dependent operation:semop failed with st

Ubuntu中开启MySQL远程访问功能,并将另一个数据库服务器中的数据迁移到新的服务器中

一.开启MyS远程访问功能 1.进入服务器输入netstat -an | grep 3306确认3306是否对外开放,MySQL默认状态下是不对外开放访问功能的.输入以上命令之后如果端口没有被开放就会显示 <strong>显示结果:tcp 0 0 127.0.0.1:3306 0.0.0.0:*LISTEN</strong> 2.从上面的显示结果可以看出,mysql的3306端口只是监听本地的连接,这样就阻碍了外部ip对该数据库的访问,这样就需要修改mysql配置文件, 输入vim

把一个数据库表中的数据插入到另外一个数据库中的一张表中

数据库表结构不同 INSERT INTO [CodeFirstDbContext].[dbo].[Companies](CompanyID,CompanyName,Manager,CompanyType,IsDelete) SELECT CompID,Company,CName,ctype,0 FROM [YFDB2012].[dbo].[Company] 数据库表结构相同 INSERT INTO [CodeFirstDbContext].[dbo].[Companies] SELECT * F

oracle学习入门系列之二 数据库基础知识

oracle学习入门系列之二 数据库基础知识 本篇蛤蟆要梳理下那些被淡忘的数据库基础知识,也许根本就没被人记住过.不管是哪种情况,该记住的必须记住,记不住就把他记下来吧. 首先问几个问题如下: 数据库基础知识是什么? 好吧,蛤蟆直接吐后而不亡,看目录开始吧. 本人邮箱:[email protected] 微信公众号:HopToad 欢迎各界交流 1      基本概念 概念就是概念,大伙对这些名词不要死磕,但是对定义一定要理解,理解方能领悟,领悟方能运用自如后创新. 1.1      数据 数据

oracle介质恢复和实例恢复的异同

1.概念 ? ? REDO LOG是Oracle为确保已经提交的事务不会丢失而建立的一个机制.实际上REDO LOG的存在是为两种场景准备的: 实例恢复(INSTANCE RECOVERY): 介质恢复(MEDIA RECOVERY). ? ? 实例恢复的目的是在数据库发生故障时,确保BUFFER CACHE中的数据不会丢失,不会造成数据库的不一致: 介质恢复的目的是当数据文件发生故障时,能够恢复数据. 虽然这两种恢复使用的机制类似的,但是这两种恢复也有着十分本质的不同,这一点也是很多DBA经常

Oracle数据库11g 中Data Guard物理备用数据库搭建与配置

Oracle Data Guard是由Oracle公司提供的一套高可用性数据库解决方案.Data Guard可以确保企业数据的高可用性,并实现数据保护和灾难恢复.Data Guard提供了一套综合创建.维护.管理和监视一个或多个备用数据库的服务,使得用户能够轻松地应对Oracle生产数据库的灾难发生和数据损坏.Data Guard将维护的备用数据库保持为和主数据库(生产数据库)的数据和事物的一致性,当主数据库意外当机或者不可用时,Data Guard可以将任何一台备用数据库切换为主数据库,从而最

记录在Windows上安装和使用Oracle数据库过程中的坑

1.安装Oracle Oracle软件是免费的,可以去官网下载相应的安装包.但是如果用于商业用途需要购买License.官网上针对各种平台,32位和64位都有,如果在Windows一般会下载到两个文件.以Oracle 11g为例,有两个zip压缩文件,注意安装前将两个压缩文件的内容解压后合并.安装提示监视器配置至少必须显示256种颜色,可以忽略.其他安装前置项检查,可能会闪退,实在不知什么原因,只能更换操作系统.注意安装目录不能是带空格或特殊字符的目录名,可以如C:\Oracle\.目前本人在S