能否创建包含DBMS_CLOUD.EXPORT_DATA导出分区的ADB混合分区表
关于ADB混合分区表创建的解答
结论
可以创建满足要求的自治数据库(ADB)混合分区表,Oracle ADB原生支持同时包含内部分区、和基于Data Pump格式转储文件构建的外部分区的混合分区结构,非常适合冷热数据分层存储的场景。
核心操作要求
- 你通过
DBMS_CLOUD.EXPORT_DATA导出数据时,必须指定导出格式为DATAPUMP,且导出的转储文件需存放在ADB可访问的对象存储位置,同时提前创建好有权限读取该存储位置的云凭证。 - 外部分区的列定义必须和转储文件导出时的表结构完全一致,避免出现字段类型、数量不匹配的报错。
示例操作代码
1. 导出Data Pump格式归档数据
BEGIN DBMS_CLOUD.EXPORT_DATA( credential_name => 'YOUR_OBJ_STORAGE_CRED', file_uri_list => 'https://objectstorage.<你的区域>.oraclecloud.com/n/<你的命名空间>/b/<你的桶名>/o/hist_data_%U.dmp', format => JSON_OBJECT('type' VALUE 'datapump'), query => 'SELECT * FROM 源表 WHERE 分区键字段 < 20200101' ); END; /
2. 创建混合分区表
CREATE TABLE 混合分区表( id NUMBER, 分区键字段 DATE, 业务字段1 VARCHAR2(200), 业务字段2 NUMBER ) PARTITION BY RANGE (分区键字段) ( -- 冷数据外部分区,指向导出的Data Pump转储文件 PARTITION p_hist VALUES LESS THAN (TO_DATE('2020-01-01', 'YYYY-MM-DD')) EXTERNAL ( TYPE ORACLE_DATAPUMP ACCESS PARAMETERS ( CREDENTIAL = 'YOUR_OBJ_STORAGE_CRED' ) LOCATION ('https://objectstorage.<你的区域>.oraclecloud.com/n/<你的命名空间>/b/<你的桶名>/o/hist_data_*.dmp') ), -- 热数据内部分区,存储在ADB本地 PARTITION p_2020 VALUES LESS THAN (TO_DATE('2021-01-01', 'YYYY-MM-DD')), PARTITION p_2021 VALUES LESS THAN (TO_DATE('2022-01-01', 'YYYY-MM-DD')), PARTITION p_current VALUES LESS THAN (MAXVALUE) );
注意事项
- 基于Data Pump转储文件的外部分区为只读属性,不支持INSERT/UPDATE/DELETE等写入操作,仅适合归档冷数据使用。
- 混合分区表的查询逻辑和普通分区表完全一致,ADB优化器会自动裁剪不需要访问的分区,无需额外修改查询语句。
内容的提问来源于stack exchange,提问作者Nilay Panchal
相关产品推荐
相关产品推荐

