本文档介绍了开启冷数据归档功能后,冷数据归档和OSS表原地转换的操作方法。
前提条件
冷数据归档
冷数据归档执行的是表归档操作,执行冷数据归档操作后的表称为归档表(只读),归档表的引擎为OSS引擎,归档表的数据文件存储在OSS上。执行冷数据归档操作后,原来本地表在PFS上占用的空间将被释放。
您可以通过以下两种方式来归档冷数据:
注意事项- 通过内置存储过程
dbms_dlm.execute_tier_dlm_policy()
归档冷数据。您只需要在执行内置存储过程时指定归档的库名和表名,即可将PolarStore上的表原地转换成CSV格式的OSS表,归档到OSS对象存储中。语法如下:CALL dbms_dlm.execute_tier_dlm_policy(schema_name, table_name, force);
- 通过
ALTER
命令归档冷数据。语法如下:ALTER TABLE table_name ENGINE = CSV CONNECTION = 'default_oss_server' [, FORCE];
参数 | 说明 |
---|---|
schema_name | 需要归档到OSS对象存储中的库名。 |
table_name | 需要归档到OSS对象存储中的表名。 |
force | 是否直接覆盖OSS对象存储中的数据。取值如下:
|
- 支持对InnoDB引擎和XEngine引擎上的表使用冷数据归档功能。
- 目前归档到OSS上的冷数据格式只支持CSV格式。
- 目前冷数据归档过程中不支持对表进行修改。
- 冷数据归档功能不支持将数据文件归档到用户自建的OSS Server中。
- 冷数据归档后只会保留主键信息,不会保留其它索引信息,建议您保留原有的表定义。
- 使用内置存储过程进行冷数据归档时,不支持原子性。如果发生操作异常,存储过程中的多个步骤,可能会有部分步骤已经执行成功,执行成功的步骤不会回滚。
在数据库
oss_test
中创建InnoDB表t
。CREATE TABLE t(a int, b int, c int, primary key(a)) ENGINE = INNODB;
- 通过内置存储过程
dbms_dlm.execute_tier_dlm_policy()
归档冷数据。CALL dbms_dlm.execute_tier_dlm_policy('oss_test', 't', '');
- 通过
ALTER
命令归档冷数据。ALTER TABLE t ENGINE = CSV CONNECTION = 'DEFAULT_OSS_SERVER';
OSS表原地转换
如果您有低频修改归档到OSS上冷数据的需求,通过
ALTER ENGINE
语法可以将OSS表原地转换。然后就可以修改转换后的表数据,修改完数据之后,可以再次将修改后的表原地归档成OSS表。- 语法
ALTER TABLE tbl_name ENGINE[=]engine_name;
- 参数说明
参数 参数说明 table_name 需要转换的OSS表的表名。 engine_name 转换后的引擎类型。 - 注意事项
- OSS表原地转换后的表,只保留归档前的表主键。
- OSS表为只读状态时,不支持执行修改操作(
INSERT
、UPDATE
和DELETE
)。如需修改已经归档的冷数据,您需要将OSS表转换成可读可写的表,如InnoDB表。修改只读状态下的OSS表时,报错信息如下:1036 - Table 't1' is read only
- OSS表原地转换后只会保留主键信息,不会保留其它索引信息。如果需要使用其它的索引信息,需要您手动来创建。
- 示例在数据库
oss_test
中将OSS表t
转换成InnoDB表t
。
然后就可以修改InnoDB表ALTER TABLE `oss_test`.`t` ENGINE = InnoDB;
t
的数据,修改完数据之后,再次将InnoDB表t
原地归档成OSS表t
。由于归档到OSS上的数据文件默认不会被删除,再次归档时,就需要通过指定force
参数为'force'
来覆盖已经归档的数据文件。例如:CALL dbms_dlm.execute_tier_dlm_policy('oss_test', 't', 'force');