实验目的:将oracle数据库从一台机器迁移到另外的一台机器(同为linux平台),设置为不同的路径,不同的实例名
源端:
ORACLE_BASE=/u01/app/oracle
ORACLE_HOME=/u01/app/oracle/product/10.2.0/db_1
ORACLE_SID=test
数据文件位置:/oradata/test
目标端:
ORACLE_BASE=/u02/app/oracle
ORACLE_HOME=/u02/app/oracle/product/10.2.0/db_1
ORALCE_SID=test2
数据文件位置:/oradata2/test2
注:两台主机非一台,但是主机名一致均为model.rhel5

第一步:在源端取得备份数据

查询一下MAI用户下的数据,做最后校验使用
MAI@test > select * from tab;
TNAME                         
TABTYPE  CLUSTERID
------------------------------ ------- ----------
BONUS                         
TABLE
DEPT                          
TABLE
EMP                           
TABLE
SALGRADE                      
TABLE
TEST                          
TABLE
TEST01                        
TABLE
开始备份:
$ oracle@model /mnt/hgfs/software/backup> rman
target /
RMAN> run{
2> allocate channel c1 device type disk format
'/mnt/hgfs/software/backup/%T_%U';
3> backup database;
4> backup current controlfile format
'/mnt/hgfs/software/backup/%T_CTL_%U';
5> backup spfile format
'/mnt/hgfs/software/backup/%T_SPFILE_%U';
6> release channel c1;
7> }
备份集信息:
$ oracle@model /mnt/hgfs/software/backup> ls
-lh
total 304M
-rwxrwxrwx 1 root root 594M Aug 29 20:31
20120829_02njsrtb_1_1*
-rwxrwxrwx 1 root root 6.9M Aug 29 20:31
20120829_03njss0b_1_1*
-rwxrwxrwx 1 root root 6.8M Aug 29 20:31
20120829_CTL_04njss0k_1_1*
-rwxrwxrwx 1 root root  96K Aug 29 20:31
20120829_SPFILE_05njss0m_1_1*

第二步:备端的准备
1、安装数据库软件,基位置参考上文说明。
2、创建相关的目录:
$ oracle@model ~> env | grep ORACLE
ORACLE_BASE=/u02/app/oracle
ORACLE_HOME=/u02/app/oracle/product/10.2.0/db_1
$ oracle@model ~> cd $ORACLE_BASE
$ oracle@model /u02/app/oracle> mkdir
flash_recovery_area
$ oracle@model /u02/app/oracle> mkdir -p
admin/test2
$ oracle@model /u02/app/oracle> cd admin/test2
$ oracle@model /u02/app/oracle/admin/test2> mkdir
{a,b,c,d,u}dump

第三步:开始恢复,此时恢复的实例名为test
$ oracle@model ~> export ORACLE_SID=test
$ oracle@model ~> rman target /
RMAN> startup nomount
1、恢复spfile:
RMAN> restore spfile from
'/mnt/hgfs/software/backup/20120829_SPFILE_05njss0m_1_1';
RMAN> shutdown immediate;
2、编辑参数文件,使参数中的相关路径变更为新路径
$ oracle@model ~> sqlplus / as sysdba
SYS@test > create pfile from spfile;
编辑生成的$ORACLE_HOME/dbs/inittest.ora文件,将文件中的路径改为新的路径,即:
/oradata/test/修改为/oradata2/test2/
/u01/app/oracle/修改为/u02/app/oracle
/u01/app/oracle/admin/test修改为/u02/app/oracle/admin/test2
$ oracle@model ~> sqlplus / as sysdba
SYS@test > create spfile from pfile;
3、恢复控制文件:
$ oracle@model ~> rman target /
RMAN> startup nomount
RMAN> restore controlfile from
'/mnt/hgfs/software/backup/20120829_CTL_04njss0k_1_1';
4、恢复数据文件:
RMAN> alter database mount;
RMAN> run {
2> set newname for datafile 1 to
'/oradata2/test2/system01.dbf';
3> set newname for datafile 2 to
'/oradata2/test2/undotbs01.dbf';
4> set newname for datafile 3 to
'/oradata2/test2/sysaux01.dbf';
5> set newname for datafile 4 to
'/oradata2/test2/users01.dbf';
6> set newname for datafile 5 to
'/oradata2/test2/example01.dbf';
7> restore database;
8> }
5、重建控制文件,更新控制文件中的数据文件路径
$ oracle@model ~> sqlplus / as sysdba
SYS@test > alter database backup controlfile to
trace;
到$ORACLE_BASE/admin/udump中找到刚才生成的TRACE文件,复制出其中的创建文件集的片段,修改其中的路径信息为新的路径信息,备用

SYS@test > shutdown immediate;
SYS@test > startup nomount
利用刚才修改过的控制文件创建脚本重建控制文件:
SYS@test > CREATE CONTROLFILE REUSE DATABASE "TEST"
RESETLOGS  ARCHIVELOG
 
2     
MAXLOGFILES 16
 
3     
MAXLOGMEMBERS 3
 
4     
MAXDATAFILES 100
 
5     
MAXINSTANCES 8
 
6     
MAXLOGHISTORY 292
  7  LOGFILE
 
8    GROUP 1
'/oradata2/test2/redo01.log'  SIZE 50M,
 
9    GROUP 2
'/oradata2/test2/redo02.log'  SIZE 50M,
 10   
GROUP 3 '/oradata2/test2/redo03.log'  SIZE
50M
 11  -- STANDBY LOGFILE
 12  DATAFILE
 13   
'/oradata2/test2/system01.dbf',
 14   
'/oradata2/test2/undotbs01.dbf',
 15   
'/oradata2/test2/sysaux01.dbf',
 16   
'/oradata2/test2/users01.dbf',
 17   
'/oradata2/test2/example01.dbf'
 18  CHARACTER SET ZHS16GBK
 19  ;
SYS@test > alter database open resetlogs;
至此,数据库已经能够正常启动了,但是此时的实例名以及数据库名均为test,需要将其更改为test2,继续向下走

第四部分:修改实例名,以及数据库名

相关内容可以参见先前的文章:ORACLE数据库实例的重命名( http://blog.sina.com.cn/s/blog_67be3b4501016dgu.html
)
SYS@test > shutdown immediate;
SYS@test > startup mount
修改数据文件、控制文件中的数据库名称,修改之后会关闭数据库
SYS@test > !nid target=sys/oracle dbname=test2
logfile=/tmp/change_name2test2.log
启动数据库,这个时候会报数据库名称不一致的错误,不去管他(ORA-01103: database name 'MAI' in
control file is not 'TEST')
SYS@test > startup mount
将数据库名更新到spfile文件中
SYS@test > alter system set db_name='test2'
scope=spfile;
SYS@test > create pfile from spfile;
SYS@test > shutdown immediate;
$ oracle@model ~> export ORACLE_SID=test2
$ oracle@model ~> sqlplus / as sysdba
SYS@test2 > startup
pfile='/u02/app/oracle/product/10.2.0/db_1/dbs/inittest.ora'
SYS@test2 > create spfile from
pfile='/u02/app/oracle/product/10.2.0/db_1/dbs/inittest.ora';
SYS@test2 > shutdown immediate;
SYS@test2 > startup mount;
SYS@test2 > create pfile from spfile;
SYS@test2 > alter database open resetlogs;
将ORACLE_SID=test2写入到oracle用户的.bash_profile文件中:
$ oracle@model ~> echo export ORACLE_SID=test2
>> .bash_profile
至此呢,数据库迁移才算是彻底的完成了。

第五部分:最后的校验
1、MAI用户验证:
MAI@test2 > select * from tab;
TNAME                         
TABTYPE  CLUSTERID
------------------------------ ------- ----------
BONUS                         
TABLE
DEPT                          
TABLE
EMP                           
TABLE
SALGRADE                      
TABLE
TEST                          
TABLE
TEST01                        
TABLE
2、数据库名验证:
SYS@test2 > select name,open_mode from
v$database;
NAME     
OPEN_MODE
--------- ----------
TEST2    
READ WRITE
3、实例名验证:
SYS@test2 > select instance_name,status from
v$instance;
INSTANCE_NAME   
STATUS
---------------- ------------
test2           
OPEN
4、进程验证:
$ oracle@model ~> ps aux | grep ora_ | grep -v
grep
oracle   25592 
0.0  1.2 261864 12756
?       
Ss  
00:23   0:00 ora_pmon_test2
oracle   25594 
0.0  1.0 261252 11104
?       
Ss  
00:23   0:00 ora_psp0_test2
oracle   25596 
0.0  1.3 261252 13848
?       
Ss  
00:23   0:00 ora_mman_test2
oracle   25598 
0.0  1.3 263320 13708
?       
Ss  
00:23   0:00 ora_dbw0_test2
oracle   25600 
0.0  2.9 276804 30644
?       
Ss  
00:23   0:00 ora_lgwr_test2
oracle   25602 
0.0  1.6 261236 16956
?       
Ss  
00:23   0:00 ora_ckpt_test2
oracle   25604 
0.0  3.4 261784 35812
?       
Ss  
00:23   0:00 ora_smon_test2
oracle   25606 
0.0  1.6 261252 17224
?       
Ss  
00:23   0:00 ora_reco_test2
oracle   25608 
0.0  2.2 262812 22948
?       
Ss  
00:23   0:00 ora_cjq0_test2
oracle   25610 
0.1  4.2 262988 43768
?       
Ss  
00:23   0:00 ora_mmon_test2
oracle   25612 
0.0  1.2 261252 12832
?       
Ss  
00:23   0:00 ora_mmnl_test2
oracle   25614 
0.0  1.0 261248 10672
?       
Ss  
00:23   0:00 ora_d000_test2
oracle   25616 
0.0  1.0 261248 10656
?       
Ss  
00:23   0:00 ora_d001_test2
oracle   25626 
0.0  2.6 276804 27168
?       
Ss  
00:24   0:00 ora_arc0_test2
oracle   25628 
0.0  2.6 276804 27040
?       
Ss  
00:24   0:00 ora_arc1_test2
oracle   25630 
0.0  2.6 276804 26920
?       
Ss  
00:24   0:00 ora_arc2_test2
oracle   25632 
0.0  1.5 261252 15660
?       
Ss  
00:24   0:00 ora_qmnc_test2
oracle   25638 
0.0  1.1 261248 11656
?       
Ss  
00:24   0:00 ora_q000_test2
oracle   25640 
0.0  1.3 261248 13912
?       
Ss  
00:24   0:00 ora_q001_test2
5、oracle用户的变量验证:
$ oracle@model ~> env | grep ORACLE
ORACLE_SID=test2
ORACLE_BASE=/u02/app/oracle
ORACLE_HOME=/u02/app/oracle/product/10.2.0/db_1
验证完成,验证的结果表明,迁移确实已经成功,并且已经达到了预期的目的。

Linux平台下使用rman进行oracle数据库迁移的更多相关文章

  1. Oracle使用——Linux系统下使用命令实现oracle数据库数据导入

    背景 在工作当中,数据库的备份及数据导入是必不可少的操作,在完全无界面的Linux操作系统中,我们应该怎样实现oracle数据库的导入呢 前提 服务器已配置ftp 模拟环境 一台linux应用服务器上 ...

  2. Linux平台下源码安装mysql多实例数据库

    Linux平台下源码安装mysql多实例数据库[root@linux-node1 ~]# netstat -tlunp | grep 330tcp6 0 0 :::3306 :::* LISTEN 6 ...

  3. Windows平台下解决Oracle12c使用PDB数据库创建SDE的问题 分类: oracle sde 2015-06-12 11:03 88人阅读 评论(0) 收藏

    Windows平台下解决Oracle12c使用PDB数据库创建SDE的问题 Oracle 12C中引入了CDB与PDB的新特性,在ORACLE 12C数据库引入的多租用户环境(Multitenant ...

  4. Oracle备份恢复之rman备份oracle数据库

    备份需求和rman备份 oracle数据库的备份相关问答: 1)备份时数据库处于何种状态? 备份时数据库处于OPEN状态,这样数据库可以正常工作. 2)备份的数据备份在什么地方? 备份在本地磁盘. 3 ...

  5. Linux平台下裸设备的绑定:

    Linux平台下裸设备的绑定: 运用RAW绑定 方法一 raw的配置(1) [root@qs-dmm-rh2 mapper]# cat /etc/rc.local #!/bin/sh # # This ...

  6. 【android开发】如何在Linux平台下安装JDK环境

    原文:http://android.eoe.cn/topic/android_sdk Linux平台JDK安装 本文主要描述如何在Linux平台下安装JDK环境.进入网页:http://www.ora ...

  7. Linux平台下卸载MySQL的方法

    转载自: https://www.cnblogs.com/taomylife/p/7234925.html Linux平台下卸载MySQL的方法: MySQL的安装主要有三种方式:二进制包安装.RPM ...

  8. 转载~Linux 平台下阅读源码的工具

    Linux 平台下阅读源码的工具 前言 看源代码是一个程序员必须经历的事情,也是可以提升能力的一个捷径.个人认为: 要完全掌握一个软件的方法只有阅读源码在Windows下有sourceinsight这 ...

  9. linux平台下防火墙iptables原理(转)

    原文地址:http://www.cnblogs.com/ggjucheng/archive/2012/08/19/2646466.html iptables简介 netfilter/iptables( ...

随机推荐

  1. Unity3D使用mesh创建一个正方形

    using UnityEngine; using System.Collections; public class Quad : MonoBehaviour { // Use this for ini ...

  2. 定时器——Cocos2d-x学习历程(十一)

    1.定时器 利用场景.层和精灵等游戏元素,我们可以构建游戏的框架,但是此时的游戏仍然是静止不动的.在一切游戏中,游戏的状态都会随着时间的流逝而改变,同时我们还需要定时进行一些逻辑判断,例如鱼和子弹的碰 ...

  3. 为什么getline()后要两次回车????(将输入的字符串按单词倒序输出)

    #include<iostream>#include<string>#include<algorithm>using namespace std;int main( ...

  4. Linux学习之nl命令

    nl命令在linux系统中用来计算文件中行号.nl 可以将输出的文件内容自动的加上行号!其默认的结果与 cat -n 有点不太一样, nl 可以将行号做比较多的显示设计,包括位数与是否自动补齐 0 等 ...

  5. 超简单TAB切换

    <div class="tab-fbox2"> <ul class="title-list2 clearfix"> <li cla ...

  6. seajs 学习笔记

    seajs的作者是玉伯,具体好处优点等详见官方网址 介绍 1 模块定义define define(function(require,exports,module){ //require 引入需要的模块 ...

  7. 12.java.lang.NoSuchMethodException

    java.lang.NoSuchMethodException 方法不存在异常 当程序试图通过反射来创建对象,访问(修改或读取)某个方法,但是该方法不存在就会引发异常

  8. Android下pm 命令详解

    Sam在看相关PackageManager代码时,无意中发现Android 下提供一个pm命令,通常放在/system/bin/下.这个命令与Package有关,且非常实用.所以研究之.0. Usag ...

  9. Solr学习(2) Solr4.2.0+IK Analyzer 2012

    Solr学习(二) Solr4.2.0+IK Analyzer 2012 开场白: 本章简单讲述如何在solr中配置著名的 IK Analyzer 分词器. 本章建立在 Solr学习(一)  基础上进 ...

  10. POJ1961Period

    POJ1961 #include<iostream> #include<cstdio> #include<cstring> using namespace std; ...