手工转移数据库Step By Step


[原创] 手工转移数据库Step By Step

 


http://www.chinaunix.net 作者:seraphim   发表于:2004-01-26 17:34:09

转自:http://www.chinaunix.net/jh/19/236232.html

发表评论 】 【查看原文 】 【Oracle讨论区 】【关闭

手工转移数据库Step By Step

Author:Seraphim
Mail:kamus@itpub.net
Date:2004-1

有时候我们会遇到这样的情况,现有的数据库要从一个机器转移到另外一个机器上,一般我们会使用导出,导入。但是如果数据库的数据非常多,数据文件 尺寸很大,那么在导出导入的过程就很可能会出现问题,并且漫长的过程也是我们无法容忍的。在这种情况下,我们可以简单地使用操作系统的copy命令,直接 进行数据库的转移。
以下示例均在Redhat Fedora Core 1上的Oracle9.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<SID>;.ora(此文件是在上面第二步中创建的)
f) $ORACLE_HOME/dbs/orapw<SID>;(这是password file)
g) $ORACLE_HOME/network/listener.ora(这步可以省略,以后重新生成也可以)
h) $ORACLE_BASE/admin/<SID>;/下的所有目录,一般是udump, cdump, bdump(这步可以省略,以后手工创建目录也可以)
五. 通过FTP或者别的工具将上述的备份文件,全部上传到服务器B的相应目录中。比如说原来在服务器A上$ORACLE_BASE/oradata /<SID>;/system01.dbf,现在就上传到服务器B上$ORACLE_BASE/oradata/<SID>; /system01.dbf,保证目录的逻辑结构一样,实际上物理结构已经发生了变化(A上$ORACLE_BASE是/oracle,而B上是/u01 /oracle)。其它的文件均作相同处理,如果服务器B上还没有相应的目录,那么就手工创建。
六. 编辑上传到服务器B上的init<SID>;.ora文件,将其中涉及的目录结构全部改为B中目前的目录结构,比如本例中就是将/oracle改为/u01/oracle。
七. 在服务器B上,sqlplus “/ as sysdba”,提示进入空闲进程。
八. 根据修改过的pfile创建spfile,create spfile from pfile;
九. 启动数据库到mount状态,startup mount;
十. 修改control file中所有数据文件的位置,可以通过spool生成所有的SQL:
SQL>; alter database rename file '/oracle/oradata/oralinux/system01.dbf'
  2  to '/u01/oracle/oradata/oralinux/system01.dbf';
按照以上语法修改所有的数据文件位置。
十一. 此时数据库已经可以使用了,alter database open;
十二. 将临时文件添加到TEMP表空间中:
alter tablespace TEMP add tempfile ‘'/u01/oracle/oradata/oralinux/temp01.dbf’ size 20M;
十三. 还有一些后续工作,包括更新数据库B上的监听配置文件(其实可以不用管,因为9i的实例已经可以自动注册到监听程序上了,如果是先起监听再起数据库,那么 立刻就会注册,如果是先起数据库再起监听,那么会稍微有些延时才注册),修改/etc/oratab文件,以能够使用dbstart和dbshut脚本。

这样数据库就算完全转移了,如果有什么问题,可以给我发邮件。



 eagle_fan 回复于:2004-01-05 13:06:10

有个疑问:
如果不shutdown数据库,online redo log可以备份吗?


 seraphim 回复于:2004-01-05 17:45:46

没问题,只要全部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, Oracle Corporation.  All rights reserved.

Connected to an idle instance.

SQL>; startup
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: '/oracle/oradata/orcl/system01.dbf'


SQL>; recover database
Media recovery complete.

SQL>; shutdown
ORA-01109: database not open


Database dismounted.
ORACLE instance shut down.
SQL>; startup
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>;


 OCPHUI 回复于:2004-01-05 19:40:45

用rman duplicate database 更方便哦。

而且不用shutdown。


 melonm 回复于:2004-01-06 10:54:19

对于Oracle数据库备份而言,**不要备份Online Redo Log**。

SQL>; recover database 
Media recovery complete.

这是从archive logs里恢复。

当Cold/Offline 备份,备份两类Oracle文件:
* Database files
* Control files

当Hot/Online备份,备份三类Oracle文件:
* Database files
* Control Files
* Archive logs


 seraphim 回复于:2004-01-06 12:29:53

引用:原帖由 "melonm" 发表:
对于Oracle数据库备份而言,**不要备份Online Redo Log**。

SQL>; recover database 
Media recovery complete.

这是从archive logs里恢复。

当Cold/Offline 备份,备份两类Oracle文件:
* Databas..........



对于备份来说确实不应该备份Online Redo,原因在于避免误将备份的Online Redo在恢复的时候覆盖了当前的online Redo,这是意义所在。
本例中主旨在于移动数据库,和备份没有关系,所以copy了online redo。
另外recover database不仅仅是从archive中恢复,如果需要恢复的SCN在online redo中,自然也同样会用到online redo,否则不是archivelog模式的怎么recover?


 paulyang88 回复于:2004-01-26 17:34:09

我们能够恢复各种原因造成的SQL SERVER数据库损坏,详细请看http://www.haou.net/sqlother/

ms sql server database recover

I can recover all type of ms sql server database losing.please contact me at cn9526@163.net

or contact me with msn: paulyang8848@hotmail.com

I can chat with u.thanks!



 

 

原文链接:http://bbs.chinaunix.net/viewthread.php?tid=236232
转载请注明作者名及原文出处

 

 类似文档:

 

转自:http://space.itpub.net/673608/viewspace-614299

oracle 移动数据文件

上一篇 / 下一篇  2009-09-09 22:36:26 / 个人分类:oracle-admin

某天晚上,被告之数据库 不能正常使用,sqlplus登陆的时候,报错,没有空间,然后去服务器上看,df,果然100%。这就是把数据文件和oracle 安装 目 录装一起的坏处。忍痛删掉几kb文件之后,能用dba登陆,然后想到个方案,把数据文件转移到空闲的其他区。用mv命令,转移之后依然100%。绝望的把 对应的tablespace rename在新位置,并且online之后,关库,重启服务器,发现df能正确的显示百分比了,随即一点一点的挪完。途中还碰到ORA-01525 ora-01533 等错误,在rename的时候,只能不移对应的数据文件,还原回去online。

收集一下网上正确移动数据文件的方法如下:

如果数据库处于非归档模式下,可以通过如下步骤更改文件路径:
1.关闭数据库
2.系统级进行文件复制
3.启动数据库到mount状态
3.通过SQL 修改数据文件位置
4.打开数据库
以下是实际操作的步骤示范:

1.数据库处于非归档模式

SQL> archive log list;
Database log mode No Archive Mode
Automatic archival Enabled
Archive destination /opt/oracle/oradata/conner/archive
Oldest online log sequence 150
Current log sequence 153

2.需要移动test.dbf文件
SQL> select name from v$datafile;

NAME
------------------------------------------------------------
/opt/oracle/oradata/conner/system01.dbf
/opt/oracle/oradata/conner/undotbs01.dbf
/opt/oracle/oradata/conner/users01.dbf
/opt/oracle/test.dbf

3.关闭数据库
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.

4.复制文件到新的位置
SQL> ! cp /opt/oracle/test.dbf /opt/oracle/oradata/conner/test.dbf

5.启动数据库到mount状态
SQL> startup mount;
ORACLE instance started.

Total System Global Area 101782828 bytes
Fixed Size 451884 bytes
Variable Size 37748736 bytes
Database Buffers 62914560 bytes
Redo Buffers 667648 bytes
Database mounted.
SQL> select name from v$datafile;

NAME
-----------------------------------------------------------
/opt/oracle/oradata/conner/system01.dbf
/opt/oracle/oradata/conner/undotbs01.dbf
/opt/oracle/oradata/conner/users01.dbf
/opt/oracle/test.dbf

6.修改文件位置
SQL> alter database rename file '/opt/oracle/test.dbf' to '/opt/oracle/oradata/conner/test.dbf';

Database altered.

SQL> alter database open;

Database altered.


SQL> select name from v$datafile;

NAME
----------------------------------------------------------------
/opt/oracle/oradata/conner/system01.dbf
/opt/oracle/oradata/conner/undotbs01.dbf
/opt/oracle/oradata/conner/users01.dbf
/opt/oracle/oradata/conner/test.dbf

SQL>

采用offline的方式
第一步,将表空间offline
alter tablespacetablespace_name offline;
第二步,cp文件到新的目录并rename修改控制文件
第三步,将相应表空间online
当然这种方式同样会影响期间的表空间使用。

以下是简单的示范步骤:
1.将表空间offline
[oracle@jumper oracle]$ sqlplus "/ as sysdba"

SQL*Plus: Release 9.2.0.4.0 - Production on Sat Nov 12 18:14:21 2005

Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.


Connected to:
Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production
With the Partitioning option
JServer Release 9.2.0.4.0 - Production

SQL> archive log list;
Database log mode No Archive Mode
Automatic archival Enabled
Archive destination /opt/oracle/oradata/conner/archive
Oldest online log sequence 6
Current log sequence 9
SQL> select name from v$datafile;

NAME
---------------------------------------------------------
/opt/oracle/oradata/conner/system01.dbf
/opt/oracle/oradata/conner/undotbs01.dbf
/opt/oracle/oradata/conner/users01.dbf

SQL> alter tablespace users offline;

Tablespace altered.

2.拷贝相应的数据文件
SQL> ! cp /opt/oracle/oradata/conner/users01.dbf /opt/oracle/oradata/users01.dbf

SQL> alter tablespace users rename datafile '/opt/oracle/oradata/conner/users01.dbf'
to '/opt/oracle/oradata/users01.dbf';

Tablespace altered.

3.将表空间online
SQL> alter tablespace users online;

Tablespace altered.

SQL> select name from v$datafile;

NAME
------------------------------------------------------------------------
/opt/oracle/oradata/conner/system01.dbf
/opt/oracle/oradata/conner/undotbs01.dbf
/opt/oracle/oradata/users01.dbf

当然还有一些其他的方法可以采用.

以上两种方法,可能在要求较高的24x7系统中不适合采用,因为会使表空间长时间不可用。
特别是当表空间数据文件巨大时,物理拷贝可能需要较长的时间。

本文推荐另外一种方法,可以做一个折中,以下是一个简单的步骤说明:
1.将表空间置于只读
只读状态可以使数据仍然可为用户访问.
alter tablespacetablespace_name read only;
2.物理拷贝文件
3.将表空间offline
alter tablespacetablespace_name offline;
4.rename数据文件
alter database rename file'old_dir_file' to'new_dir_file' ;
5.将表空间联机
alter tablespacetablespace_name online;
6.将表空间置于read write模式
alter tablespacetablespace_name read write;
以下是示范步骤:
1.将表空间置于只读状态
[oracle@jumper oracle]$ sqlplus "/ as sysdba"

SQL*Plus: Release 9.2.0.4.0 - Production on Sat Nov 12 21:10:49 2005

Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.


Connected to:
Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production
With the Partitioning option
JServer Release 9.2.0.4.0 - Production

SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /opt/oracle/oradata/conner/archive
Oldest online log sequence 7
Next log sequence to archive 10
Current log sequence 10
SQL> select name from v$datafile;

NAME
--------------------------------------------------------------------------
/opt/oracle/oradata/conner/system01.dbf
/opt/oracle/oradata/conner/undotbs01.dbf
/opt/oracle/oradata/conner/users01.dbf

SQL> alter tablespace users read only;

Tablespace altered.

2.物理拷贝文件
SQL> ! cp /opt/oracle/oradata/conner/users01.dbf /opt/oracle/oradata/users01.dbf

3.将表空间脱机
SQL> alter tablespace users offline;

Tablespace altered.

4.修改文件名称
SQL> alter database rename file '/opt/oracle/oradata/conner/users01.dbf' to '/opt/oracle/oradata/users01.dbf';

Database altered.

5.将表空间联机
SQL> alter tablespace users online;

Tablespace altered.

6.将表空间置于读写状态
SQL> alter tablespace users read write;

Tablespace altered.

SQL> select name from v$datafile;

NAME
--------------------------------------------------------------------------
/opt/oracle/oradata/conner/system01.dbf
/opt/oracle/oradata/conner/undotbs01.dbf
/opt/oracle/oradata/users01.dbf

SQL>

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值