使用exp/imp来移动表空间到另一个数据库中的例子

exp/imp还有一个TRANSPORT_TABLESPACE的功能,可以传输整个表空间的数据,就是把一个数据库上的数据文件加到另外一个数据库中,而不是把数据导出成Dmp文件。用这个传输还有一定的限制:

关于传输表空间有一些规则,即:

·源数据库和目标数据库必须运行在相同的硬件平台上。

·源数据库与目标数据库必须使用相同的字符集。

·源数据库与目标数据库一定要有相同大小的数据块

·目标数据库不能有与迁移表空间同名的表空间

·SYS的对象不能迁移

·必须传输自包含的对象集

·有一些对象,如物化视图,基于函数的索引等不能被传输

可以用以下的方法来检测一个表空间或一套表空间是否符合传输标准:

exec sys.dbms_tts.transport_set_check('tablespace_name',true);

select * from sys.transport_set_violation;

如果没有行选择,表示该表空间只包含表数据,可以传输。

其步骤:

1. 源数据库表空间设为只读:

alter tablespace hygeia read only;

2. 发出exp命令,用户必须是sysdba:

C:\Documents and Settings\Administrator>exp 'sys/ocp as sysdba' transport_tables

pace=y tablespaces=hygeia file=d:\oracle\hygeia.dmp log=d:\oracle\hygeia.log

3.将导出文件hygeia.dmp和表空间hygeia的数据文件hygeia01.dbf和hygeia02.dbf拷贝到目标机器上

4. 源数据库表空间设为可读写:

alter tablespace hygeia read write;

如果在修改表空间为读写后再复制数据文件和导出的dmp文件到目标数据库那么在执行imp导入时会报

IMP-00003:遇到ORACLE错误19722

ORA-19722:数据文件D:\oracle\hygeia版本错误

ORA-06512:在"SYS.DBMS_PLUGTS", line 2065

ORA-06512:在line 1

IMP-00000:未成功终止导入

5.在目数据库中创建一个hygeia用户不用指定缺省表空间

Create User insur_changde Identified By "changde"

6. 目标数据库imp文件:

C:\Documents and Settings\Administrator>imp 'sys/ocp as sysdba' file=d:\hygeia.d

mp  transport_tablespace=y tablespaces=hygeia datafiles=('D:\oracle\product\10.2

.0\oradata\ocp\HYGEIA01.DBF','D:\oracle\product\10.2.0\oradata\ocp\HYGEIA02.DBF'

)

7.修改目标数据库中insur_changde用户的缺省表空间为hygeia

Alter User insur_changde Default Tablespace hygeia

8. 目标数据库表hygeia空间设为可读写:

alter tablespace users read write;

时间: 2024-10-29 09:04:37

使用exp/imp来移动表空间到另一个数据库中的例子的相关文章

sql-将一个数据库中的所有表复制到另一个数据库中

问题描述 将一个数据库中的所有表复制到另一个数据库中 两个数据库不在一个服务器上!!! 比如我本机的ip地址为11.12.13.15 数据库名称为sqljiang 登陆名和密码分别为sa和sa123 服务器的ip为22.33.55.66 数据库名称为sqlfwqsjl 服务器中的数据库是空的 现在我想将本机sqljiang中的所有信息完整复制到服务器中,包括表结构. 表中的数据.视图.存储过程等,如何通过脚本实现. 由于服务器没有这么大的权限,因此不能通过直接还原数据库备份的方法... 解决方案

sql语句-SQL语句创建的表不在新建的数据库中而在系统数据库中,

问题描述 SQL语句创建的表不在新建的数据库中而在系统数据库中, SQL语句创建的表不在新建的数据库中而在系统数据库中, 怎么让表在新建的数据库呢 解决方案 肯定你写错了,或者数据库连接到了系统库,或者sql中指明了写到系统库了 解决方案二: 你没写 use database; database是你的数据库 解决方案三: 创建表前,先写需要创建在哪个数据库中.USE DATABASE GO......CREATE TABLENAME() 解决方案四: 先要使用自己的数据库 use databas

jsp 修改数据库信息-jsp中用户修改表单信息,从而数据库中相应的字段值也update

问题描述 jsp中用户修改表单信息,从而数据库中相应的字段值也update 点击图片1的"修改密码"按钮,会出现图片二的修改密码的表单.这个修改密码是由用户自己修改的,用户修改密码之后,表"userInfo"中的"userPwdz"字段值就相应变化了.我应该怎么写得到用户修改的密码参数,然后update表呢? 新手求指教,麻烦解答一下,感激万分!!!! 解决方案 sql语句写错了,update好像木有 星号,而且参数好像也不应该这样传进去,一般用

VC ADO 怎么实现复制一个数据库中一个表的某些字段到另一个数据库的表中?

问题描述 VC ADO 怎么实现复制一个数据库中一个表的某些字段到另一个数据库的表中? 想从一个Access数据库中的a表中提取需要的字段复制到另一个数据库的b表中,有大神知道怎么弄吗 解决方案 循环读取第一个表的内容,然后插入第二个表.http://www.cnblogs.com/spatial/archive/2009/07/18/1526255.html 解决方案二: 循环复制,但是需要考虑a与b表是否一样,有什么对应关系,不能乱复制 解决方案三: 如何从一个数据库复制表的结构到另一个数据

怎样把一个datagridview表中的数据存为一个数据库中的一个数据表?

问题描述 如题....在线等..... 解决方案 解决方案二:从它的数据源datatable直接循环构成insert语句即可解决方案三:SqlCommandBuilderSCB=newSqlCommandBuilder(dataAdapter1);dataAdapter1.Update(dgv1.Tables[0]);解决方案四:注意要定义变量dataAdapter1,ds1dgv要绑定ds1.Tables[0]SqlCommandBuilderSCB=newSqlCommandBuilder(

警惕数据IMP导入的表空间是EXP同名的表空间而不是用户默认的表空间

场景:某日应测试要求从生产导出一批数据用于测试,单个表多在1G以上,为此专门在测试环境新建了表空间和测试用户,预留了足够的空间.可是没想到imp时老提示表空间不够,通过表空间查询语句默认表空间利用率不足1%,最终突然想到虽然导入时指定了fromuser\touser,但是表空间未必会指定到默认的表空间,上网查了下果然如此. 机器环境:P550小型机\ORACLE10G 此前操作步骤: --建立LV mklv -y  TEST_DAT -T O -w n -s n -r n oradatavg 8

表空间 数据文件-oracle数据库表空间中的数据文件自动扩展到32G后不再自动扩展

问题描述 oracle数据库表空间中的数据文件自动扩展到32G后不再自动扩展 CSDN移动问答oracle表空间中的数据文件自动扩展到32G后不再自动扩展,报ora-01653错误,我之后手动加了个数据文件,但是不久之后这个数据文件自动扩展到了32G又报错,请问这是什么原因,难道以后只能手动添加数据文件么????

sql中获取一个数据库中的所有表的名称、一个表中所有字段的名称

1.查询数据库中的所有数据库名:  代码如下 复制代码  SELECT Name FROM Master..SysDatabases ORDER BY Name2. 查询某个数据库中所有的表名:  代码如下 复制代码  SELECT Name FROM SysObjects Where XType='U' ORDER BY Name3. 查询表结构信息  代码如下 复制代码 SELECT (case when a.colorder=1 then d.name else null end) 表名,

SQLSERVER如何获取一个数据库中的所有表的名称、一个表中所有字段的名称

原文 http://www.cnblogs.com/ynbt/archive/2012/07/16/2593389.html 1.查询数据库中的所有数据库名: SELECT Name FROM Master..SysDatabases ORDER BY Name 2.查询某个数据库中所有的表名: SELECT Name FROM SysObjects Where XType='U' ORDER BY Name 3.查询表结构信息: 1 SELECT (case when a.colorder=1