exp和imp导入导出时表空间问题【未完】

摘要:
回滚端的问题主要发生在提交选项中。在数据量较大的exp和imp中,commit=y可以避免回滚段增益。

准备工作

第一步: 创建教师和学生用户

  • 教师用户/密码  TEACHER/t123456
  • 学生用户/密码  STUDENT/s123456

参考链接 http://www.cnblogs.com/whatlonelytear/articles/5009464.html#createUser 

第二步: 创建教师表空间和学生表空间

http://www.cnblogs.com/whatlonelytear/articles/5009464.html#createTablespace

  • 参考以上链接,创建教师表空间TBS_TEACHER和学生表空间TBS_STUDENT ,

第三步: 以指定用户创建教师表和学生表

  • 以学生用户登录创建学生表(不用)
  • 以老师用户登录创建老师表1(teacher1)和教师表2(teacher2)

  学生表样例sql

exp和imp导入导出时表空间问题【未完】第1张exp和imp导入导出时表空间问题【未完】第2张
--建学生表
create table STUDENT
(
  id   INTEGER not null,
  name VARCHAR2(100),
  age  INTEGER
);

CREATE INDEX IDX_STU_NAME ON STUDENT(NAME);--添加索引
ALTER TABLE STUDENT ADD CONSTRAINT CST_ID PRIMARY KEY(ID);--添加主键
COMMENT ON COLUMN STUDENT.NAME IS '姓名';--添加注释

INSERT INTO STUDENT (ID, NAME, AGE) VALUES (1, 'aaa', 10);
INSERT INTO STUDENT (ID, NAME, AGE) VALUES (2, 'bbb', 12);
INSERT INTO STUDENT (ID, NAME, AGE) VALUES (3, 'ccc', 11);
COMMIT;
View Code

 第三步: 给学生和教师指定默认表空间

-- 修改用户表空间
ALTER USER student DEFAULT TABLESPACE TBS_STUDENT;
ALTER USER teacher DEFAULT TABLESPACE TBS_TEACHER;
-- 回收unlimited tablespace无限表空间权限,不让student使用之前的user表空间其它空间
 revoke unlimited tablespace from student;
-- 将student用户在 TBS_TEACHER 表空间的配额置为 0
  alter user student quota 0 on TBS_TEACHER;
-- 设置student用户在 TBS_STUDENT 表空间配额不受限
 alter user student quota unlimited on TBS_STUDENT;
-- 查看用户表空间配额,MAX_BYTES为0代表用户对表空间无使用权,为-1代表可以无限使用
SELECT * FROM USER_TS_QUOTAS;

我的导出导入语句

我的目标 : 把TEACHER用户下的teacher1表导从TBS_TEACHER表空间导入到STUDENT用户下的TBS_STUDENT表空间下.

参数说明如下:

  1. ROWS=N 表示只导表结构,不导表数据 (导出数据行数,N代表0行)
  2. TABLES=表示导哪些表,和FULL不可共存
  3. IGNORE=y 表示忽略创建错误,继续后面的操作
  4. FILE=xxx.dmp 表示要导入导出的dmp文件位置
  5. LOG=xxx.log 表示导入导出时的日志
  6. BUFFER=1024000 表示数据行的缓冲区大小,单位Byte默认值根据系统而定,1024000是一个比较好的值,这也是别人的经验。回滚端的问题主要出现在commit选项,大数据量的exp和 imp中commit=y可以避免回滚段益出。
  7. FULL=y 表示全库导出: 导出除ORDSYS,MDSYS,CTXSYS,ORDPLUGINS,LBACSYS 这些系统用户之外的所有用户的数据.
-------导出,导出teacher1,teacher2表----------
exp "TEACHER/t123456@1.2.3.4:1521/orcl" ROWS=N BUFFER=1024000 tables=teacher1,teacher2 file=/data/oradata/dmp/backup.dmp LOG=/DATA/logs/exp.log  
-------导入,只导入teacher1表----------
imp "STUDENT/s123456@1.2.3.4:1521/orcl" ROWS=N tables=teacher1 BUFFER=1024000 IGNORE=y  file=/data/oradata/dmp/backup.dmp  log=/data/logs/imp.log IGNORE=y fromuser=TEACHER touser=STUDENT 

然而导入到student用户下的teacher1表的表空间还是TBS_TEACHER, 上面的语句是不可能实现表空间的TEACHER表迁移的,原因参考下一小节.

  • 使用UltraEdit CTRL+H来批量修改表空间------what a ball shit
  • 指定fromuser touser shit 方法: 不启作用------what a ball shit

如果我们有dba权限,那这个时候最好使用expdp和impdp服务端程序,它可以满足要求.

imp和dmp导入导出用户表空间touser问题 #重点#

同一个dmp文件在导入生产库的时候导入的表空间是 a_tbs (目标a用户的默认表空间),在导入测试环境的时候导入的表空间是 users .
使用的导入脚本也是完全相同的,所以这里就涉及了imp的导入机制

经过测试发现:
imp在使用touser进行制定用户导入的时候,导入哪个表空间不是由目标用户决定,
而是由导出用户fromuser决定的。

比如:
文件是由 s 用户导出,对应的表空间是 users ,   导入到用户 a, 对应的表空间是 a_tbs

导入的时候如果目标环境有users表空间,就算使用了touser参数,也会导入到users表空间下,而如果目标环境没有users表空间,就会导入touser用户的默认表空间了。

主要参考链接: imp使用touser导入表空间问题

其它参考: 何种情况下imp的fromuser/touser改变tablespace失效

表空间其它相关辅助语句

-- 查看表空间的名称及大小 
SELECT T.TABLESPACE_NAME, ROUND(SUM(BYTES / (1024 * 1024)), 0) TS_SIZE
  FROM DBA_TABLESPACES T, DBA_DATA_FILES D
 WHERE T.TABLESPACE_NAME = D.TABLESPACE_NAME
 GROUP BY T.TABLESPACE_NAME;
-- 查看表空间物理文件的名称及大小 
SELECT TABLESPACE_NAME,
       FILE_ID,
       FILE_NAME,
       ROUND(BYTES / (1024 * 1024), 0) TOTAL_SPACE
  FROM DBA_DATA_FILES
 ORDER BY TABLESPACE_NAME;
 
-- 查看有哪些用户
SELECT USERNAME FROM DBA_USERS;
-- 查看用户有哪些角色权限
SELECT * FROM DBA_ROLE_PRIVS WHERE GRANTED_ROLE = 'student';
-- 查看用户有哪些系统权限
SELECT * FROM DBA_SYS_PRIVS WHERE grantee = 'student' ;
-- 查看当前用户下的表
SELECT * FROM USER_TABLES;

查看当前表空间

SELECT TBS 表空间名,
       SUM(TOTALM) 总共大小M,
       SUM(USEDM) 已使用空间M,
       SUM(REMAINEDM) 剩余空间M,
       SUM(USEDM) / SUM(TOTALM) * 100 已使用百分比,
       SUM(REMAINEDM) / SUM(TOTALM) * 100 剩余百分比
  FROM (SELECT B.FILE_ID ID,
               B.TABLESPACE_NAME TBS,
               B.FILE_NAME NAME,
               B.BYTES / 1024 / 1024 TOTALM,
               (B.BYTES - SUM(NVL(A.BYTES, 0))) / 1024 / 1024 USEDM,
               SUM(NVL(A.BYTES, 0) / 1024 / 1024) REMAINEDM,
               SUM(NVL(A.BYTES, 0) / (B.BYTES) * 100),
               (100 - (SUM(NVL(A.BYTES, 0)) / (B.BYTES) * 100))
          FROM DBA_FREE_SPACE A, DBA_DATA_FILES B
         WHERE A.FILE_ID = B.FILE_ID
         GROUP BY B.TABLESPACE_NAME, B.FILE_NAME, B.FILE_ID, B.BYTES
         ORDER BY B.TABLESPACE_NAME)
 GROUP BY TBS;

参考链接

Oracle创建表空间、创建用户,给用户分配表空间以及可操作权限

Oracle数据库导入导出命令总结 

免责声明:文章转载自《exp和imp导入导出时表空间问题【未完】》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇OpenCASCADE 参数曲面面积UI设计教程-界面设计构图下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

orcl透明数据库加密(TDE)加密表空间

TDE加密介绍 透明数据加密包括列加密和表空间加密,它是oracle高级安全组件的一部分;oracle11g企业版默认安装时会安装上oracle高级安全组件,oracle声称这是一个单独另外收费的组件,作为商业用途使用如果没有付费意味着侵权。 oracle增强表空间加密特性,数据库的兼容性参数必须被设置为11.2或更高。 oracle的列加密是从10gR2...

DB2 错误码解析

DB2 错误代码大全——SQLSTATE 消息   SQLSTATE 消息本节列示 SQLSTATE 及其含义。SQLSTATE 是按类代码进行分组的;对于子代码,请参阅相应的表。 表 2. SQLSTATE 类代码 类 代码   含义 要获得子代码, 参阅... 00 完全成功完成 表 3 01 警告 表 4 02 无数据 表 5 07 动态 SQL ...

pg vacuum的弊与利 之弊

即便是从数据库特性,SQL功能性等方面,PostgreSQL都是一个更接近Oracle,在这方面远胜于MySQL的数据库,但是这个来源是学校的教学数据库的开源数据库,在很多地方,设计实现上的考虑,从我目前来看,是不完备的,其中的典型代表,就是vacuum机制. 如果是一直搞别的数据库的人,无论是MySQL还是Oracle的DBA,看PostgreSQL总感...

ORACLE-dmp文件导出导入,了解一下?

ORACLE导出dmp文件: 1,将数据库ORACLE完全导出, 导出到c:daochu.dmp中exp user/password@ORACLE file=c:xxx.dmp full=y或 exp user/password@127.0.0.1:1521/orcl file=E:xxx.dmp 2,将数据库中RFD用户与,JYZGCX用户的表导出exp...

学习笔记:oracle学习一:oracle11g体系结构之物理存储结构

目录 1、物理存储结构 1.1 数据文件 1.2 控制文件 1.3 日志文件 1.3.1 重做日志文件 1.3.2 归档日志文件 1.4 服务器参数文件 1.4.1 查看服务器参数 1.4.2 修改服务器参数 1.5 密码文件、警告文件和跟踪文件 1.5.1 密码文件 1.5.2 警告文件 1.5.3 跟踪文件 本系列是作为学习...

db2性能优化

性能优化概述 DB2 的性能优化可以从三个方面分析:内存,CPU 和 I/O 。DB2 性能优化是一件较为复杂的综合性的工作 , 需要对问题的根源作全方位的探索和思考。同时也需要较深厚的数据库管理经验与优化知识。这对于初学者来说可能有些勉为其难。但是在很多情况下,随着 DB2 数据库中的数据量的不断增长或者用户数的激增,数据库系统的性能会显著下降,而此时快...