现有 Table 的分区有数百万条记录
Partition on Exisiting Table with Millions of Record
我需要你在 table 拥有数百万条记录的分区上创建分区的建议。
table 定义
- 公司编号
- Type_Of_Data
- Emp_id
- 目的地
- Destination_id
这里针对单个公司,数据类型和 emp_id 可以不同
COMPANY_ID TYPE_OF_DATA EMP_ID
A EMP_DATA A1
A EMP_DATA A2
A EMP_DATA A3
A EMP_DATA A4
A EMP_ADDRESS_DATA A1
A EMP_ADDRESS_DATA A2
A EMP_ADDRESS_DATA A3
A EMP_ADDRESS_DATA A4
B EMP_DATA B1
B EMP_DATA B2
B EMP_DATA B3
B EMP_DATA B4
B EMP_ADDRESS_DATA B1
B EMP_ADDRESS_DATA B2
B EMP_ADDRESS_DATA B3
B EMP_ADDRESS_DATA B4
我的基本选择是 company_id,然后是数据类型和 emp_id
我正在考虑创建一个 List - Hash 或 List -List 分区。
任何人都可以提出其他建议以及如何将分区添加到现有 table 会有所帮助
您不能向现有 "non-partitionized" table 添加任何分区。您必须创建一个新的 table 并将数据复制到其中。
查看 DBMS_REDEFINITION,它可以帮助您在不停机的情况下执行此操作。
复合 List-List 分区应该是这个:
CREATE TABLE MY_TABLE
(
COMPANY_ID VARCHAR2(100),
TYPE_OF_DATA VARCHAR2(100),
EMP_ID VARCHAR2(10),
...
)
PARTITION BY LIST (COMPANY_ID)
SUBPARTITION BY LIST (TYPE_OF_DATA) SUBPARTITION TEMPLATE
(
SUBPARTITION EMP VALUES ('EMP_DATA'),
SUBPARTITION EMP_ADDRESS VALUES ('EMP_ADDRESS_DATA'),
SUBPARTITION MISCELLANEOUS VALUES (DEFAULT) -- if needed
)
(
PARTITION COMPANY_A VALUES ('A'),
PARTITION COMPANY_B VALUES ('B'),
PARTITION COMPANY_C VALUES ('C'),
PARTITION COMPANY_OTHER VALUES (DEFAULT)
);
如果您可以在 table 中获得更多公司,请考虑改为 RANGE
分区。
您不能直接对现有的未分区 table 进行分区。您将需要根据以下方法创建一个临时 table/new table 分区:
-
- 创建分区临时文件Table
- 开始重新定义过程
- 创建约束和索引(依赖项)
- 完成重新定义过程
-
- 创建分区目标Table
- 交换分区
- SPLIT PARTITION(如果需要将单个大分区拆分成较小的分区)
我需要你在 table 拥有数百万条记录的分区上创建分区的建议。
table 定义
- 公司编号
- Type_Of_Data
- Emp_id
- 目的地
- Destination_id
这里针对单个公司,数据类型和 emp_id 可以不同
COMPANY_ID TYPE_OF_DATA EMP_ID
A EMP_DATA A1
A EMP_DATA A2
A EMP_DATA A3
A EMP_DATA A4
A EMP_ADDRESS_DATA A1
A EMP_ADDRESS_DATA A2
A EMP_ADDRESS_DATA A3
A EMP_ADDRESS_DATA A4
B EMP_DATA B1
B EMP_DATA B2
B EMP_DATA B3
B EMP_DATA B4
B EMP_ADDRESS_DATA B1
B EMP_ADDRESS_DATA B2
B EMP_ADDRESS_DATA B3
B EMP_ADDRESS_DATA B4
我的基本选择是 company_id,然后是数据类型和 emp_id
我正在考虑创建一个 List - Hash 或 List -List 分区。
任何人都可以提出其他建议以及如何将分区添加到现有 table 会有所帮助
您不能向现有 "non-partitionized" table 添加任何分区。您必须创建一个新的 table 并将数据复制到其中。 查看 DBMS_REDEFINITION,它可以帮助您在不停机的情况下执行此操作。
复合 List-List 分区应该是这个:
CREATE TABLE MY_TABLE
(
COMPANY_ID VARCHAR2(100),
TYPE_OF_DATA VARCHAR2(100),
EMP_ID VARCHAR2(10),
...
)
PARTITION BY LIST (COMPANY_ID)
SUBPARTITION BY LIST (TYPE_OF_DATA) SUBPARTITION TEMPLATE
(
SUBPARTITION EMP VALUES ('EMP_DATA'),
SUBPARTITION EMP_ADDRESS VALUES ('EMP_ADDRESS_DATA'),
SUBPARTITION MISCELLANEOUS VALUES (DEFAULT) -- if needed
)
(
PARTITION COMPANY_A VALUES ('A'),
PARTITION COMPANY_B VALUES ('B'),
PARTITION COMPANY_C VALUES ('C'),
PARTITION COMPANY_OTHER VALUES (DEFAULT)
);
如果您可以在 table 中获得更多公司,请考虑改为 RANGE
分区。
您不能直接对现有的未分区 table 进行分区。您将需要根据以下方法创建一个临时 table/new table 分区:
-
- 创建分区临时文件Table
- 开始重新定义过程
- 创建约束和索引(依赖项)
- 完成重新定义过程
-
- 创建分区目标Table
- 交换分区
- SPLIT PARTITION(如果需要将单个大分区拆分成较小的分区)