c经过长时间的发展,这里我发表一下个人理解,下面就这就来讲术Linux Oracle。有时候我们会遇到这样的情况,现有的数据库要从一个机器转移到另外一个机器上,一般我们会使用导出,导入。但是如果数据库的数据非常多,数据文件尺寸很大,那么在导出导入的过程就很可能会出现问题,并且漫长的过程也是我们无法容忍的。
在这种情况下,我们可以简单地使用操作系统的copy命令,直接进行数据库的转移。 以下示例均在Redhat Fedora Core 1上的Linux Oracle9.2.0.1中操作,其它操作系统和Linux Oracle版本同样适用。
假设我们的数据库在服务器A上,$Linux Oracle_BASE是/Linux Oracle,$Linux Oracle_HOME是/Linux Oracle/product/9.2.0。现在我们要将此数据库转移到服务器B上,并且新的$Linux Oracle_BASE是/u01/Linux Oracle,$Linux Oracle_HOME是/u01/Linux Oracle/product/9.2.0。SID是oralinux。
操作步骤如下:
一. 在服务器B上安装Linux Oracle,
安装过程中不要创建数据库。用户的profile直接从服务器A上copy过来即可,注意需要修改原先的$Linux Oracle_HOME到现在的位置。
二. 如果服务器A上的Linux 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) $Linux Oracle_HOME/dbs/init<SID>;.ora(此文件是在上面第二步中创建的)
f) $Linux Oracle_HOME/dbs/orapw<SID>;(这是password file)
g) $Linux Oracle_HOME/network/listener.ora(这步可以省略,以后重新生成也可以)
h) $Linux Oracle_BASE/admin/<SID>;/下的所有目录,一般是udump, cdump, bdump(这步可以省略,以后手工创建目录也可以)
五. 通过FTP或者别的工具将上述的备份文件,全部上传到服务器B的相应目录中。比如说原来在服务器A上$Linux Oracle_BASE/oradata/<SID>;/system01.dbf,现在就上传到服务器B上$Linux Oracle_BASE/oradata/<SID>;/system01.dbf。
保证目录的逻辑结构一样,实际上物理结构已经发生了变化(A上$Linux Oracle_BASE是/Linux Oracle,而B上是/u01/Linux Oracle)。其它的文件均作相同处理,如果服务器B上还没有相应的目录,那么就手工创建。
六. 编辑上传到服务器B上的init<SID>;
.ora文件,将其中涉及的目录结构全部改为B中目前的目录结构,比如本例中就是将/Linux Oracle改为/u01/Linux Oracle。
七. 在服务器B上,sqlplus “/ as sysdba”,提示进入空闲进程。
八. 根据修改过的pfile创建spfile,create spfile from pfile;
九. 启动数据库到mount状态,startup mount;
十. 修改control file中所有数据文件的位置,
可以通过spool生成所有的SQL: SQL>; alter database rename file '/Linux Oracle/oradata/oralinux/system01.dbf'
2 to '/u01/Linux Oracle/oradata/oralinux/system01.dbf'; 按照以上语法修改所有的数据文件位置。
十一. 此时数据库已经可以使用了,
alter database open;
十二. 将临时文件添加到TEMP表空间中:
alter tablespace TEMP add tempfile ‘'/u01/Linux Oracle/oradata/oralinux/temp01.dbf’ size 20M;
十三. 还有一些后续工作,
包括更新数据库B上的监听配置文件(其实可以不用管,因为9i的实例已经可以自动注册到监听程序上了,如果是先起监听再起数据库,那么立刻就会注册,如果是先起数据库再起监听,那么会稍微有些延时才注册),修改/etc/oratab文件,以能够使用dbstart和dbshut脚本。
这样数据库就算完全转移了,如果有什么问题,可以给我发邮件。没问题,只要全部online都在,但是因为是online备份,所以如果业务繁忙,缺少一些数据是无法避免的。 如果是在线备份需要先recover database。 如下:
- [zhangleyi@as orcl]$ sqlplus "/ as sysdba"
- SQL*Plus: Release 9.2.0.4.0 - Production on Mon Jan 5 17:33:38 2004
- Copyright (c) 1982, 2002, Linux Oracle Corporation. All rights reserved.
- Connected to an idle instance.
- SQL>; startup
- Linux Oracle instance started.
- Total System Global Area 118035836 bytes
- Fixed Size 451964 bytes
- Variable Size 96468992 bytes
- Database Buffers 20971520 bytes
- Redo Buffers 143360 bytes
- Database mounted.
- ORA-01113: file 1 needs media recovery
- ORA-01110: data file 1: '/Linux Oracle/oradata/orcl/system01.dbf'
- SQL>; recover database
- Media recovery complete.
- SQL>; shutdown
- ORA-01109: database not open
- Database dismounted.
- Linux Oracle instance shut down.
- SQL>; startup
- Linux Oracle instance started.
- Total System Global Area 118035836 bytes
- Fixed Size 451964 bytes
- Variable Size 96468992 bytes
- Database Buffers 20971520 bytes
- Redo Buffers 143360 bytes
- Database mounted.
- Database opened.
- SQL>;
【编辑推荐】