Oracle11G解决空表导出问题及expdp/impdp使用指南
5星 · 超过95%的资源 需积分: 50 172 浏览量
更新于2024-09-15
1
收藏 25KB DOCX 举报
"Oracle11G导入导出(imp和exp)少表解决方法"
在Oracle 11G中,用户可能遇到一个特定的问题,即使用传统的`exp`工具进行数据库导出时,空表无法被正确导出。这是因为11GR2版本引入了一个新特性,当表中没有数据时,系统不会立即分配segment,以此来节省存储空间。这导致了在尝试导出空表时,这些表不会包含在导出文件中。
为了解决这个问题,有两个主要的解决方案:
1. 插入并回滚数据
在空表中插入一条数据,然后执行`ROLLBACK`操作,这样就会为表创建一个segment。尽管数据会被立即撤销,但segment的创建使得表现在可以被`exp`工具识别并导出。这个方法适用于所有空表,无论何时创建。
2. 设置deferred_segment_creation参数
Oracle 11G允许修改`deferred_segment_creation`参数,将它的值从默认的TRUE改为FALSE。这样,无论是空表还是非空表,在创建时都会立即分配segment。要改变这个参数,你可以运行如下SQL语句:
```sql
ALTER SYSTEM SET deferred_segment_creation=FALSE SCOPE=both;
```
需要注意的是,这个设置只对之后新建的表生效,对已经存在的空表不起作用。如果你需要导出之前的空表,仍然需要使用上述的第一种方法。
此外,Oracle 10g之后引入了增强的导出导入工具`expdp`和`impdp`,这两个工具可以更好地处理空表的导出问题。使用`expdp`和`impdp`,即使表中没有数据,也能成功导出。
为了使用`expdp`和`impdp`,首先需要创建逻辑目录,这个目录不会在操作系统层面创建实际的目录,而是作为数据库内的一个对象。例如:
```sql
CREATE DIRECTORY db_bak AS 'd:\test\dump';
```
然后,你可以查看系统中的目录列表,确认权限设置是否正确:
```sql
SELECT * FROM DBA_DIRECTORIES;
```
接着,你需要给用户分配在指定目录上的读写权限,通常是管理员用户,如`SYSTEM`:
```sql
GRANT READ, WRITE ON DIRECTORY db_bak TO system;
```
最后,可以使用`expdp`工具导出数据,例如按用户导出:
```bash
expdp system/manager@orcls schemas=system dumpfile=expdp.dmp directory=db_bak
```
同样,`impdp`用于导入数据,其语法类似,可以根据具体需求进行调整。
当使用Oracle 11G的`exp`工具遇到空表导出问题时,可以尝试通过插入并回滚数据或调整系统参数来解决。同时,推荐使用`expdp`和`impdp`工具,它们提供了更强大的功能,并且能够处理空表的导出和导入。
293 浏览量
169 浏览量
173 浏览量
216 浏览量
1731 浏览量
273 浏览量
370 浏览量
2063 浏览量
1398 浏览量
程序员胖胖苏
- 粉丝: 5
- 资源: 15