ORACLE数据迁移
来源:互联网 发布:美画人生淘宝店 编辑:程序博客网 时间:2024/04/30 12:36
Oraccle9i除支持FULL、TABLES和OWNER三种传统方式的export/import外,还支持Tablespaces方式(Tablespaces和Transport Tablespaces)的export/import,对于TABLES方式,Oracle9i中增加了Query方式的export/import,对于前而三种方式我们以前应用较多,不再进行过多的描述,本文主要讨论Query、Tablespaces及Transport Tablespaces方式在数据迁移中的应用。
1、 Query方式
Query参数是Table方式的一种补充,它的主要作用是将表中的一个子集export出来进行迁移,如,我们要迁移所有未处理完成的工单时,可以用该参数:
Exp icdmain/icd file=exp_serviceinfo.dmp tables=serviceinfo query=/” where disposalcursorflag /< 6/”
其中:/为操作系统转义符,避免操作系统处理命令进中的特殊字符;Query参数为一个where子句,对于多个表时,必须保证该子句适用于每一个表,而不是多个表做连接;若未指定其它参数,export的表将包含索引、约束。
在目标数据库中,可以用:
imp icdmain/icd file=exp_serviceinfo.dmp tables=serviceinfo
进行表结构及数据的导入。
注意:
(1)Query参数不能用于full、user和tablespaces方式的export。
(2)Query参数不能使用direct path的export,即使用了Query参数就不能用direct=y参数。
2、 Tablespaces方式
Tablespaces方式主要用于整个表空间,是将整个表空间中的表结构、数据进行导出,如将ICD_BILLLOG1空间中的数据进行导出,可以用该方式:
Exp icd/icd file=exp_icd_billlog1.dmp tablespaces=ICD_BILLLOG1
其中,tablespaces指定需要使出的表空间名称,可以指定多个表空间进行导出,以上命令会将ICD_BILLLOG1表空间的表结构、数据进行导出,若给出其它参数,表空间中所有表的索引、约束也将包含在导出文件中,无论索引数据是否存储在该表空间。
在进行import前,需要保证目的表空间、索引表空间已存在,如上例中,表T_BILLLOG1存储在ICD_BILLLOG1表空间中,而其索引存储在ICD_BILLLOG_IND表空间中,那么,我们需要保证ICD_BILLLOG1、ICD_BILLLOG_IND两个表空间在目的数据库中已经建立,否则索引将导入失败,需要手工进行重建。
Import的命令格式如下:
Imp icd/icd file=exp_icd_billlog1.dmp tablespaces=ICD_BILLLOG1 fromuser=icd touser=icd
注意:要使用tablespaces方式导出的用户必须具有EXP_FULL_DATABASE角色权限。
3、 Transport Tablespaces方式
Transport Tablespaces方式主要用于数据的快速迁移,其原理就是数据文件的复制和数据字典的迁移,因为只要对数据文件进行复制,而不用创建数据文件及import大量数据,因此其速度比以往的方式都要快。
一般迁移的步骤为:
(1)将需要迁移的表空间置为read only状态;
(2)将数据文件复制到目的路径,文件使用FTP,裸设备用dd和FTP命令进行复制。
(3)在源数据库侧做数据字典的export;
(4)在目的数据库侧做数据字典的import;
例如:源数据库DB1上ICDMAIN用户有SERVICE_MAIN_DAT、SERVICE_MAIN_IDX、SERVICE_LOG_DAT、SERVICE_LOG_IDX、SERVICE_HIST_DAT、SERVICE_HIST_IDX六个表空间,我们要将它们全部到DB2上,则可以用以下方法进行:
(1) 用使用alter tablespace SERVICE_MAIN_DAT read only;命令将各表空间置为read only状态。
(2) 复制数据库文件,对于文件系统,直接将数据文件FTP到DB2相应路径,对于裸设备,使用命令:dd if=/dev/rlv_data10 of=/data/data10进行数据复制。
这样,裸设备数据将存储在data10文件中,然后将data10文件FTP到DB2的相应路径,使用命令:dd if=/data/data10 of=/dev/rlv_data20进行数据恢复。
其中rlv_data20为DB2上的一个空闲裸设备,空间大小与DB1上的rlv_data10完全一样。
(3) 在DB1上做export:
exp /"sys//sys as sysdba/" file=exp_service_main_dat.dmp tablespaces= SERVICE_MAIN_DAT transport_tablespace=y tts_owners=icd
其中tts_owners是所有在导出表空间中有属主表的用户。
将各表空间导出后,用FTP或其它方式将文件传送到DB2。
(4)在DB2上做import:
imp /"sys//sys as sysdba/" file=exp_service_main_dat.dmp tablespaces= SERVICE_MAIN_DAT transport_tablespace=y datafiles=/dev/rdata20 tts_owners=icd
若datafiles有多个,设备名之间由逗号分隔。
(5)最后,将源数据库、目的数据库中的表空间状态置为read write:
alter tablespace SERVICE_MAIN_DAT read write;
以上几种方法是在Oracle9i间进行数据迁移。若与其它版本进行数据库迁移,则建议仍使用传统的三种exp方式,并注意不同版本间的imp/exp的兼容关系。
- oracle迁移数据一则
- ORACLE数据迁移
- [Oracle] 迁移数据
- oracle 数据迁移
- ORACLE数据迁移参考
- Oracle数据迁移
- oracle数据库数据迁移
- Oracle基础知识-数据迁移
- Oracle数据迁移参考
- Oracle命令--数据迁移
- Oracle 数据进行迁移
- Oracle数据迁移方案
- 读书笔记-ORACLE数据迁移
- ORACLE 还原(迁移)数据
- Oracle数据迁移
- ORACLE数据迁移
- Oracle数据迁移
- oracle用户数据迁移
- MIPS 架构上函数调用过程中的堆栈和栈帧
- PagerModel分页
- 旭日东升的博客今天开通了!
- boot/boot.asm
- VS08:int argc,_CHAR* argv[]的意义
- ORACLE数据迁移
- 首创中国零售业黄埔军校——赢在终端系列课程
- 全球免费软件推荐(国外篇)
- ajax简单实例
- USB HID描述符
- windows 32bit平台上opatch的使用
- 揭开.NET2.0配置之谜(三)
- C# word类库
- ARM9嵌入式系统在励磁调节装置的应用