blogger

    blogger
  • hot log

  • comment

    twitter

    • 12.10.xC6出来时候碰到"Could not determine encryption mode from page zero",竟果然是BUG!http://www-01.ibm.com/support/docview.wss?rs=630&uid=swg21973408

      2015-12-21 20:15

    • 空间已经转移到新加坡,希望会好一些。

      2015-11-16 14:34

    • 增加新域名liaosnet.cc,与liaosnet.com同指向。

      2015-10-09 15:25

    • 空间迁移到香港。或许速度会快一点。。

      2014-02-13 20:10

    • 解决个问题:NBU配置Storage时的目录在系统分区上,导致备份失败,最终原因是目录在系统分区上时,需要在 This directory can exist on the root file system or system disk. 这个选项前打上勾。

      2012-09-26 22:21

    • More»

    blog sort

    links

    record

    banner

    Informix创建表及索引的过程

    暗夜星空's Memory from Dec 31 , 2015 at 23:42 PM , under Category:INFORMIX教程
    数据库版本:12.10.FC6X5
    操作系统:RHEL 6U4 64bit
    目的:通过onlog命令熟悉创建表、创建索引的数据库内部操作过程

    通过SQL语句创建一个表,只需
    create table ttt
    (
      col1 integer,
      col2 char(40),
      col3 varchar(40),
      col4 text
    );

    通过onlog -n <逻辑日志编号> 的输出,可知数据库内部需要完成如下操作:
    onlog_create_tab.png
    1、开始事务
    BEGIN(begin work):包含事务号、开始时间、用户;
    2、获取tabid
    UNIQID(Logged when a new SERIAL value is assigned to a row):获取systables中的tabid序号;
    3、初始化partition页
    BLDCL(Build tblspace):根据语句及获取的信息初始化tblspace页;
    4、补充partition页信息  -- 有特殊字符需要。
    PTCOLUMN(Add special columns to fragment):如果有特殊字段,往tblspace页中增加相应的信息;
    5、往syscolumns表中增加表的字段信息
    HINSERT(Home row insert):往syscolumns表中增加相应的字段;
    ADDITEM(Add item to index): 往syscolumns表的索引中增加相应的记录;
      注:创建的表ttt有4个字段,故HINSERT和两个ADDITEM(两个索引)重复了4次
    6、往sysblobs表中增加特殊字段信息 -- 有特殊字符需要。
    HINSERT(Home row insert):由于有text字段,需往sysblobs表中增加相应的字段;
    ADDITEM(Add item to index): 往sysblobs表的索引中增加相应的记录;
    7、往systables表中增加表信息
    HINSERT(Home row insert):往systables表中增加记录;
    ADDITEM(Add item to index): 往systables表的两个索引中增加相应的记录;
    8、往systabauth表中增加表权限信息
    HINSERT(Home row insert):往systabauth表中增加记录;
    ADDITEM(Add item to index): 往systabauth表的两个索引中增加相应的记录;
    9、完成操作,提交
    COMMIT(commit work): 包含提交时间。

    对于创建一个索引
    create index ix_ttt on ttt(col1);

    数据库内部需要完成如下操作:
    onlog_create_idx.png
    1、开始事务
    BEGIN(begin work):包含事务号、开始时间、用户;
    2、初始化partition页
    BLDCL(Build tblspace):根据语句及获取的信息初始化tblspace页;
    3、分配extent
    CHALLOC(Chunk extent allocation): 分配第一个extent;
    4、Partition页扩展
    PTEXTEND(Tblspace extend):如果没有可使用(或者用过)的partition页,需要扩展。如果有之前删除过的表而清空的parttion页,该页可以复用,如上面创建表中没有使用到PTEXTEND
    5、修改索引的partition lockid
    PNLOCKID(Change tblspaces lockid):修改partition页中该索引的partition lockid
    6、创建索引
    CINDEX(Create index):在partition页中初始化索引信息
    7、systables中索引归属表ttt所在数据页前映像
    HUPBEF(Home row update,before-image.):保留前映像
    8、systables中索引归属表ttt所在数据页修改后映像
    HUPAFT(Home row update,after-image.):更新映像
    9、往sysindices中增加索引记录
    HINSERT(Home row insert):往sysindices表中增加相应的字段;
    ADDITEM(Add item to index): 往sysindices表的两个索引中增加相应的记录;
    10、往sysobjstate表中
    HINSERT(Home row insert):往sysobjstate表中增加相应的字段;
    ADDITEM(Add item to index): 往sysobjstate表的两个索引中增加相应的记录;
    11、往sysfragments表中增加表信息
    HINSERT(Home row insert):往sysfragments表中增加记录;
    ADDITEM(Add item to index): 往sysfragments表的索引中增加相应的记录;
    12、systables中索引归属表ttt所在数据页前映像
    HUPBEF(Home row update,before-image.):保留前映像
    13、systables中索引归属表ttt所在数据页修改后映像
    HUPAFT(Home row update,after-image.):更新映像
    14、完成操作,提交
    COMMIT(commit work): 包含提交时间。

    Post a comment:

    Your email address will not be published. Required fields are marked﹡