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';