ONLINE 关键字指示数据库服务器内部提交 ALTER FRAGMENT . . . MODIFY 工作,如果没有错误,在该表上应用意向互斥锁而不是互斥锁。
您只能对按区间分片方案分片的表使用 TER FRAGMENT ONLINE ON TABLE 语句的 MODIFY 选项。
只有过渡值(区间分片的起始值)才能 ONLINE 修改。其它应用在 MODIFY 选项上的限制同样适用于 ONLINE MODIFY 操作。有关这些限制,请参阅 ATTACH 子句的一般限制 和 范围区间分片的 MODIFY 子句的限制 。
以下 SQL 语句定义了一个已分片的 employee 表,它使用范围区间存储分布方案,在列 emp_id(也是分片键)上有一个唯一索引 employee_id_idx 在列 dept_id 上有另一个索引 employee_dept_idx。
CREATE TABLE employee (emp_id INTEGER, name CHAR(32), dept_id CHAR(2), mgr_id INTEGER, ssn CHAR(12)) FRAGMENT BY RANGE (emp_id) INTERVAL (100) STORE IN (dbs1, dbs2, dbs3, dbs4) PARTITION p0 VALUES < 200 IN dbs1, PARTITION p1 VALUES < 400 IN dbs2; CREATE UNIQUE INDEX employee_id_idx ON employee(emp_id); CREATE INDEX employee_dept_idx ON employee(dept_id); INSERT INTO employee VALUES (401, "Susan", "DV", 101, "123-45-6789"); INSERT INTO employee VALUES (601, "David", "QA", 104, "987-65-4321");
Fragments in surviving table before ALTER FRAGMENT ONLINE: p0 VALUES < 200 - range fragment p1 VALUES < 400 - range fragment (transition fragment) sys_p2 VALUES >= 400 AND VALUES < 500 - interval fragment sys_p4 VALUES >= 600 AND VALUES < 700 - interval fragment
以下语句返回了错误,因为过渡值只能被增加。这也是脱机 ALTER FRAGMENT . . . MODIFY 操作的一个限制。
ALTER FRAGMENT ONLINE ON TABLE employee MODIFY INTERVAL TRANSITION TO 300;
以下语句成功运行:
ALTER FRAGMENT ONLINE ON TABLE employee MODIFY INTERVAL TRANSITION TO 600; Fragments in surviving table after ALTER FRAGMENT ONLINE: p0 VALUES < 200 - range fragment p1 VALUES < 400 - range fragment sys_p2rg VALUES < 600 - range fragment (new transition fragment) sys_p3 VALUES >= 600 AND VALUES < 700 - interval fragment
以下语句同样有效:
ALTER FRAGMENT ONLINE ON TABLE employee MODIFY INTERVAL TRANSITION TO 700; ALTER FRAGMENT ONLINE ON TABLE employee MODIFY INTERVAL TRANSITION TO 900;