码迷,mamicode.com
首页 > 其他好文 > 详细

imp 导入合并表空间

时间:2019-05-25 22:58:52      阅读:251      评论:0      收藏:0      [点我收藏+]

标签:span   disco   def   ror   info   har   imp   option   and   

因为项目需要从9i 导数据到18C,所以发现如下特性

1.18C imp 导入数据,如果表空间在目标库没有,会将表导入到用户默认表空间
2.18C imp 导入数据,如果表空间在目标库有,但缺少权限。会将表创建到对应表空间,但数据不能导入。
3.18C grant connect,resource to user 后,不需要再revoke unlimited tablespace ,默认就不给该系统权限。而这在11G及以前都是需要回收的。

不知道12C有没有该特性,也不需要关心,以后肯定是19C的天下。

测试案例

1. 创建导出文件

test 用了4个表空间

sqlplus / as sysdba
create tablespace users1;
create tablespace users2;
create tablespace users3;
create tablespace users4;
Create user test identified by test default tablespace users1;
grant connect,resource to test;
conn test/test
create table tu1 tablespace users1 as select * from all_tables;
create table tu2 tablespace users2 as select * from all_tables;
create table tu3 tablespace users3 as select * from all_tables;
create table tu4 tablespace users4 as select * from all_tables;

exp test/test file=test.dmp

技术图片

 

2. 在11G导入

create user test11g identified by test11g default tablespace users1;
grant connect,resource to test11g;
revoke unlimited tablespace from test11g;
alter user test11g quota unlimited on users1;
alter user test11g quota unlimited on users2;

User created.

SQL> 
Grant succeeded.

SQL>

Revoke succeeded.

SQL> 
User altered.

SQL> 
User altered.

SQL> 
SQL> quit
Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
[oracle@oracle ~]$ imp test11g/test11g file=test.dmp log=test11g.log fromuser=test touser=test11g

Import: Release 11.2.0.4.0 - Production on Sat May 25 08:11:54 2019

Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.


Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

Export file created by EXPORT:V11.02.00 via conventional path

Warning: the objects were exported by TEST, not by you

import done in ZHS16GBK character set and AL16UTF16 NCHAR character set
import server uses AL32UTF8 character set (possible charset conversion)
. . importing table "TU1" 103 rows imported
. . importing table "TU2" 104 rows imported
. . importing table "TU3"
IMP-00058: ORACLE error 1950 encountered
ORA-01950: no privileges on tablespace USERS3
. . importing table "TU4"
IMP-00058: ORACLE error 1950 encountered
ORA-01950: no privileges on tablespace USERS4
Import terminated successfully with warnings.

 TU1/TU2 顺利导入

TU3/TU4 因为表空间权限问题导入失败,检查:

SQL> conn test11g/test11g
Connected.
SQL> select TABLE_NAME,TABLESPACE_NAME from user_tables;

TABLE_NAME                     TABLESPACE_NAME
------------------------------ ------------------------------
TU1                            USERS1
TU2                            USERS2
TU3                            USERS3
TU4                            USERS4

SQL> select count(1) from tu1;

  COUNT(1)
----------
       103

SQL> select count(1) from tu2;

  COUNT(1)
----------
       104

SQL> select count(1) from tu3;

  COUNT(1)
----------
         0

SQL> select count(1) from tu4;

  COUNT(1)
----------
         0

虽然对users3/users4 表空间无权限,但其实表还是创建了的,只是数据不能导入。

 

3. 在19C导入

创建表空间和用户

users1/users2,  users3/users4不创建

users1 设为默认表空间,不授权访问users2


sqlplus / as sysdba

alter session set container=pdb;
create tablespace users1 datafile ‘/u01/app/oracle/oradata/ORCL19C/pdb/users101.dbf‘ size 5m;
create tablespace users2 datafile ‘/u01/app/oracle/oradata/ORCL19C/pdb/users102.dbf‘ size 5m;
create user test19c identified by test19c default tablespace users1;
grant connect,resource to test19c;
revoke unlimited tablespace from test19c;
alter user test19c quota unlimited on users1;

[oracle@orcl19C ~]$ sqlplus / as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on Sat May 25 10:13:47 2019
Version 19.3.0.0.0

Copyright (c) 1982, 2019, Oracle.  All rights reserved.


Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0

SQL> alter session set container=pdb;
create tablespace users1 datafile /u01/app/oracle/oradata/ORCL19C/pdb/users101.dbf size 5m;
create tablespace users2 datafile /u01/app/oracle/oradata/ORCL19C/pdb/users102.dbf size 5m;
create user test19c identified by test19c default tablespace users1;
grant connect,resource to test19c;
revoke unlimited tablespace from test19c;

Session altered.

SQL> alter user test19c quota unlimited on users1;

Tablespace created.

SQL> 
Tablespace created.

SQL> 
User created.

SQL> 
Grant succeeded.

SQL> revoke unlimited tablespace from test19c
*
ERROR at line 1:
ORA-01952: system privileges not granted to TEST19C


SQL> 
User altered.

ORA-01952: system privileges not granted to ‘TEST19C‘ 19C没有被授予 UNLIMITED TABLESPACE 系统权限。

导入数据到19C

[oracle@orcl19C ~]$ imp test19c/test19c@ORCL19CPDB file=test.dmp log=test19c.log fromuser=test touser=test19c

Import: Release 19.0.0.0.0 - Production on Sat May 25 10:18:27 2019
Version 19.3.0.0.0

Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.


Connected to: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0

Export file created by EXPORT:V11.02.00 via conventional path

Warning: the objects were exported by TEST, not by you

import done in ZHS16GBK character set and AL16UTF16 NCHAR character set
. . importing table                          "TU1"        103 rows imported
. . importing table                          "TU2"
IMP-00058: ORACLE error 1950 encountered
ORA-01950: no privileges on tablespace USERS2
. . importing table                          "TU3"        105 rows imported
. . importing table                          "TU4"        106 rows imported
Import terminated successfully with warnings.
[oracle@orcl19C ~]$ sqlplus test19c/test19c@ORCL19CPDB

SQL*Plus: Release 19.0.0.0.0 - Production on Sat May 25 10:20:18 2019
Version 19.3.0.0.0

Copyright (c) 1982, 2019, Oracle.  All rights reserved.

Last Successful login time: Sat May 25 2019 10:18:30 -04:00

Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0

SQL> col tablespace_name for a30
SQL> col table_name for a30
SQL> select TABLE_NAME,TABLESPACE_NAME from user_tables;

TABLE_NAME                     TABLESPACE_NAME
------------------------------ ------------------------------
TU1                            USERS1
TU2                            USERS2
TU3                            USERS1
TU4                            USERS1

SQL> select count(1) from TU1 union all
  2  select count(1) from TU2 union all
  3  select count(1) from TU3 union all
  4  select count(1) from TU4 ;

  COUNT(1)
----------
       103
         0
       105
       106

由上可知,在19C中

1. 表空间不存在时,imp 会把数据导入到默认表空间。而在11G或以前表空间不存在,导入会报错,只能导入到与源库相同的表空间名下。

2. 表空间都存在时,且有权限时。数据将导入到与源库相同的表空间

3.部分表空间缺失权限,表会创建在与源库相同的表空间,但因为缺少权限数据不能导入。

 

 

imp 导入合并表空间

标签:span   disco   def   ror   info   har   imp   option   and   

原文地址:https://www.cnblogs.com/plluoye/p/10924281.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!