官术网_书友最值得收藏!

Using the ALTER TABLE operation in a single transaction

When we perform the ALTER TABLE operations, such as dropping a column, in earlier versions of DB2, modifying the data types would force the database administrator to perform REORG on the table before any application would work on the table. Now in DB2 9.7, one can perform an unlimited number of table alterations within a single unit of work. This will allow a data modeler to manage the alteration of the column easily.

Getting ready

By default, autocommit is ON in DB2. That means each SQL statement we execute is a unit of work or a transaction. There are many ways to execute the unit of work; the simplest one is to turn off autocommit, or use db2 + c at the beginning, or use atomic procedures.

The different options available for the DB2 command can be listed using the following command:

C:\>db2 "? options" db2 [option ...] [db2-command | sql-statement | [? [phrase | message | sqlstate | class-code]]] option: -a, -c, -d, -e{c|s}, -finfile, -i, -lhistfile, -m, -n, -o, -p, -q, -rreport, -s, -t, -td;, -v, -w, -x, -zoutputfile. Option Description Default Setting ------ ---------------------------------------- --------------- -a Display SQLCA OFF -c Auto-commit ON 

How to do it...

In this section, we'll see how multiple ALTER TABLE operations are allowed in three different units of work. This can be implemented in any language, but the user must have privileges to alter a table.

For demonstration purposes, we have created the EMPLOYEEE table, which is a replica of EMPLOYEE of the sample database without the dependent objects. If there are dependent objects, we may have to drop them and perform the ALTER TABLE statement.

  1. Set autocommit to ON: This is the default behavior for the DB2 prompt, but it can be explicitly specified as follows:
    C:\>db2 +c
    
  2. Alter a table: Since autocommit is set to ON, it means that every statement executed is a transaction in itself. We will alter the same table in different transactions.
    ALTER TABLE EMPLOYEEE DROP COLUMN SALARY ALTER TABLE EMPLOYEEE ALTER COLUMN EDLEVEL DROP NOT NULL ALTER TABLE EMPLOYEEE DROP COLUMN SEX 
    
  3. Reorganize the table: Since we have dropped some columns from the table, the table goes into the REORG PENDING state. To bring the table out of the REORG PENDING state, we can use the REORG command as follows:
REORG TABLE EMPLOYEEE 

The following screenshot shows the sample output for the preceding statements:

How to do it...

How it works…

When a table is altered with operations, such as dropping a column, altering a column data type, or altering the nullability feature of a column, the table may be placed in a REORG PENDING state. While the table is in the REORG state, no queries can be run until the table is brought online from the REORG PENDING state by executing the REORG command. Starting with DB2 9.7, one can perform an unlimited number of ALTER TABLE statements in a single transaction with a maximum of three transactions in a row before the need for table reorganization. This reduces the maintenance window requirement, in the case of a huge data warehouse environment.

主站蜘蛛池模板: 咸阳市| 厦门市| 广元市| 浠水县| 宜丰县| 峨山| 婺源县| 鄂伦春自治旗| 永年县| 海伦市| 大埔区| 曲沃县| 垦利县| 库尔勒市| 马山县| 囊谦县| 阿鲁科尔沁旗| 禹州市| 富顺县| 依兰县| 泰兴市| 江都市| 桃园市| 龙门县| 防城港市| 博湖县| 盐池县| 隆昌县| 曲靖市| 徐闻县| 申扎县| 马尔康县| 华宁县| 锡林浩特市| 肇源县| 麻栗坡县| 平度市| 昭苏县| 平安县| 胶南市| 蕉岭县|