zoukankan      html  css  js  c++  java
  • 将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:OracleoradataSourDB数据库目录全部拷贝出来。
    我的数据库目录内含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:oracleproduct10.1.0db_1
    数据目录在x:oracledatabaseDestDB(无子目录)
    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:oracleproduct10.1.0db_1database下的INITDestDB.ORA,备份吧。

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

    删除数据目录在x:oracledatabaseDestDB的目录下的数据文件、控制文件和日志文件,反正我是目录下的都删除了。将数据库A备份的sourDB的*.log、*.DBF复制进去。

    删除数据库B中的,x:oracleproduct10.1.0db_1databaseSPFILEDestDB.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:oracledatabaseDestDBREDO01.LOG' SIZE 10M,
    GROUP 2 'x:oracledatabaseDestDBREDO02.LOG' SIZE 10M,
    GROUP 3 'x:oracledatabaseDestDBREDO03.LOG' SIZE 10M
    DATAFILE
    'x:oracledatabaseDestDBSYSTEM01.DBF',
    'x:oracledatabaseDestDBUNDOTBS01.DBF',
    'x:oracledatabaseDestDBSYSAUX01.DBF',
    'x:oracledatabaseDestDBUSERS01.DBF',
    'x:oracledatabaseDestDBJTEST.DBF'
    CHARACTER SET ZHS16GBK;

    关闭数据库
    sql>shutdown immediate

    d、添加(参考备份的initsourDB.ORA)
    *.control_files='x:oracledatabaseDestDBcontrol01.ctl','x:oracledatabaseDestDBcontrol02.ctl','x:oracledatabaseDestDBcontrol03.ctl'
    新的控制文件,生成到目录x:oracledatabaseDestDB,修改x:oracleproduct10.1.0db_1database下的initsourDB.ORA,我看到我的目录内生成了3个控制文件,所以加了3个。

    e、指定pfile参数启动,并生成spfile,完成恢复工作。
    sql>startup pfile="x:oracleproduct10.1.0db_1databaseinitsourDB.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:oraclePRoduct10.2.0adminstestudump下,请注意最新一个就是了。

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

    CREATE CONTROLFILE SET DATABASE "TEST" RESETLOGS NOARCHIVELOG

    MAXLOGFILES 16

    MAXLOGMEMBERS 3

    MAXDATAFILES 100

    MAXINSTANCES 8

    MAXLOGHISTORY 292

    LOGFILE

    GROUP 1 'D:ORACLEPRODUCT10.2.0ORADATABSTESTREDO01.LOG' SIZE 50M,

    GROUP 2 'D:ORACLEPRODUCT10.2.0ORADATABSTESTREDO02.LOG' SIZE 50M,

    GROUP 3 'D:ORACLEPRODUCT10.2.0ORADATABSTESTREDO03.LOG' SIZE 50M

    -- STANDBY LOGFILE

    DATAFILE

    'D:ORACLEPRODUCT10.2.0ORADATABSTESTSYSTEM01.DBF',

    'D:ORACLEPRODUCT10.2.0ORADATABSTESTUNDOTBS01.DBF',

    'D:ORACLEPRODUCT10.2.0ORADATABSTESTSYSAUX01.DBF',

    'D:ORACLEPRODUCT10.2.0ORADATABSTESTUSERS01.DBF',

    'D:ORACLEPRODUCT10.2.0ORADATABSTESTTEST.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:oracleproduct10.2.0oradatastest emp01.dbf'

    否则:

    alter tablespace temp add tempfile 'D:oracleproduct10.2.0oradatastest emp01.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:ORACLEORADATAQKHSYSTEM01.DBF'

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

  • 相关阅读:
    init-method,@postcontruct,afterPropertiesSet的先后顺序
    读写分离与分库分表,分布式事务面试题
    innerHTML的HTML居然必须大写..不可思议
    postgres/greenplum unnest(Array) 实现列转行
    AWS EBS磁盘挂载和卸载
    当npm 与淘宝镜像cnpm运行都很慢时候
    IntersectionObserver API 之学习
    vue之队列过渡组效果,后进先出坑点
    ele之vue3.0的form表单验证与重置
    vue3.0之DOM的$refs之运用
  • 原文地址:https://www.cnblogs.com/gotoschool/p/5849133.html
Copyright © 2011-2022 走看看