第一种情况: 目标数据库中存在与导出用户的缺省表空间同名的表空间,此时,一定要将导入用户的 unlimited tablespace 权限 revoke 掉,否则,数据将全部被导入到那个同名的表空间中,而不是导入用户的缺省表空间中。 1、 从源数据库中导出数据 (1) 授予导出用户DBA权限 SQL> connect system@njgajhpt Connected to Oracle9i Enterprise Edition Release 9.2.0.4.0 Connected as system SQL> grant dba to sh; Grant succeeded SH的缺省表空间是EXAMPLE SQL> select username,default_tablespace from dba_users 2 where username = 'SH'; USERNAME DEFAULT_TABLESPACE ------------------------------ ------------------------------ SH EXAMPLE (2)、导出数据 C:Documents and Settingscuiqing>exp sh/sh@njgajhpt file='d:tempsh.dmp' tables=customers direct=y Export: Release 9.2.0.1.0 - Production on 星期四 11月 16 16:36:31 2006 即将导出指定的表通过直接路径 ... . . 正在导出表 CUSTOMERS 50000 行被导出 在没有警告的情况下成功终止导出。 2、 导入目标数据库 (1) 创建表空间 SQL> create tablespace ts_qcui 2 datafile 'D:ORACLEORADATAJWPTZJKts_qcui.ora' 3 size 20M autoextend on next 8M maxsize 1024M; Tablespace created (2) 创建用户 SQL> create user qcui identified by qcui 2 default tablespace ts_qcui; User created SQL> grant connect,resource to qcui; Grant succeeded (3) 导入数据 C:Documents and Settingscuiqing>imp qcui/qcui@jwptzjk fromuser=sh touser=qcui file='d:tempsh.dmp' constraints=n Import: Release 9.2.0.1.0 - Production on 星期四 11月 16 16:43:00 2006 经由直接路径导出由EXPORT:V09.02.00创建的导出文件 IMP-00013: 只有 DBA 才能导入由其它 DBA 导出的文件 IMP-00000: 未成功终止导入 (4) 授予导入用户DBA权限 SQL> grant dba to qcui; Grant succeeded (5) 授权后重新导入 C:Documents and Settingscuiqing>imp qcui/qcui@jwptzjk fromuser=sh touser=qcui file='d:tempsh.dmp' constraints=n 经由直接路径导出由EXPORT:V09.02.00创建的导出文件 警告: 此对象由 SH 导出, 而不是当前用户 . . 正在导入表 "CUSTOMERS" 50000行被导入 成功终止导入,但出现警告。 (6) 检查数据存放的表空间。数据没有按预期存放在QCUI的缺省表空间TS_QCUI中 SQL> select table_name,tablespace_name from dba_tables 2 where owner = 'QCUI'; TABLE_NAME TABLESPACE_NAME ------------------------------ ------------------------------ CUSTOMERS EXAMPLE (7) 回收QCUI的unlimited tablespace权限 SQL> revoke unlimited tablespace from qcui; Revoke succeeded SQL> alter user qcui quota unlimited on ts_qcui; User altered (8) 回收权限后重新导入 SQL> drop table qcui.customers; Table dropped C:Documents and Settingscuiqing>imp qcui/qcui@jwptzjk fromuser=sh touser=qcui file='d:tempsh.dmp' constraints=n 经由直接路径导出由EXPORT:V09.02.00创建的导出文件 警告: 此对象由 SH 导出, 而不是当前用户 . . 正在导入表 "CUSTOMERS" 50000行被导入 成功终止导入,但出现警告。 (9) 检查数据存放的表空间。数据存放在QCUI的缺省表空间TS_QCUI中 SQL> select table_name,tablespace_name from dba_tables 2 where owner = 'QCUI'; TABLE_NAME TABLESPACE_NAME ------------------------------ ------------------------------ CUSTOMERS TS_QCUI 关于IMP由拥有DBA权限的用户EXP数据时,数据存放表空间的几种情况(IMP-00013) -2 第二种情况: 目标数据库中没有与导出用户的缺省表空间同名的表空间,这种情况下,并不需要将导入用户的 unlimited tablespace 权限 revoke 掉。 1、从源数据库中导出数据 (1)创建表空间 SQL> create tablespace ts_candy 2 datafile 'D:ORACLEORADATANJGAJHPTts_candy.ora' 3 size 20M autoextend on next 8M maxsize 1024M; Tablespace created (2) 创建用户,缺省表空间是 ts_candy SQL> create user candy identified by candy 2 default tablespace ts_candy; User created SQL> grant dba to candy; Grant succeeded (3) 创建表 SQL> connect candy/candy@njgajhpt SQL> create table candy_tables 2 as 3 select * from all_tables; Table created (4) 导出数据 C:Documents and Settingscuiqing>exp candy/candy@njgajhpt file='d:tempcandy.dmp' direct=y 即将导出指定的表通过直接路径 ... . . 正在导出表 CANDY_TABLES 991 行被导出 在没有警告的情况下成功终止导出。 2、 导入目标数据库 (1) 目标数据库中没有与 ts_candy同名的表空间 SQL> select tablespace_name from dba_tablespaces 2 where tablespace_name = 'TS_CANDY'; TABLESPACE_NAME ------------------------------ (2) 导入数据(导入用户qcui 已授予DBA权限,并且具有 unlimited tablespace权限) SQL> select grantee,privilege from dba_sys_privs 2 where grantee = 'QCUI'; GRANTEE PRIVILEGE ------------------------------ ---------------------------------------- QCUI UNLIMITED TABLESPACE C:Documents and Settingscuiqing>imp qcui/qcui@jwptzjk fromuser=candy touser=qcui file='d:tempcandy.dmp' constraints=n 经由直接路径导出由EXPORT:V09.02.00创建的导出文件 警告: 此对象由 CANDY 导出, 而不是当前用户 已经完成ZHS16GBK字符集和AL16UTF16 NCHAR 字符集中的导入 . . 正在导入表 "CANDY_TABLES" 919行被导入 成功终止导入,但出现警告。 (3) 检查数据存放的表空间。数据存放在QCUI的缺省表空间TS_QCUI中 SQL> select table_name,tablespace_name from dba_tables 2 where owner = 'QCUI'; TABLE_NAME TABLESPACE_NAME ------------------------------ ------------------------------ CUSTOMERS TS_QCUI CANDY_TABLES TS_QCUI 小结:当拿到由拥有DBA权限的用户导出的数据时,最好问清楚其缺省表空间,如果目标数据库中存在与导出数据库同名的表空间时,这种情况需要特别注意。 我们往往在一看到“IMP-00013: 只有 DBA 才能导入由其它 DBA 导出的文件” 这个错误信息后,就立刻给导入用户授予DBA权限,但却忽略了DBA的角色是拥有对数据库中所有表空间unlimit的权限,造成花费很长时间import结束后,却发现没有导入到预期的表空间中。 简而言之,如果有同名表空间存在的话,必须将导入用户的 unlimited tablespace的权限 revoke 掉,否则数据将被直接存放到了那个同名表空间中,而不是导入用户缺省的表空间中;如果没有同名表空间,则无需进行 revoke,oracle 会自动将数据存放在导入用户的缺省表空间中。 最后一个需要注意的问题就是DBA授权问题,个人建议,一个数据库中除了system和sys用户以外,最好严格控制DBA权限的授予,尤其是不要随便赋予应用系统schema的owner以 这个权限。目前国内的软件开发以及项目管理的能力还很薄弱,绝大多数项目中,不会设立专门的数据库管理角色,又为了图方便,往往赋予应用系统schema 的owner以DBA权限,这样一来,在一个几十人或者上百人的团队中,其中任何一个开发人员或是运维人员一个随意的对DB的操作,对DB而言也许将会是灾难性的。因此,当导入数据后,应及时revoke掉 DBA 权限。
把此链接加入于...
与朋友分享
已已沉
添加到:
第一种情况: 目标数据库中存在与导出用户的缺省表空间同名的表空间,此时,一定要将导入用户的 unlimited tablespace 权限 revoke 掉,否则,数据将全部被导入到那个同名的表空间中,而不是导入用户的缺省表空间中。 1、 从源数据库中导出数据 (1) 授予导出用户DBA权限 SQL> connect system@njgajhpt Connected to Oracle9i Enterprise Edition Release 9.2.0.4.0 Connected as system SQL> grant dba to sh; Grant succeeded SH的缺省表空间是EXAMPLE SQL> select username,default_tablespace from dba_users 2 where username = 'SH'; USERNAME DEFAULT_TABLESPACE ------------------------------ ------------------------------ SH EXAMPLE (2)、导出数据 C:Documents and Settingscuiqing>exp sh/sh@njgajhpt file='d:tempsh.dmp' tables=customers direct=y Export: Release 9.2.0.1.0 - Production on 星期四 11月 16 16:36:31 2006 即将导出指定的表通过直接路径 ... . . 正在导出表 CUSTOMERS 50000 行被导出 在没有警告的情况下成功终止导出。 2、 导入目标数据库 (1) 创建表空间 SQL> create tablespace ts_qcui 2 datafile 'D:ORACLEORADATAJWPTZJKts_qcui.ora' 3 size 20M autoextend on next 8M maxsize 1024M; Tablespace created (2) 创建用户 SQL> create user qcui identified by qcui 2 default tablespace ts_qcui; User created SQL> grant connect,resource to qcui; Grant succeeded (3) 导入数据 C:Documents and Settingscuiqing>imp qcui/qcui@jwptzjk fromuser=sh touser=qcui file='d:tempsh.dmp' constraints=n Import: Release 9.2.0.1.0 - Production on 星期四 11月 16 16:43:00 2006 经由直接路径导出由EXPORT:V09.02.00创建的导出文件 IMP-00013: 只有 DBA 才能导入由其它 DBA 导出的文件 IMP-00000: 未成功终止导入 (4) 授予导入用户DBA权限 SQL> grant dba to qcui; Grant succeeded (5) 授权后重新导入 C:Documents and Settingscuiqing>imp qcui/qcui@jwptzjk fromuser=sh touser=qcui file='d:tempsh.dmp' constraints=n 经由直接路径导出由EXPORT:V09.02.00创建的导出文件 警告: 此对象由 SH 导出, 而不是当前用户 . . 正在导入表 "CUSTOMERS" 50000行被导入 成功终止导入,但出现警告。 (6) 检查数据存放的表空间。数据没有按预期存放在QCUI的缺省表空间TS_QCUI中 SQL> select table_name,tablespace_name from dba_tables 2 where owner = 'QCUI'; TABLE_NAME TABLESPACE_NAME ------------------------------ ------------------------------ CUSTOMERS EXAMPLE (7) 回收QCUI的unlimited tablespace权限 SQL> revoke unlimited tablespace from qcui; Revoke succeeded SQL> alter user qcui quota unlimited on ts_qcui; User altered (8) 回收权限后重新导入 SQL> drop table qcui.customers; Table dropped C:Documents and Settingscuiqing>imp qcui/qcui@jwptzjk fromuser=sh touser=qcui file='d:tempsh.dmp' constraints=n 经由直接路径导出由EXPORT:V09.02.00创建的导出文件 警告: 此对象由 SH 导出, 而不是当前用户 . . 正在导入表 "CUSTOMERS" 50000行被导入 成功终止导入,但出现警告。 (9) 检查数据存放的表空间。数据存放在QCUI的缺省表空间TS_QCUI中 SQL> select table_name,tablespace_name from dba_tables 2 where owner = 'QCUI'; TABLE_NAME TABLESPACE_NAME ------------------------------ ------------------------------ CUSTOMERS TS_QCUI 关于IMP由拥有DBA权限的用户EXP数据时,数据存放表空间的几种情况(IMP-00013) -2 第二种情况: 目标数据库中没有与导出用户的缺省表空间同名的表空间,这种情况下,并不需要将导入用户的 unlimited tablespace 权限 revoke 掉。 1、从源数据库中导出数据 (1)创建表空间 SQL> create tablespace ts_candy 2 datafile 'D:ORACLEORADATANJGAJHPTts_candy.ora' 3 size 20M autoextend on next 8M maxsize 1024M; Tablespace created (2) 创建用户,缺省表空间是 ts_candy SQL> create user candy identified by candy 2 default tablespace ts_candy; User created SQL> grant dba to candy; Grant succeeded (3) 创建表 SQL> connect candy/candy@njgajhpt SQL> create table candy_tables 2 as 3 select * from all_tables; Table created (4) 导出数据 C:Documents and Settingscuiqing>exp candy/candy@njgajhpt file='d:tempcandy.dmp' direct=y 即将导出指定的表通过直接路径 ... . . 正在导出表 CANDY_TABLES 991 行被导出 在没有警告的情况下成功终止导出。 2、 导入目标数据库 (1) 目标数据库中没有与 ts_candy同名的表空间 SQL> select tablespace_name from dba_tablespaces 2 where tablespace_name = 'TS_CANDY'; TABLESPACE_NAME ------------------------------ (2) 导入数据(导入用户qcui 已授予DBA权限,并且具有 unlimited tablespace权限) SQL> select grantee,privilege from dba_sys_privs 2 where grantee = 'QCUI'; GRANTEE PRIVILEGE ------------------------------ ---------------------------------------- QCUI UNLIMITED TABLESPACE C:Documents and Settingscuiqing>imp qcui/qcui@jwptzjk fromuser=candy touser=qcui file='d:tempcandy.dmp' constraints=n 经由直接路径导出由EXPORT:V09.02.00创建的导出文件 警告: 此对象由 CANDY 导出, 而不是当前用户 已经完成ZHS16GBK字符集和AL16UTF16 NCHAR 字符集中的导入 . . 正在导入表 "CANDY_TABLES" 919行被导入 成功终止导入,但出现警告。 (3) 检查数据存放的表空间。数据存放在QCUI的缺省表空间TS_QCUI中 SQL> select table_name,tablespace_name from dba_tables 2 where owner = 'QCUI'; TABLE_NAME TABLESPACE_NAME ------------------------------ ------------------------------ CUSTOMERS TS_QCUI CANDY_TABLES TS_QCUI 小结:当拿到由拥有DBA权限的用户导出的数据时,最好问清楚其缺省表空间,如果目标数据库中存在与导出数据库同名的表空间时,这种情况需要特别注意。 我们往往在一看到“IMP-00013: 只有 DBA 才能导入由其它 DBA 导出的文件” 这个错误信息后,就立刻给导入用户授予DBA权限,但却忽略了DBA的角色是拥有对数据库中所有表空间unlimit的权限,造成花费很长时间import结束后,却发现没有导入到预期的表空间中。 简而言之,如果有同名表空间存在的话,必须将导入用户的 unlimited tablespace的权限 revoke 掉,否则数据将被直接存放到了那个同名表空间中,而不是导入用户缺省的表空间中;如果没有同名表空间,则无需进行 revoke,oracle 会自动将数据存放在导入用户的缺省表空间中。 最后一个需要注意的问题就是DBA授权问题,个人建议,一个数据库中除了system和sys用户以外,最好严格控制DBA权限的授予,尤其是不要随便赋予应用系统schema的owner以 这个权限。目前国内的软件开发以及项目管理的能力还很薄弱,绝大多数项目中,不会设立专门的数据库管理角色,又为了图方便,往往赋予应用系统schema 的owner以DBA权限,这样一来,在一个几十人或者上百人的团队中,其中任何一个开发人员或是运维人员一个随意的对DB的操作,对DB而言也许将会是灾难性的。因此,当导入数据后,应及时revoke掉 DBA 权限。 ">
| 书签
相关链接
评论/ 意见