ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 数据库迁移实验

数据库迁移实验

原创 Linux操作系统 作者:Xuziwen20 时间:2012-07-28 11:33:34 0 删除 编辑

数据库迁移
环境:虚拟机1:192.168.0.111     虚拟机2:192.168.0.121   系统:Linux系统
需求:需要把虚拟机1上的数据库实例orcl 迁移到虚拟机2 
   虚拟机2上面已经安装了相同版本的数据库软件  一定要相同版本 (版本不同可以以后升级的)
方法:直接复制 、通过RMAN全备恢复到虚拟机2

方法一:直接复制
因为是Linux系统,一切皆为文件  不像windows存在注册表信息什么的,可以直接拷贝虚拟机1上面的数据库实例orcl安装目录到虚拟机2  应该可以正常使用

虚拟机1上面的orcl实例信息全部在/u01目录下 
1.拷贝/u01目录到虚拟机2的根目录下
2.最好是拷贝虚拟机1上面的/home/oracle/.bash_profile 到虚拟机2上面的/home/oracle/下  ,实在不行,也可以自己设置  就是设置ORACLE_HOME、ORACLE_BASE、ORACLE_SID等环境变量
贴下模版:
export PATH
umask 022
export  ORACLE_BASE=/u01/app/oracle
export  ORACLE_SID=orcl
export  ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1
export  PATH=$ORACLE_HOME/bin:$PATH
export  EDITOR=vi

3.sqlplus / as sysdba 然后startup  打开数据库

SQL> startup force;
ORACLE instance started.

Total System Global Area  285212672 bytes
Fixed Size                  1218992 bytes
Variable Size              92276304 bytes
Database Buffers          188743680 bytes
Redo Buffers                2973696 bytes
Database mounted.
Database opened.


先查询一下boy.test表
SQL> select * from boy.test;

        ID
----------
         1
         2
         3
         4  四条记录
插入两条  insert into boy.test values(5);insert into boy.test values(6); commit;

SQL> select * from boy.test;

        ID
----------
         1
         2
         3
         4
         5
         6

6 rows selected.  有六条记录

方法二:通过RMAN全备数据库恢复到虚拟机2

1.在虚拟机1上面通过RMAN全备数据库  将备份拷贝到虚拟机2相同路径下(必须是相同路径)
这一步由于我事先没有使用rman格式变量  一直报错 
错误一: backup database format '/u01/full.bak';(记得打开控制文件自动备份)
这样会备份成功 但是它备份的数据库controlfile和spfile的备份集保存到了默认的存储位置(我的是快速恢复区)  这样拷贝数据库全备的时候要把全备的两个文件全部拷贝到虚拟机相对应的目录下面
错误二:backup database include current controlfile format '/u01/backup.bak';
全备数据库时在备份控制文件时候报错了,显示文件已经存在 (因为备份会生成两个文件,而只指定一个文件名) 指定格式变量可以解决
成功的备份: backup database include current controlfile format '/u01/back_%U';
备份成功,在/u01下面生成两个备份文件 back_1mn61akl_1_1(datafile的备份)、back_1nn61anu_1_1(控制文件和spfile文件的备份)

将生成的两个备份集和spfile文件拷贝到虚拟机2相同的目录下面 (备份文件一定是相同路径)

 如果是windows环境,需要通过ORADIM命令创建一个OracleService,创建的SID要与源库相同
ORADIM -NEW -SID orcl

如果是linux环境,只需要在连接数据库时指定export ORACLE_SID=orcl就行

3.配置虚拟机2的初始化参数文件(spfile)
 第一步将虚拟机1上的spfile文件复制到虚拟机2适当路径,最后虚拟机2能保持和虚拟机的路径一样 这样会方便一下 ,我的实验环境就是保持虚拟机1和虚拟机2的路径一样
 第二步是针对路径不一样的操作 修改参数文件(先将spfile转为pfile)
 保证如下参数路径正确:控制文件、adump、bdump、cdump、udump、快速恢复区
第三步 在虚拟机2上面创建参数文件里面指定的目录  (我的路径是和虚拟机一样)
[oracle@dreamboy ~]$mkdir -p  /u01/app/oracle/admin/orcl/adump
[oracle@dreamboy ~]$mkdir -p  /u01/app/oracle/admin/orcl/bdump
[oracle@dreamboy ~]$mkdir -p  /u01/app/oracle/oradata/orcl
[oracle@dreamboy ~]$mkdir -p  /u01/app/oracle/flash_recovery_area
[oracle@dreamboy ~]$mkdir -p  /u01/app/oracle/admin/orcl/udump

sql>create spfile from pfile; sql>startup nomount;
export ORACLE_SID=orcl
rman target /
set dbid=13088789
只有备份  没有控制文件 所以需要从备份中还原恢复控制文件
restore controlfile from '/u01/back_1nn61anu_1_1'
控制文件恢复  有了控制文件 就可以启动数据库到mount;
alter database mount;

修复数据库:这时候我犯了一个错误  我没有直接restore database,而是指定了备份集,因为该备份集里面没有备份的控制信息,无法修复。
正确方法:restore database;(不是restore database from '/u01/back_1mn61akl_1_1')

为什么能直接从控制文件里面修复成功呢?
因为是NOcatalog模式,备份集信息是保存在控制文件里面的,现在控制文件恢复了,那么控制文件就知道自动应该去哪儿找备份集,不需要指定datafile备份集。 同理,恢复数据库也不需要知定,直接使用recover database;就可以了

恢复数据库:recover database;  如果这时候报错联机重做日志文件需要备份,纯属正常。(错误编号:RMAN-06054)  如果想避免错误,可以recover database until SCN/time

打开数据库:因为是从控制文件里面恢复的,需要以resetlogs方式打开数据库
alter database open resetlogs;

修复成功后,sql登录 检查数据是否丢失:

SQL> select * from boy.test;

        ID
----------
         1
         2
         3
         4
         5
         6

6 rows selected.
没有丢失  迁移成功。


参数文件模版:
vim initorcl.ora
*.audit_file_dest='/u01/app/oracle/admin/orcl/adump'
*.background_dump_dest='/u01/app/oracle/admin/orcl/bdump'
*.compatible='10.2.0.1.0'
*.control_files='/u01/app/oracle/oradata/orcl/control01.ctl','/u01/app/oracle/oradata/orcl/control02.ctl','/u01/app/oracle/oradata/orcl/control03.ctl'#Restore Controlfile
*.core_dump_dest='/u01/app/oracle/admin/orcl/cdump'
*.db_block_size=8192
*.db_domain=''
*.db_file_multiblock_read_count=16
*.db_name='orcl'
*.db_recovery_file_dest='/u01/app/oracle/flash_recovery_area'
*.db_recovery_file_dest_size=2147483648
*.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)'
*.job_queue_processes=10
*.open_cursors=300
*.pga_aggregate_target=94371840
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_target=285212672
*.undo_management='AUTO'
*.undo_tablespace='UNDOTBS1'
*.user_dump_dest='/u01/app/oracle/admin/orcl/udump'

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/27199141/viewspace-737933/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2012-07-26

  • 博文量
    2
  • 访问量
    3736