Oracle11G解决空表无法导出问题及expdp/impdp使用
需积分: 50 54 浏览量
更新于2024-09-17
收藏 25KB DOCX 举报
"Oracle数据库的导出导入工具exp和imp在处理空表时的问题及解决方案"
在Oracle数据库中,`exp` 和 `imp` 是传统的数据泵工具,用于数据的导出和导入。在Oracle 11GR2版本中,由于一个新特性,空表在没有数据的情况下可能不会分配segment,导致在使用`exp`工具导出时无法包含这些空表。这个问题可以通过两种主要方法来解决。
首先,一种解决办法是向空表中插入一条数据,然后立即回滚事务。这样做会触发Oracle为表分配segment。操作步骤如下:
1. 使用`INSERT INTO table_name VALUES (some_value);`
2. 然后执行`ROLLBACK;`来撤销刚才的插入操作。
完成这一步后,空表将有segment,从而可以在导出时被包含。
另一种方法是修改系统参数`deferred_segment_creation`。这个参数默认值为`TRUE`,意味着只有在数据插入时才会分配segment。将其设置为`FALSE`,无论表是否为空,都会立即分配segment。执行如下SQL语句:
```sql
ALTER SYSTEM SET deferred_segment_creation=FALSE SCOPE=BOTH;
```
请注意,这个设置只对设置后的新增表生效,对之前的空表无效。若需导出之前的空表,仍需使用上述的第一种方法。
如果你需要找出数据库中的所有空表,可以运行以下SQL查询:
```sql
SELECT 'ALTER TABLE ' || table_name || ' ALLOCATE EXTENT;' FROM user_tables WHERE num_rows = 0;
```
执行查询结果中的语句,为每个空表分配extent,然后就可以用`exp`导出了。
自Oracle 10g起,还引入了增强版的数据泵工具 `expdp` 和 `impdp`。这两个工具提供了更高级的功能,包括处理空表的能力。使用`expdp`导出空表的命令示例如下:
```bash
expdp system/manager@orcls schemas=system dumpfile=expdp.dmp directory=DB_BAK
```
同样,要赋予用户在指定目录上的读写权限:
```sql
GRANT READ, WRITE ON DIRECTORY DB_BAK TO SYSTEM;
```
`expdp` 和 `impdp` 的使用涉及到多个参数,包括指定用户名、口令、连接的数据库实例、要导出的模式或表、导出文件的位置以及目录对象等。这些工具提供了更多的灵活性和控制,是处理Oracle数据导入导出的首选方式。
总结来说,当遇到Oracle 11GR2中空表无法通过`exp`导出的问题时,可以通过插入并回滚数据、调整系统参数或使用`expdp`工具来解决。对于`expdp`和`impdp`,理解其基本用法和参数配置是高效管理数据库数据的关键。
2010-03-04 上传
2009-03-16 上传
2016-01-19 上传
2019-04-20 上传
2011-01-01 上传
2022-09-23 上传
点击了解资源详情
2023-05-26 上传
2023-05-26 上传
skydream_xu
- 粉丝: 15
- 资源: 9
最新资源
- Java集合ArrayList实现字符串管理及效果展示
- 实现2D3D相机拾取射线的关键技术
- LiveLy-公寓管理门户:创新体验与技术实现
- 易语言打造的快捷禁止程序运行小工具
- Microgateway核心:实现配置和插件的主端口转发
- 掌握Java基本操作:增删查改入门代码详解
- Apache Tomcat 7.0.109 Windows版下载指南
- Qt实现文件系统浏览器界面设计与功能开发
- ReactJS新手实验:搭建与运行教程
- 探索生成艺术:几个月创意Processing实验
- Django框架下Cisco IOx平台实战开发案例源码解析
- 在Linux环境下配置Java版VTK开发环境
- 29街网上城市公司网站系统v1.0:企业建站全面解决方案
- WordPress CMB2插件的Suggest字段类型使用教程
- TCP协议实现的Java桌面聊天客户端应用
- ANR-WatchDog: 检测Android应用无响应并报告异常