手工转移数据库 Step By Step
Author : Kamus
Mail : [email protected]
Date : 2004-1
有时候我们会遇到这样的情况,现有的数据库要从一个机器转移到另外一个机器上,一般我们会使用导出,导入。但是如果数据库的数据非常多,数据文件尺寸很大,那么在导出导入的过程就很可能会出现问题,并且漫长的过程也是我们无法容忍的。在这种情况下,我们可以简单地使用操作系统的 copy 命令,直接进行数据库的转移。
以下示例均在 Redhat Fedora Core 1 上的 Oracle 9.2.0 .1 中操作,其它操作系统和 Oracle 版本同样适用。
假设我们的数据库在服务器 A 上, $ORACLE_BASE 是 /oracle , $ORACLE_HOME 是 /oracle/product/ 9.2.0 。现在我们要将此数据库转移到服务器 B 上,并且新的 $ORACLE_BASE 是 /u01/oracle , $ORACLE_HOME 是 /u01/oracle/product/9.2.0 。 SID 是 oralinux 。
操作步骤如下:
一. 在服务器 B 上安装 Oracle ,安装过程中不要创建数据库。用户的 profile 直接从服务器 A 上 copy 过来即可,注意需要修改原先的 $ORACLE_HOME 到现在的位置。
二. 如果服务器 A 上的 Oracle 使用的是 spfile ,那么根据此 spfile 创建 pfile :
create pfile from spfile ;
三. 关闭服务器 A 上的数据库, shutdown immediate 。如果数据库不允许关闭,那么可以使用联机备份,这种情况数据库必须处于 archivelog 模式,转移的原理和允许关闭的情况一样,此处不作讨论。
四. 备份服务器 A 上的所有数据文件,包括以下:
a) 所有的 datafile (临时文件可以不 copy ,比如 temp01.dbf )
b) 所有的 online redo log
c) 所有的 archive redo log
d) 所有的 control file
e) $ORACLE_HOME/dbs/init
1<sid>.ora (此文件是在上面第二步中创建的)
2
3f) $ORACLE_HOME/dbs/orapw<sid> (这是 password file )
4
5g) $ORACLE_HOME/network/listener.ora (这步可以省略,以后重新生成也可以)
6
7h) $ORACLE_BASE/admin/<sid>/ 下的所有目录,一般是 udump, cdump, bdump (这步可以省略,以后手工创建目录也可以)
8
9五. 通过 FTP 或者别的工具将上述的备份文件,全部上传到服务器 B 的相应目录中。比如说原来在服务器 A 上 $ORACLE_BASE/oradata/<sid>/system01.dbf ,现在就上传到服务器 B 上 $ORACLE_BASE/oradata/<sid>/system01.dbf ,保证目录的逻辑结构一样,实际上物理结构已经发生了变化( A 上 $ORACLE_BASE 是 /oracle ,而 B 上是 /u01/oracle )。其它的文件均作相同处理,如果服务器 B 上还没有相应的目录,那么就手工创建。
10
11六. 编辑上传到服务器 B 上的 init<sid>.ora 文件,将其中涉及的目录结构全部改为 B 中目前的目录结构,比如本例中就是将 /oracle 改为 /u01/oracle 。
12
13七. 在服务器 B 上, sqlplus “/ as sysdba” ,提示进入空闲进程。
14
15八. 根据修改过的 pfile 创建 spfile , create spfile from pfile ;
16
17九. 启动数据库到 mount 状态 ,startup mount ;
18
19十. 修改 control file 中所有数据文件的位置,可以通过 spool 生成所有的 SQL :
20
21SQL> alter database rename file '/oracle/oradata/oralinux/system01.dbf'
22
232 to '/u01/oracle/oradata/oralinux/system01.dbf';
24
25按照以上语法修改所有的数据文件位置。
26
27十一. 此时数据库已经可以使用了, alter database open ;
28
29十二. 将临时文件添加到 TEMP 表空间中:
30
31alter tablespace TEMP add tempfile ‘'/u01/oracle/oradata/oralinux/temp01.dbf’ size 20M ;
32
33十三. 还有一些后续工作,包括更新数据库 B 上的监听配置文件(其实可以不用管,因为 9i 的实例已经可以自动注册到监听程序上了,如果是先起监听再起数据库,那么立刻就会注册,如果是先起数据库再起监听,那么会稍微有些延时才注册),修改 /etc/oratab 文件,以能够使用 dbstart 和 dbshut 脚本。
34
35这样数据库就算完全转移了,如果有什么问题,可以给我发邮件。</sid></sid></sid></sid></sid></sid>