在 MODIFY 操作中使用 ONLINE 关键字

ONLINE 关键字指示数据库服务器内部提交 ALTER FRAGMENT . . . MODIFY 工作,如果没有错误,在该表上应用意向互斥锁而不是互斥锁。

ONLINE MODIFY 操作的要求

您只能对按区间分片方案分片的表使用 TER FRAGMENT ONLINE ON TABLE 语句的 MODIFY 选项。

只有过渡值(区间分片的起始值)才能 ONLINE 修改。其它应用在 MODIFY 选项上的限制同样适用于 ONLINE MODIFY 操作。有关这些限制,请参阅 ATTACH 子句的一般限制范围区间分片的 MODIFY 子句的限制

ALTER FRAGMENT ONLINE . . . 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;