数据迁移之带有序列的表(exp,expdp,imp,impdp)

1.用这种方式创建的新表是没有索引跟触发器的。

create table TABLESPACETEST_01 as select * from TABLESPACETEST;

用这种方式创建的新表是没有索引跟触发器的。

2.采用备份的方式

exp等命令应该在cmd的dos命令提⽰符下执⾏,⽽不是在sqlplus⾥⾯(SP2-0734)。

2.1 exp(用户SYSTEM)

---导出单表TABLESPACETEST

exp system/sys@127.0.0.1:1521/orcl file=H:\exp\exp.dmp tables=(TABLESPACETEST)

 

补充其他备份范围语句:

2.2 imp(用户SYS)

 imp scott/sys@127.0.0.1:1521/orcl file=H:\exp\exp.dmp tables=(TABLESPACETEST)

结果:

 解决方式:给需要导入的用户赋予权限grant dba to SCOTT;

 赋予完权限后,查询如下权限语句发现用户多出来DBA标志一行。

 select * from dba_role_privs where grantee='SCOTT';

重新执行导入语句:

 imp scott/sys@127.0.0.1:1521/orcl file=H:\exp\exp.dmp tables=(TABLESPACETEST)

成功。在用户SCOTT下完整的表结构,数据,索引,触发器标志都在。

2.3 expdp

2.3.1 使用dba用户登录数据库

sqlplus / as sysdba

2.3.2  查询是否有已存在的备份目录,如果有可以直接用,如果没有需要新建一个备份目录

select *from dba_directories;

结果: 

 目录已有,附创建语句:create  directory dump_dir as 'H:\exp'

---dump_dir创建完成默认大写

2.3.3退出当前用户  exit; 

2.3.4 导出(我使用的是第三种)

---第一种:“full=y”,全量导出数据库:
expdp system/sys@127.0.0.1:1521/orcl directory=DUMP_DIR dumpfile=expdp.dmp logfile=expdp.log;

--第二种:schemas按用户导出:
expdp system/sys@127.0.0.1:1521/orcl schemas=system dumpfile=expdp.dmp directory=DUMP_DIR logfile=expdp.log;

导出SCOTT用户下的TABLESPACETEST表
expdp system/sys@127.0.0.1:1521/orcl directory=DUMP_DIR dumpfile=expdp.dmp tables=TABLESPACETEST

第三种:按表空间导出:
expdp system/sys@127.0.0.1:1521/orcl tablespace=tbs1,tbs2 dumpfile=expdp.dmp directory=DUMP_DIR logfile=expdp.log;

第四种:按查询条件导:
expdp system/sys@127.0.0.1:1521/orcl tables=TABLESPACETEST='where contract_no=1' dumpfile=expdp.dmp directory=DUMP_DIR logfile=expdp.log;

 

2.4 IMPDP 

impdp scott/sys remap_tablespace=system:USERS remap_schema=system:scott directory=DUMP_DIR dumpfile=expdp.DMP logfile=impdp.log;

impdp时报错,日志如下:

ORA-39082: Object type ALTER_PROCEDURE:"TEST"."TEST" created with compilation warnings

分析其原因:因为存储过程TEST里面有中文,编译时出错;

但是不影响数据的导入,索引,以及触发器

2.5 新增表数据

 发现序列没有带过来。

2.6 进行全用户备份还原 

--用户SYSTEM全量导出
expdp system/sys@127.0.0.1:1521/orcl schemas=system dumpfile=expdpq.dmp directory=DUMP_DIR logfile=expdpq.log;

--用户SCOTT全量导入
impdp scott/sys remap_tablespace=system:USERS remap_schema=system:scott directory=DUMP_DIR dumpfile=expdpq.DMP logfile=impdpq.log

 全量备份还原后就可以进行新增数据了,新增的第一条数据的CONTRACT_NO是LAST_NUMBER的值。

 

select LAST_NUMBER from USER_SEQUENCES where SEQUENCE_NAME='SEQ_TABLESPACETEST_CON';

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值