When the database server executes an ALTER FRAGMENT statement, the database server moves data between existing fragments and also creates a new fragment.
The statement in Figure 15 creates and fragments a jobs table.
CREATE TABLE jobs (sstatus file_ops) FRAGMENT BY EXPRESSION sstatus > 15 IN fragspace2, REMAINDER IN fragspace1 USING file_am
The statement in Figure 16 changes the fragment expression for jobs, which redistributes the table entries.
ALTER FRAGMENT ON TABLE jobs MODIFY fragspace1 TO (sstatus <= 5) IN fragspace1, MODIFY fragspace2 TO (sstatus > 5 AND sstatus <= 10) IN fragspace2, REMAINDER IN fragspace3
For each fragment that the ALTER FRAGMENT statement specifies, the database server performs the following actions:
Figures Figure 17 through Figure 20 show the separate sequences of purpose functions that create the fragments and distribute the data for the SQL ALTER FRAGMENT statement in Figure 16. The database server performs steps 1, 2, and 3 to move fragments from fragspace1 to fragspace2 and then performs steps 1 through 3 to move fragments from fragspace2 to fragspace3.
Figure 17 shows the sequential scan in step 1, which returns all rows from the fragment because the scan descriptor contains a null-valued pointer instead of a pointer to a qualification descriptor.
In Figure 18, the database server returns the row identifiers that the access method should delete from fragspace1 and insert in fragspace2.
Figure 19 again shows the sequential scan in step 1. This scan returns all the rows from fragment2.
Figure 20 shows steps 3 and 4. The database server returns the row identifiers that the access method should delete from fragspace2 and insert in fragspace3. The database server does not have fragspace3, so it executes am_create to have the access method create a fragment before it executes am_insert.
For more information about fragments that a VTI-based access method manages, refer to Supporting Fragmentation.
Home | [ Top of Page | Previous Page | Next Page | Contents | Index ]