Oracle中的Exp和Imp在使用中是最多的,它支持从一个表空间导入到另外一个表空间,具体的实现如下:
1、利用操作系统认证连接Oracle数据库
[oracle@localhost ~]$ sqlplus / as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on 星期二 1月 29 17:28:10 2013
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit Production
With the Partitioning, OLAP and Data Mining options
2、创建表空间test1
SQL> create tablespace test1 datafile '/opt/oracle/product/10.2.0/oradata/testdb/test1.dbf' size 50M autoextend on next 2000k;
Tablespace created.
3、创建用户u_test1,创建用户时需注意几点,如用户名或者指定的表空间用双引号时,双引号内的字母必须大写,否则会报异常,同时PASSWORD必须使用双引号
SQL> create user u_test1 identified by "181818"
2 default tablespace test1
3 temporary tablespace temp
4 profile default
5 account unlock
6 quota unlimited on test1;
User created.
3、给用户授予权限,一般情况下给用户权限connect和resource就可以了,with admin option是指该用户被授予的权限可以授权同样的权限给其他用户,同时当revoke收回
权限时,其他用户的权限不会被收回,简言之with admin option是Oracle默认的系统权限,对应的还有一个with grant option,
SQL> grant connect,dba to u_test1 with admin option;
Grant succeeded.
4、收回用户u_test1的权限,unlimited tablespace是指授予用户不限定表空间的权限,意思是该用户可以操作所有的表空间,在赋予dba时就默认赋予了unlimited tablespace的权限
SQL> revoke unlimited tablespace from u_test1;
Revoke succeeded.
5、给用户test1配置不受限制的表空间u_test1
SQL> alter user u_test1 quota unlimited on test1;
User altered.
6、创建表test1,查看表所属用户和表空间
SQL> create table u_test1.test1 (record_no number primary key);
Table created.
SQL> col table_name format a20
SQL> col tablespace_name format a20
SQL> select owner,table_name,tablespace_name from dba_tables where table_name = 'TEST1';
OWNER TABLE_NAME TABLESPACE_NAME
------------------------------ -------------------- --------------------
U_TEST1 TEST1 TEST1
SQL>
7、导出数据
D:\>exp u_test1/181818@testdb file=D:\20130129.dmp tables=test1
Export: Release 10.2.0.1.0 - Production on 星期二 1月 29 17:45:21 2013
Copyright (c) 1982, 2005, Oracle. All rights reserved.
连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit Produc
tion
With the Partitioning, OLAP and Data Mining options
已导出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集
即将导出指定的表通过常规路径...
. . 正在导出表 TEST1导出了 0 行
成功终止导出, 没有出现警告。
8、创建表空间
SQL> create tablespace test2 datafile '/opt/oracle/product/10.2.0/oradata/testdb/test2.dbf' size 20m autoextend on next 2000k;
Tablespace created.
9、创建用户
SQL> create user u_test2 identified by "181818"
2 default tablespace test2
3 temporary tablespace temp
4 profile default
5 account unlock
6 quota unlimited on test2;
User created.
10、授予权限,同时收回unlimited tablespace权限
SQL> grant connect,dba to u_test2 with admin option;
Grant succeeded.
SQL> revoke unlimited tablespace from u_test2;
Revoke succeeded.
11、指定用户u_test2对表空间test2配额不受限,同时对表空间test1配额0m
SQL> alter user u_test2 quota unlimited on test2;
User altered.
SQL> alter user u_test2 quota 0m on test1;
User altered.
12、将用户u_test1的导出的数据导入用户u_test2
D:\>imp u_test2/181818@testdb file=D:\20130129.dmp tables=test1
Import: Release 10.2.0.1.0 - Production on 星期二 1月 29 17:54:08 2013
Copyright (c) 1982, 2005, Oracle. All rights reserved.
连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit Produc
tion
With the Partitioning, OLAP and Data Mining options
经由常规路径由 EXPORT:V10.02.01 创建的导出文件
警告: 这些对象由 U_TEST1 导出, 而不是当前用户
已经完成 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集中的导入
. 正在将 U_TEST1 的对象导入到 U_TEST2
. 正在将 U_TEST1 的对象导入到 U_TEST2
. . 正在导入表 "TEST1"导入了 0 行
成功终止导入, 没有出现警告。
13、查询表test1的所属用户和表空间,发现导入的数据所属表空间为test2,当以上步骤缺少10和11时,则导入的数据所属表空间则会是test1,而不是test2。
SQL> select owner,table_name,tablespace_name from dba_tables where table_name = 'TEST1';
OWNER TABLE_NAME TABLESPACE_NAME
------------------------------ -------------------- --------------------
U_TEST2 TEST1 TEST2
U_TEST1 TEST1 TEST1