是否有一种简便的方法可以使用一个新的或不同于数据来源的表空间将模式导入Oracle 11gR2?
例如,我已经从OLDDB导出了BLOG_DATA,所有用户数据都存储在USERS表空间中。
在NEWDB上,我想导入BLOG_DATA模式,但是将用户对象存储在专门为此用户创建的BLOG_DATA表空间中。
我已经创建了BLOG_DATA用户,创建了BLOG_DATA表空间,并将其设置为该用户的默认表空间,并添加了适当的无限配额。
CREATE TABLESPACE blog_data DATAFILE SIZE 1G;
CREATE USER blog_data IDENTIFIED BY secretpassword DEFAULT TABLESPACE blog_data QUOTA UNLIMITED ON blog_data;
GRANT connect,resource TO blog_data
该模式是从OLDDB导出的,类似于
exp blog_data/secretpassword@OLDDB file=blog_data.dmp
在阅读了Phil的出色回答后,我发现自己很纳闷:
由于数据除了默认表空间(用户拥有配额的唯一表空间)外别无其他地方,这是否会有效地迫使imp将所有用户对象放在该默认表空间中?
imp blog_data/secretpassword@NEWDB file=blog_data.dmp
然后,这会将整个blog_data模式放在NEWDB的blog_data表空间中吗?有什么原因为什么这行不通或者我会遇到某些对象等问题?
更新:
我进行了快速测试,发现情况确实如此。Imp
将对象放置在该用户的默认表空间中,前提是该对象不能将其放置在原始表空间中(例如,该表空间不存在)。完整说明:http : //www.dolicapax.org/? p= 57
不过,我认为像Phil那样使用Data Pump可能是首选。
exp
实用程序还是通过expdp
(数据泵)导出的?