用户叫做T/T
1、库中没有niptest表空间,默认表空间users;imp情况
2、库中有niptest表空间,默认表空间users ;imp情况
3、库中有niptest空间,回收unlimited tablespace 给予(回收)额外权限 的imp情况
4、库中没有niptest表空间,额外权限和用户默认表空间不是一个表空间的imp情况
①测试:
SQL> select file_name,tablespace_name from dba_data_files;
FILE_NAME TABLESPACE_NAME
--------------------------------------------------------------------------------
E:\APP\ADMINISTRATOR\ORADATA\ORACLE11G\USERS01.DBF USERS
E:\APP\ADMINISTRATOR\ORADATA\ORACLE11G\UNDOTBS01.DBF UNDOTBS1
E:\APP\ADMINISTRATOR\ORADATA\ORACLE11G\SYSAUX01.DBF SYSAUX
E:\APP\ADMINISTRATOR\ORADATA\ORACLE11G\SYSTEM01.DBF SYSTEM
E:\APP\ADMINISTRATOR\ORADATA\ORACLE11G\TEST1.DBF TEST1
SQL>
create user t identified by t;
grant dba to t;
SQL> select username,default_tablespace from dba_users where username='T';
USERNAME DEFAULT_TABLESPACE
------------------------------ ------------------------------
T USERS
SQL>
E:\app\Administrator\product\11.2.0\dbhome_1\BIN>imp t/t file='D:\DB_BAKE\aaaaaa.dmp' full=y
Import: Release 11.2.0.1.0 - Production on 星期四 5月 2 20:26:51 2013
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
连接到: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
经由直接路径由 EXPORT:V10.02.01 创建的导出文件
警告: 这些对象由 NIP 导出, 而不是当前用户
已经完成 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集中的导入
. 正在将 NIP 的对象导入到 T
. 正在将 NIP 的对象导入到 T
. . 正在导入表 "PB_BASIC_CODE"导入了 458 行
成功终止导入, 但出现警告。
SQL> select table_name,tablespace_name from user_tables;
TABLE_NAME TABLESPACE_NAME
------------------------------ ------------------------------
PB_BASIC_CODE USERS
SQL>
②测试:
SQL> create tablespace niptest datafilE 'E:\APP\ADMINISTRATOR\ORADATA\ORACLE11G\niptest001.DBF'size 100M;
表空间已创建。
SQL> select file_name,tablespace_name from dba_data_files;
FILE_NAME TABLESPACE_NAME
--------------------------------------------------------------------------------
E:\APP\ADMINISTRATOR\ORADATA\ORACLE11G\USERS01.DBF USERS
E:\APP\ADMINISTRATOR\ORADATA\ORACLE11G\UNDOTBS01.DBF UNDOTBS1
E:\APP\ADMINISTRATOR\ORADATA\ORACLE11G\SYSAUX01.DBF SYSAUX
E:\APP\ADMINISTRATOR\ORADATA\ORACLE11G\SYSTEM01.DBF SYSTEM
E:\APP\ADMINISTRATOR\ORADATA\ORACLE11G\NIPTEST001.DBF NIPTEST
E:\APP\ADMINISTRATOR\ORADATA\ORACLE11G\TEST1.DBF TEST1
SQL>
SQL> drop table PB_BASIC_CODE purge;
表已删除。
SQL>
E:\app\Administrator\product\11.2.0\dbhome_1\BIN>imp t/t file='D:\DB_BAKE\aaaaaa.dmp' full=y
-------> successful
SQL> select table_name,tablespace_name from user_tables;
TABLE_NAME TABLESPACE_NAME
------------------------------ ------------------------------
PB_BASIC_CODE NIPTEST
SQL>
查看下exp表的表空间
E:\app\Administrator\product\11.2.0\dbhome_1\BIN>imp t/t
Import: Release 11.2.0.1.0 - Production on 星期四 5月 2 20:30:04 2013
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
连接到: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
仅导入数据(yes/no): no >
导入文件: EXPDAT.DMP> D:\DB_BAKE\aaaaaa.dmp
输入插入缓冲区大小 (最小为 8192) 30720>
经由直接路径由EXPORT:V10.02.01 创建的导出文件
警告: 这些对象由 NIP 导出, 而不是当前用户
已经完成 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集中的导入
只列出导入文件的内容(yes/no): no > yes
导入整个导出文件(yes/no): no > yes
. 正在将 NIP 的对象导入到 T
"CREATE TABLE "PB_BASIC_CODE" ("BASIC_ID" NUMBER(10, 0) NOT NULL ENABLE, "BC"
"DLS_CD_NO" VARCHAR2(6), "BASIC_CD_ID" VARCHAR2(10) NOT NULL ENABLE, "BASIC_"
"CD_DES" VARCHAR2(60), "BASIC_CD_STATE" VARCHAR2(1) NOT NULL ENABLE, "BASIC_"
"PRG" VARCHAR2(10)) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 STORAGE(I"
"NITIAL 65536 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE "
""NIPTEST" LOGGING NOCOMPRESS"
" ALTER TABLE "PB_BASIC_CODE" MODIFY ("BASIC_CD_STATE" DEFAULT '0' )"
. . 正在跳过表 "PB_BASIC_CODE"
。。。。。。。。。。。。
成功终止导入, 没有出现警告。
E:\app\Administrator\product\11.2.0\dbhome_1\BIN>
③测试:
SQL> revoke UNLIMITED TABLESPACE from T;
撤销成功。
SQL> alter user T quota unlimited on users;(就算指定了users表空间限制,由于库中有niptest表空间。不给权限没法写入 也不会导入到其他表空间中)
用户已更改。
SQL> alter user T quota unlimited on niptest;
用户已更改。
SQL> select table_name,tablespace_name from user_tables;
TABLE_NAME TABLESPACE_NAME
------------------------------ ------------------------------
PB_BASIC_CODE NIPTEST
SQL>
SQL> alter user T quota 0 on NIPTEST;(回收权限再次测试 库中有niptest 没有权限无法访问)
用户已更改。
SQL> drop table PB_BASIC_CODE purge;
表已删除。
E:\app\Administrator\product\11.2.0\dbhome_1\BIN>imp t/t file='D:\DB_BAKE\aaaaaa.dmp' full=y
Import: Release 11.2.0.1.0 - Production on 星期四 5月 2 20:52:40 2013
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
连接到: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
经由直接路径由EXPORT:V10.02.01 创建的导出文件
警告: 这些对象由 NIP 导出, 而不是当前用户
已经完成 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集中的导入
. 正在将 NIP 的对象导入到 T
. 正在将 NIP 的对象导入到 T
. . 正在导入表 "PB_BASIC_CODE"
IMP-00058: 遇到 ORACLE 错误 1536
ORA-01536: 超出表空间 'NIPTEST' 的空间限额
IMP-00017: 由于 ORACLE 错误 942, 以下语句失败:
"ALTER TABLE "PB_BASIC_CODE" ADD CONSTRAINT "FK_PB_BASIC_FK_BS_CD__PB_BASIC""
" FOREIGN KEY ("BCDLS_CD_NO") REFERENCES "PB_BASIC_CODE_LIST" ("BCDLS_CD_NO""
") ENABLE NOVALIDATE"
IMP-00003: 遇到 ORACLE 错误 942
ORA-00942: 表或视图不存在
即将启用约束条件...
IMP-00017: 由于 ORACLE 错误 2430, 以下语句失败:
"ALTER TABLE "PB_BASIC_CODE" ENABLE CONSTRAINT "FK_PB_BASIC_FK_BS_CD__PB_BAS"
"IC""
成功终止导入, 但出现警告。
-------------------------------------------
把exp表的源表空间删除,指定默认表空间
SQL> drop tablespace niptest including contents and datafiles;
表空间已删除。
SQL>
SQL> select file_name,tablespace_name from dba_data_files;
FILE_NAME TABLESPACE_NAME
--------------------------------------------------------------------------------
E:\APP\ADMINISTRATOR\ORADATA\ORACLE11G\USERS01.DBF USERS
E:\APP\ADMINISTRATOR\ORADATA\ORACLE11G\UNDOTBS01.DBF UNDOTBS1
E:\APP\ADMINISTRATOR\ORADATA\ORACLE11G\SYSAUX01.DBF SYSAUX
E:\APP\ADMINISTRATOR\ORADATA\ORACLE11G\SYSTEM01.DBF SYSTEM
E:\APP\ADMINISTRATOR\ORADATA\ORACLE11G\TEST1.DBF TEST1
SQL>
再回收 UNLIMITED TABLESPACE 默认表空间和quota都指定的也是users时候导入表 表空间是’默认表空间‘和’quota(额外权限)‘指定的表空间
如果默认表空间和quota(额外权限)的表空间不是指定的一个,则导入的只是表结构 将导入到默认表空间指定的表空间中
E:\app\Administrator\product\11.2.0\dbhome_1\BIN>imp t/t file='D:\DB_BAKE\aaaaaa.dmp' full=y
-------> successful
④测试:
SQL> select table_name,tablespace_name from user_tables;
TABLE_NAME TABLESPACE_NAME
------------------------------ ------------------------------
PB_BASIC_CODE USERS
SQL> select * from user_role_privs;
USERNAME GRANTED_ROLE ADM DEF OS_
------------------------------ ------------------------------ --- --- ---
T DBA YES YES NO
SQL> select username,default_tablespace from dba_users where username='T';
USERNAME DEFAULT_TABLESPACE
------------------------------ ------------------------------
T TEST1
SQL> SELECT tablespace_name FROM user_TS_QUOTAS;
TABLESPACE_NAME
------------------------------
USERS
E:\app\Administrator\product\11.2.0\dbhome_1\BIN>imp t/t file='D:\DB_BAKE\aaaaaa.dmp' full=y
-------> fail
IMP-00058: 遇到 ORACLE 错误 1950
ORA-01950: 对表空间 'TEST1' 无权限
IMP-00017: 由于 ORACLE 错误 942, 以下语句失败:
SQL> select table_name,tablespace_name from user_tables;
TABLE_NAME TABLESPACE_NAME
------------------------------ ------------------------------
PB_BASIC_CODE TEST1 ----> 只有表结构
SQL>
如用户默认表空间是USERS,exp源默认表空间是niptest ,库中没有niptest的话会导入到users表空间,有niptest表空间的话则会导入到niptest表空间
回收unlimited tablespace 给予额外权限niptest表空间权限会正常导入,否则报错
额外权限和用户默认表空间是一个的话可以正常导入,否则知道表结构到用户默认表空间
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28602568/viewspace-760169/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/28602568/viewspace-760169/