用exp、imp试试
导出全库
导入:导入之前需创造一个空库(可以和前一个库名不一样)、一个一样的用户
cmd
导出:
我导出的时候文件直接设成.sql,蛮好
导出部分表
打开cmd
导出表,确定监听是否开启,数据库服务是否开启
导入表,确定新数据库服务是否开启
Oracle导出导出有两中方式:第一段:利用exp imp导出导入;第二段:利用Oracel数据泵expdp impdp导出导入.
第一段:利用exp imp导出导入
exp imp 语法如下:
exp:
①.) 将数据库orcl完全导出
imp:
①.) 将备份文件bak.dmp导出数据库
如果数据表中表已经存在,会提示错误,在后面加上ignore=y就可以了.
解决办法:
①.、设置deferred_segment_creation参数为false后,无论是空表,还是非空表,都分配segment.
在sqlplus中,执行如下命令:
SQLalter system set deferred_segment_creation=false;
查看:
SQLshow parameter deferred_segment_creation;
该值设置后,只对后面新增的表起作用,对之前建立的空表不起作用,并且注意要重启数据库让参数生效.
使用 ALLOCATE EXTEN可以为数据库对象分配Extent,语法如下:
alter table table_name allocate extent
构建对空表分配空间的SQL命令:
SQLselect 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0
批量生成要修改的语句.
然后执行这些修改语句,对所有空表分配空间.
此时用exp命令,可将包括空表在内的所有表导出.
第二段:利用expdp impdp导出导入
在Oracle10g中exp imp被重新设计为Oracle Data Pump(保留了原有的 exp imp工具)
数据泵与传统导出导入的区别;
expdp导出数据:
①.、为输出路径建立一个数据库的directory对象.
create or replace directory dumpdir as 'd:\';
可以通过:select * from dba_directories;查看.
grant read,write on directory dumpdir to test_expdp;
expdp test_expdp/test_expdp directory=dumpdir dumpfile=test_expdp_bak.dmp logfile=test_expdp_bak.log schemas=test_expdp
注意:这句话在cmd窗口中运行,并且最后不要加分号,否则会提示错误.因为这句话是操作系统命令而不是SQL.
impdp导入数据:
①.、给将要进行数据导入的用户授权访问.
grant read,write on directory dumpdir to test_impdp;
impdp test_impdp/impdp directory=dumpdir dumpfile=test_expdp_bak.dmp remap_schema=test_expdp:test_impdp
①.、Oracle11g默认对空表不分配segment,故使用exp导出Oracle11g数据库时,空表不会导出.
该值设置后只对后面新增的表产生作用,对之前建立的空表不起作用.
使用ALLOCATE EXTENT可以为数据库对象分配Extent.其语法如下:
-----------
ALLOCATE EXTENT { SIZE integer [K | M] | DATAFILE 'filename' | INSTANCE integer }
可以针对数据表、索引、物化视图等手工分配Extent.
ALLOCATE EXTENT使用样例:
ALLOCATE EXTENT
ALLOCATE EXTENT(SIZE integer [K | M])
ALLOCATE EXTENT(DATAFILE 'filename')
ALLOCATE EXTENT(INSTANCE integer)
ALLOCATE EXTENT(SIZE integer [K | M] DATAFILE 'filename')
ALLOCATE EXTENT(SIZE integer [K | M] INSTANCE integer)
针对数据表操作的完整语法如下:
ALTER TABLE [schema.]table_name ALLOCATE EXTENT [({ SIZE integer [K | M] | DATAFILE 'filename' | INSTANCE integer})]
故,需要构建如下样子简单的SQL命令:
alter table aTabelName allocate extent
查询当前用户下的所有空表(一个用户最好对应一个默认表空间).命令如下:
SQLselect table_name from user_tables where NUM_ROWS=0;
根据上述查询,可以构建针对空表分配空间的命令语句,如下:
SQLSelect 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0
批量输出上述生成的SQL语句,建立C:\createsql.sql,其内容如下:
set heading off;
set echo off;
set feedback off;
set termout on;
spool C:\allocate.sql;
Select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0;
spool off;
执行C:\createsql.sql,命令如下:
SQL@ C:\createsql.sql;
执行完毕后,得到C:\allocate.sql文件.
打开该文件会看到,已经得到对所有空表分配空间的命令SQL语句.
执行C:\allocate.sql,命令如下:
SQL@ C:\allocate.sql;
执行完毕,表已更改.
另外:Oracle11g中,对密码是大小写敏感的,即密码中的字母是区分大小写的.
在Oracle10g中及以前,密码中的字母大小写无所谓.
①. 将数据库TEST完全导出,用户名system 密码manager 导出到D:\daochu.dmp中
上面是常用的导出,对于压缩我不太在意,用winzip把dmp文件可以很好的压缩.
不过在上面命令后面 加上 compress=y 就可以了
设置导出表的rows字段值为n(不导出)就可以了.
命令行执行:
备注:rows默认为y,也就是说默认是导出数据的,如果想同时导出数据,那么不加这个字段就可以了.
以上就是土嘎嘎小编为大家整理的oracle如何导出空库相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!