You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何使用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 TABLECREATE 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_DATABASEIMP_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
      
  • 导入前请确保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

火山引擎 最新活动