oracle怎么导出空库,Oracle 数据库 Only 导出空表的方法

1. 之前因为oracle11.2.0.1 的bug(deferred_segment_creation) 引起无法将空表导出.

有时给同事解释上半个小时他们也不知道 如何处理 或者是 他们不会用expdp 也不想用 allocate extent 的方式来搞.

没办法 只能通过 备份空表进行导入的方式进行处理.

2. 第一个想到的办法是 通过 exp tables=(select table_name from user_tables) 的方式来处理 发现有问题 提示不支持where子句 (坑爹)

3. 然后将 num_rows=0 的表进行导出  结果发现 cmd直接输入命令超长..

4. 没办法 使用如下办法进行处理

4.1 查找所有的空表 转换成行处理

select wm_concat(table_name) from user_tables where num_rows=

结果如下图示:

816d6af4eff49d7966875cb27c74bf06.png

4.2 写一个批处理

c230602e3ea6db2ab0dff68617da4ca9.png

然后 将buffer 改大一下:

7c15d0ce92a9fbdfb9f84d56431ff20d.png

执行批处理直接进行导出

f195fb3bf1b302b65257e951583a912a.png

4.3 其实建议是在目标库 先恢复空表 再恢复非空表 因为有很多视图和触发器的创建需要用到空表

f796a37d396094e984ac098634ab0380.png

5. 这种方式不太建议 容易出现异常 除非是跟实施人员说好能够将两种备份文件都导出来 才可以用. 不然 还是无法使用

最终建议:

1. 早日升级11.2.0.4

2. 尽量使用expdp的方式备份 速度快 bug还少.  可以增加compress=y 的参数 直接压缩备份文件  备份恢复文件占用空间少, 占用网络传输时间也少. .

Oracle 数据库 导入导出空表解决办法!

expdp导出:(打开CMD) 先创建(任意盘符):\oracle_data 文件夹 1.sqlplus / as sysdba;2.create or replace directory d_nam ...

oracle数据库无法导出空表的问题解决(开始于oracle11g)

--设置系统参数 alter system set deferred_segment_creation=false; Select 'alter table '||table_name||' allo ...

[转载]oracle 11g不能导出空表的多种解决方法

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Oracle导出表结构可以使用数据字典视图和expdp命令实现。 1. 使用数据字典视图导出表结构 可以使用Oracle的数据字典视图来导出表结构,例如: ``` SELECT dbms_metadata.get_ddl('TABLE', '表名') FROM dual; ``` 其中,'表名'是要导出结构的表的名称。此命令将返回一个包含表结构的DDL语句。 2. 使用expdp命令导出表结构 也可以使用Oracle的expdp命令来导出表结构。例如: ``` expdp 用户名/密码 directory=目录名 dumpfile=导出文件名.dmp logfile=日志文件名.log content=metadata_only tables=表名 ``` 其中,'用户名'和'密码'是要导出结构的表所属的用户的凭据,'目录名'是导出文件和日志文件所在的目录,'导出文件名.dmp'是导出文件的名称,'日志文件名.log'是日志文件的名称,'表名'是要导出结构的表的名称。 要同时导出多个表的结构,可以在'tables'参数中使用逗号分隔表名。 Oracle导出存储过程可以使用PL/SQL Developer等工具,或者使用数据字典视图和expdp命令。 1. 使用PL/SQL Developer等工具导出存储过程 可以使用PL/SQL Developer等工具来导出存储过程。例如,在PL/SQL Developer中,可以按照以下步骤操作: - 打开PL/SQL Developer并连接到数据库。 - 在"对象浏览器"中选择要导出的存储过程。 - 右键单击所选存储过程并选择"导出"。 - 在"导出对象"对话框中选择要导出的对象类型和文件格式,并指定导出文件的路径和名称。 - 单击"确定"以开始导出过程。 2. 使用数据字典视图导出存储过程 可以使用Oracle的数据字典视图来导出存储过程。例如: ``` SELECT dbms_metadata.get_ddl('PROCEDURE', '存储过程名') FROM dual; ``` 其中,'存储过程名'是要导出的存储过程的名称。此命令将返回一个包含存储过程定义的DDL语句。 3. 使用expdp命令导出存储过程 也可以使用Oracle的expdp命令来导出存储过程。例如: ``` expdp 用户名/密码 directory=目录名 dumpfile=导出文件名.dmp logfile=日志文件名.log content=metadata_only procedures=存储过程名 ``` 其中,'用户名'和'密码'是要导出存储过程所属的用户的凭据,'目录名'是导出文件和日志文件所在的目录,'导出文件名.dmp'是导出文件的名称,'日志文件名.log'是日志文件的名称,'存储过程名'是要导出的存储过程的名称。 要同时导出多个存储过程,可以在'procedures'参数中使用逗号分隔存储过程名。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值