Oracle11G R2: 解决exp无法导出空表及expdp/impdp使用教程

5星 · 超过95%的资源 需积分: 37 10 下载量 190 浏览量 更新于2024-09-16 1 收藏 23KB DOCX 举报
"Oracle11G R2的expdp和impdp工具的使用以及解决exp无法导出空表的问题" Oracle 11G R2版本引入了一些新的特性,其中之一是对于空表,系统不再自动分配段(segment),以节省存储空间。然而,这导致了一个问题,即使用传统的exp工具无法导出空表。为了解决这个问题,有以下两种方法: 1. 插入并回滚数据: 在空表中插入一行数据,然后执行`ROLLBACK`操作,这样就会为表分配一个segment。之后使用exp进行导出时,空表就可以被正确导出了。 2. 设置deferred_segment_creation参数: 这个参数默认为TRUE,意味着只有在表有数据时才会分配segment。将其改为FALSE,无论是空表还是非空表,都会立即分配segment。修改参数的SQL语句如下: ```sql ALTER SYSTEM SET deferred_segment_creation=FALSE SCOPE=BOTH; ``` 但请注意,这个设置对已经存在的空表无效,只会影响到之后新创建的表。若需导出之前的空表,仍然需要使用第一种方法。 3. 查找并分配extent: 可以通过查询`USER_TABLES`视图来找出所有空表,并为它们分配extent。查询语句如下: ```sql SELECT 'ALTER TABLE ' || TABLE_NAME || ' ALLOCATE EXTENT;' FROM USER_TABLES WHERE NUM_ROWS = 0; ``` 将查询结果导出并执行,这样空表的segment就会被创建,随后便能正常导出。 自Oracle 10g以来,引入了新的数据泵工具expdp和impdp,它们提供了更强大的数据导出和导入功能。与exp相比,expdp不仅能够处理空表,还支持更多高级选项,例如导出/导入特定表、表空间、用户、甚至整个数据库。以下是expdp的基本使用方法: 创建逻辑目录: ```sql CREATE DIRECTORY db_bak AS 'D:\test\dump'; ``` 确保在操作系统中对应的路径存在,否则可能会导致错误。 查看目录: ```sql SELECT * FROM DBA_DIRECTORIES; ``` 赋予权限: ```sql GRANT READ, WRITE ON DIRECTORY db_bak TO system; ``` 导出数据: 以用户模式导出数据: ```bash expdp system/manager@orcls schemas=system dumpfile=expdp.dmp directory=db_bak ``` 这里,`system`是用户名,`manager`是密码,`orcls`是连接的服务名,`schemas=system`指定导出的模式,`dumpfile=expdp.dmp`是导出的文件名,`directory=db_bak`指定了数据泵输出的目录。 同样,impdp工具用于导入数据,其语法结构与expdp类似,可以根据需要调整参数以满足不同的导入需求。 Oracle 11G R2的expdp和impdp工具提供了一种更灵活、高效的数据迁移方式,而针对空表导出问题的解决方案,可以帮助用户在各种情况下顺利进行数据备份和恢复。