如何将JSON集合从一个Oracle自治数据库迁移至另一个?
复制Oracle自治数据库(ATP/AJD)中JSON集合到另一个实例的方法
下面是几种适配Oracle自治数据库场景的JSON集合迁移方案,可根据数据量、同步需求选择:
1. Oracle Data Pump(数据泵)批量迁移
适合大规模JSON集合的全量迁移,是自治数据库中最常用的批量数据转移方式。
- 导出源库JSON数据:先创建云存储凭证,再导出包含JSON列的表(或指定JSON列):
-- 创建云存储凭证(适配OCI对象存储或其他兼容存储) BEGIN DBMS_CLOUD.CREATE_CREDENTIAL( credential_name => 'OBJ_STORE_CRED', username => 'your_cloud_storage_user', password => 'your_cloud_storage_access_key' ); END; / -- 导出JSON表到云存储 BEGIN DBMS_CLOUD.EXPORT_DATA( credential_name => 'OBJ_STORE_CRED', file_uri_list => 'https://your-bucket-path/export_json_collection.dmp', query => 'SELECT * FROM your_json_table', -- 替换为你的JSON表名 format => '{"type":"datapump"}' ); END; / - 导入到目标库:在目标ATP/AJD实例中,使用相同凭证导入数据:
-- 先确保目标库已创建相同结构的JSON表(或让Data Pump自动创建) BEGIN DBMS_CLOUD.IMPORT_DATA( credential_name => 'OBJ_STORE_CRED', file_uri_list => 'https://your-bucket-path/export_json_collection.dmp', table_name => 'target_json_table', -- 替换为目标表名 format => '{"type":"datapump"}' ); END; / - 注意:如果使用了自定义JSON集合类型,需先在目标库创建相同类型,避免导入报错。
2. DBMS_CLOUD跨库直接复制
当两个自治数据库处于同一OCI环境时,可通过数据库链接直接跨库复制,无需中间存储:
- 创建源库数据库链接:在目标库中配置指向源ATP/AJD的链接:
-- 先创建源库的访问凭证 BEGIN DBMS_CLOUD.CREATE_CREDENTIAL( credential_name => 'SOURCE_DB_CRED', username => 'source_db_user', password => 'source_db_password' ); END; / -- 创建数据库链接 BEGIN DBMS_CLOUD.CREATE_DATABASE_LINK( db_link_name => 'SOURCE_ATP_LINK', hostname => 'source-atp-endpoint.adb.region.oraclecloud.com', -- 源库FQDN port => '1522', service_name => 'source_atp_service.adb.oraclecloud.com', -- 源库服务名 credential_name => 'SOURCE_DB_CRED' ); END; / - 直接复制数据:用INSERT或DBMS_CLOUD.COPY_DATA批量迁移:
-- 简单INSERT(适合小数据量) INSERT INTO target_json_table SELECT * FROM your_json_table@SOURCE_ATP_LINK; -- 批量复制(适合大数据量) BEGIN DBMS_CLOUD.COPY_DATA( table_name => 'TARGET_JSON_TABLE', credential_name => 'SOURCE_DB_CRED', file_uri_list => 'dblink://SOURCE_ATP_LINK/your_json_table', format => '{"ignoremissingcolumns":true}' ); END; /
3. JSON文件格式导出导入
适合小批量JSON数据,直接导出为纯JSON文件后导入:
- 导出为JSON文件:
BEGIN DBMS_CLOUD.EXPORT_DATA( credential_name => 'OBJ_STORE_CRED', file_uri_list => 'https://your-bucket-path/json_collection_export.json', query => 'SELECT JSON_SERIALIZE(json_column) FROM your_json_table', -- 序列化JSON列 format => '{"type":"json"}' ); END; / - 导入到目标库:
BEGIN DBMS_CLOUD.IMPORT_DATA( credential_name => 'OBJ_STORE_CRED', file_uri_list => 'https://your-bucket-path/json_collection_export.json', table_name => 'TARGET_JSON_TABLE', column_list => 'json_column', -- 对应目标表的JSON列 format => '{"type":"json", "ignoremissingcolumns":true}' ); END; /
4. Oracle GoldenGate实时同步
如果需要持续同步JSON集合的变更(增量+全量),可以使用GoldenGate for Autonomous Databases:
- 在源、目标ATP/AJD实例分别部署GoldenGate微服务
- 配置抽取进程捕获源库JSON表的DML/DDL变更
- 配置投递进程将变更同步到目标库的对应JSON表
- 确保GoldenGate配置中启用JSON类型的变更支持
内容的提问来源于stack exchange,提问作者Josh
相关产品推荐
相关产品推荐

