如何使用SQL Developer导出/导入Oracle数据库转储?Schema A导入Schema B遇权限问题
当然可以用exp/imp完成schema迁移,更推荐用Data Pump工具!
你遇到SQL Developer DBA工具的权限问题,完全可以通过传统的exp/imp命令,或者更高效的Oracle Data Pump(expdp/impdp)来实现从schema A到B的迁移。下面分两种方案详细说明:
一、传统exp/imp命令方案
这是Oracle早期的导出导入工具,兼容性好,适合低版本数据库:
1. 导出schema A
在终端执行导出命令,需要确保执行用户(这里用A用户)有导出自身schema的权限(默认用户自己具备),如果要导出更多对象则需要EXP_FULL_DATABASE角色:
exp A/your_password@your_database file=schema_a_dump.dmp owner=A
file:指定导出的dump文件路径和名称owner:指定要导出的schema
2. 导入到schema B
同样在终端执行导入命令,执行用户(这里用B用户)需要有创建对象的权限(比如CREATE TABLE、CREATE INDEX),如果涉及跨schema权限或特殊对象,需要IMP_FULL_DATABASE角色:
imp B/your_password@your_database file=schema_a_dump.dmp fromuser=A touser=B
fromuser:原schema名称touser:目标schema名称
二、更推荐:Oracle Data Pump(expdp/impdp)
这是Oracle 10g及以上版本的官方推荐工具,效率更高、功能更全面(比如支持并行导出、增量导出等):
1. 准备工作(需要DBA权限协助,或让DBA操作)
首先要创建数据库能访问的导出目录,并给A、B用户授予读写权限:
-- 创建导出目录(路径需是数据库服务器可访问的文件夹) CREATE DIRECTORY dump_directory AS '/opt/oracle/dumps'; -- 给A、B用户授予目录读写权限 GRANT READ, WRITE ON DIRECTORY dump_directory TO A; GRANT READ, WRITE ON DIRECTORY dump_directory TO B;
2. 导出schema A
执行导出命令,A用户需要EXP_FULL_DATABASE角色或基础导出权限:
expdp A/your_password@your_database directory=dump_directory dumpfile=schema_a_dp.dmp schemas=A
3. 导入到schema B
执行导入命令,用remap_schema直接映射原schema到目标schema,B用户需要IMP_FULL_DATABASE角色或创建对象的权限:
impdp B/your_password@your_database directory=dump_directory dumpfile=schema_a_dp.dmp remap_schema=A:B
权限问题注意事项
- 如果之前SQL Developer DBA工具因为权限失败,那么在使用命令行工具时,确保执行用户有足够权限:
- 普通用户执行的话,需要DBA授予
EXP_FULL_DATABASE和IMP_FULL_DATABASE角色; - 也可以让DBA用
sys或其他高权限用户帮你执行导出导入操作,比如:expdp sys/your_sys_password@your_database directory=dump_directory dumpfile=schema_a_dp.dmp schemas=A impdp sys/your_sys_password@your_database directory=dump_directory dumpfile=schema_a_dp.dmp remap_schema=A:B
- 普通用户执行的话,需要DBA授予
- 导入前请确保schema B已经存在,若不存在可提前创建:
CREATE USER B IDENTIFIED BY your_password DEFAULT TABLESPACE users QUOTA UNLIMITED ON users; GRANT CONNECT, RESOURCE TO B;
内容的提问来源于stack exchange,提问作者Himanshu Tiwari




