infomix到mysql 5.1升级到5.6l

Informix常用操作方法命令
l& informix配置文件:
informix配置文件定义数据库的各种参数设置,通过环境变量$ONCONFIG指定,存放在informix用户的etc目录下,如$ONCONFIG=onconfig.cmq,则配置文件为$INFORMIXDIR/etc/onconfig.cmq;
l& informix日志文件:
记录对数据库的操作,以及操作过程中的错误日志等信息,存放在$INFORMIXDIR目录下,文件名为online.log,如对数据库操作出现异常,可查看该文件定位错误原因;
l& 数据库连接文件:
连接文件sqlhosts所含的信息使用户可以连接到数据库服务器上,存放在$INFORMIXDIR/etc目录下,一行为一条配置信息,每条包含四个域:
【数据库服务器名】: 定义数据库服务器名称,如on_compaq_tcp;
【连接类型】:&&&&&&&&&&
如ontlitcp;
【主机名】:&&&&&&&&
在/etc/hosts中定义,或直接写主机的IP;
【服务名称】:&&&&&&&&&&
在/etc/services中定义,或直接写端口号;
l& INFORMIXDIR:
informix用户安装路径,如INFORMIXDIR=/usr/informix;
l& INFORMIXSERVER:
informix数据库服务器名,如INFORMIXSERVER=on_compaq,数据库服务器名在数据库连接文件sqlhosts中指定;
l& ONCONFIG:
informix配置文件,如ONCONFIG=onconfig.cmq,该文件存放在$INFORMIXDIR/etc目录下。
使用命令onstat -查看当前数据库状态,通常有以下几种状态:
l& On-Line:联机状态
此状态允许用户联机访问数据库,正常情况下OnLine启动后应处于此状态。
l& shared memory not initialized:脱机状态
通常OnLine关闭后处于此状态。
l& Fast Recovery:快速恢复状态
每次OnLine启动时,都要读取物理/逻辑日志,回滚上次OnLine关闭时未提交的事务和未释放的锁等,将数据库快速恢复到物理和逻辑都一致的状态。
快速恢复是过渡状态,时间很短,恢复无错后即进入On-Line状态。
l& Quiescent:静止状态
处于此状态不允许用户访问数据库。通常是数据库管理员在静止状态下进行一些数据库参数的调整(如日志和缓冲区大小等)。
如果数据库处于脱机状态,可使用命令oninit启动OnLine。
启动后,使用onstat
-命令查看数据库状态,若不处于联机状态,可检查日志文件$INFORMIXDIR/online.log确认失败原因。
使用命令onmode -ky关闭数据库。
执行dbaccess命令,可选择相应的数据库,并在该库上执行SQL语句或其它的操作。
【Database】菜单:选择/断开数据库
Select:&&&&&&&&&&&&
选择数据库
cLose:&&&&&&&&&&&&&
关闭与当前数据库的连接
【Connection】:连接/断开数据库服务器
Connect:&&&&&&&&
连接数据库服务器,提示“Select Database Server”时选择目标数据库服务器;
Name:&&&&&&
如以运行当前用户连接数据库,可直接回车;否则输入连接数据库服务器的用户名称;
Password:&&&&&&&
用户口令;
Select Database: 选择所要连接的数据库
选择数据库后,选择【Query-language】菜单,如果此时没有指定数据库,系统会先让你选择数据库。包括以下执行菜单项:
New:&&&&&&&&
输入新的SQL语句,输入完成后按ESC键退出;
Run:&&&&&&&&
运行当前SQL语句;
Modify:&&&&&
修改当前SQL语句;
Use-editor:&&&&&
通过用户指定的编辑器,如vi编辑SQL语句;
Output:&&&&&
指定SQL语句执行结果的输出位置,如文件等;
Choose:&&&&&
选择脚本文件,可以将常用的SQL语句写成脚本文件,执行时从中进行选择;
Save:&&&&&&&
将当前SQL语句保存至文件,以后可以进行选择;
Info:&&&&&&&
当前数据库的库表信息;
Drop:&&&&&&&
删除不用的脚本文件;
Exit:&&&&&&&
unload to /tmp/sa1.txt select * from sa1;
load from /tmp/sa1.txt insert into sa1;
update statistics [high|medium|low] [for table table-name]
set isolation to {dirty read|committed read}
commit work|
l& onstat -
显示当前数据库状态;
l& onstat -u
显示连接的用户信息;
l& onstat -g ses
显示当前与OnLine相连的所有会话(session)的主要状态,包括:
id:&&&&&&
tty:& 会话所在终端;
pid:& 会话所在进程的进程号;
l& onstat -g ses sesid
显示id为sesid的会话的具体信息,包括:
current database:&&
当前打开的数据库;
SQL Stmt type:&&
SQL操作类型,如insert、select、update、delete;
lvl:&&&&&&&&
事务隔离级别,有:commited read(提交读)、dirty read(脏读)等;
mode:&&&&&&
上锁模式;
上次SQL操作出错码,利用此项可帮助应用程序查错;
Last parsed SQL statement: 上次分析的SQL语句
l& onstat -g sql sesid
显示id为sesid的会话的SQL执行语句
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。查看: 1205|回复: 1
informix数据库case when的用法
论坛徽章:0
sum(case when c.reinsmode[2,3]=61 then c.repremium else 0) xuexi1,
sum(case when c.reinsmode[2,3]in ('21','31') then c.repremium else 0) xuexi2,
sum(case when c.reinsmode[2,3]in ('91','92') then c.repremium else 0) xuexi3,
sum(case when c.reinsmode[2,3]in ('21','32') and d.itemcode=02 then d.amount else 0) xuexi4,
sum(case when c.reinsmode[2,3]in ('91','92') and d.itemcode=02 then d.amount else 0) xuexi5,
sum(case when d.itemcode=03 then d.amount else 0) xuexi6
from Fc c,Fj d
and c.num=d.num
group by 1
sum(case when c.reinsmode[2,3]in ('21','32') and d.itemcode=02 then d.amount else 0) xuexi4,
sum(case when c.reinsmode[2,3]in ('91','92') and d.itemcode=02 then d.amount else 0) xuexi5
[backcolor=rgb(241, 241, 241)]如果需要两个表的条件,然后返回其中一个表的字段,如果这样的写的话对不对?
认证徽章论坛徽章:22
老乡啊,2年前整过informix,现在都忘得差不多了。
itpub.net All Right Reserved. 北京皓辰网域网络信息技术有限公司版权所有    
 北京市公安局海淀分局网监中心备案编号: 广播电视节目制作经营许可证:编号(京)字第1149号> informix和mysql
DBeaver连接informix数据库乱码。
使用informix的ontape实现指定时间点的数据恢复,要实现informix的数据恢复,只有2个方法,一
informix统计更新UPDATESTATISTICS。其中贯穿之中最重要的一个是统计更新,由于开始没有做定时
www w3 org TR xhtml1 DTD xhtml1-transitional dtd
Informix Dynamic Server 中的分布式
www w3 org TR xhtml1 DTD xhtml1-transitional dtd
apache_1 3 12,php4 0bx,informix安装心得_
MySQL数据库多种安装方法及企业级安装实践!
day03_mySQL_总结。数据库是是按照数据结构来组织、存储和管理数据的仓库。—->存储和管理
原生态jdbc查询mysql数据库中表的记录。
JDBC的使用(mysql)。java程序 ---> 驱动管理器(DriverManager) ---> 驱动(Driver) ---> 数据库(database)。
一、数学函数
SELECT PI();
保留几位数字同时进行四舍五入
select ROUND(3 );
在最近的应用程序渗透测试中,我发现一个有意思的sql漏洞(SQLI中)。SQLI出现这种情况的
oracle和informix的基础区别1:查看表空间selectb.file_name 物理文件名,b.tablespace_name 表空间,b.bytes
informix数据库总结1.informix一共47条SQL语句,均不区分大小写,数据库名10字内,其余18字内。
informix在unix环境下导入导出表结构及数据数据库及数据导入导出(informix)1.原数据库:将nr
Informix有Informix-SE和Informix-Online两种版本。Informix-SE适用于UNIX和WindowsNT平台,是为中小
PHP中mysql、mysqli、pdo的区别和用法,平时总是用封装的写法写sql,最基本的数据库连接都快
mysql悲观锁总结和实践。
mysql乐观锁总结和实践。谈到了MySQL悲观锁,但是悲观锁并不是适用于任何场景,它也有它
《MySQL必知必会》插入,更新,删除与创建。
《MySQL必知必会》分组与联合。涉及到的操作符:GROUP BY,HAVING,ORDER BY,INNER JOIN,OUT JOIN,
Informix中文乱码解决方法已经知晓数据库为aaaa的情况下,通过sql查到该库对应的语言环境,
INFORMIX基于TSM备份异机恢复ZB0000HB01主机INFORMIX数据库备份配置;$ls &l /home/informix/lib/i
一、前言概述 之前写过3篇关于C语言访问INFORMIX数据的博文:第一篇讲述ESQL基本语法;第二
一、头文件引入informix数据库的头文件时,可使用如下的方式:[cpp]EXEC SQL INCLUDEEXEC SQL
操作系统:Red Hat Enterprise LinuxServer release 5.5informix版本:Informix_Ultimate_11.70.UC3_LIN_x86_32_FixPack
收集的一些Redis面试题,一、 mySQL里有2000w数据,redis中只存20w的数据,如何保证redis中的数
SQL笔记(MYSQL)。
linux上的mysql从5 5升级到5 6。升级原因:在mysql5 5中,on update current_timestamp(在navicat中文版
-Java连接Excel、MySQL、SQLServer数据源及相关增、删、改、查方法和问题总结。
Linux完全卸载mysql。
热门文章热门标签
01月18日 |
01月18日 |
01月18日 |
01月19日 |
01月18日 |
01月18日 |
01月18日 |
01月18日 |C语言访问INFORMIX数据库 - ESQL语法知识_数据库技术_Linux公社-Linux系统门户网站
你好,游客
C语言访问INFORMIX数据库
ESQL语法知识
来源:Linux社区&
作者:royalapex
一、头文件
引入informix数据库的头文件时,可使用如下的方式:
EXEC SQL INCLUDE& EXEC SQL INCLUDE& EXEC SQL INCLUDE& EXEC SQL INCLUDE& EXEC SQL INCLUDE& EXEC SQL INCLUDE& EXEC SQL INCLUDE& EXEC SQL INCLUDE& EXEC SQL INCLUDE& EXEC SQL INCLUDE&
二、宏定义
宏在宿主变量使用时,此宏定义可使用如下方式:
EXEC SQL DEFINE SQL_USRNAME_MAX_LEN 64;&
/* User name max len */& EXEC SQL DEFINE SQL_PASSWD_MAX_LEN 64;& & /* Password max len */& EXEC SQL DEFINE SQL_SVRNAME_MAX_LEN 64;&
/* Database name max len */& EXEC SQL DEFINE SQL_CNNAME_MAX_LEN 64;& & /* Connect name max len */& EXEC SQL DEFINE SQL_STMT_MAX_LEN 1024;& & /* SQL statement max len */&
三、结构体定义
当SQL语句中使用了结构体变量时,那么此变量的类型结构体必须通过如下方式定义:
EXEC SQL BEGIN DECLARE SECTION;& typedef struct& {& & && & & char name[32];& & && & && & & char brf[256];& }DBStudent_t;& EXEC SQL END DECLARE SECTION;&
int db_ifx_update(...)& {& EXEC SQL BEGIN DECLARE SECTION;& & & DBStudent_& EXEC SQL END DECLARE SECTION;& & & & ...& & & & EXEC SQL UPDATE SET *=(:dbstudent) WHERE id='10001';& }&
四、变量定义宿主变量的必须通过如下方式进行定义:
EXEC SQL BEGIN DECLARE SECTION;& & & char svrname[SQL_SVRNAME_MAX_LEN], /* Server name */& & & & &
usrname[SQL_USRNAME_MAX_LEN], /* User name */& & & & &
passwd[SQL_PASSWD_MAX_LEN],&
/* Passwd */& & & & &
cnname[SQL_CNNAME_MAX_LEN];&
/* Connect name */& EXEC SQL END DECLARE SECTION;&
int db_ifx_open(...)& {& EXEC SQL BEGIN DECLARE SECTION;& & & char svrname[SQL_SVRNAME_MAX_LEN], /* Server name */& & & & &
usrname[SQL_USRNAME_MAX_LEN], /* User name */& & & & &
passwd[SQL_PASSWD_MAX_LEN],&
/* Passwd */& & & & &
cnname[SQL_CNNAME_MAX_LEN];&
/* Connect name */& EXEC SQL END DECLARE SECTION;& & & & ...& & & & EXEC SQL CONNECT TO :svrname AS :cnname USER :usrname USING :& & & ...& }&
五、错误信息每执行一次SQL语句后,错误码存放在全局变量sqlca.sqlcode中,可通过rgetmsg()获取错误信息。如:
int db_ifx_commit(...)& {& & & EXEC SQL COMMIT WORK;& & & if(sqlca.sqlcode & 0)& & & {& & & & & rgetmsg(sqlca.sqlcode, errmsg, sizeof(errmsg));& & & & & fprintf(stdout, "%s", errmsg);& & & & & return -1;& & & }& & & ...& }&
【内容导航】
相关资讯 & & &
& (12/28/:34)
& (11/22/:35)
& (02月26日)
& (12/27/:56)
& (10/30/:58)
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款12.10.xC6出来时候碰到"Could not determine encryption mode from page zero",竟果然是BUG! 20:15
空间已经转移到新加坡,希望会好一些。 14:34
增加新域名liaosnet.cc,与同指向。 15:25
空间迁移到香港。或许速度会快一点。。 20:10
解决个问题:NBU配置Storage时的目录在系统分区上,导致备份失败,最终原因是目录在系统分区上时,需要在 This directory can exist on the root file system or system disk. 这个选项前打上勾。 22:21
可通过以下域名访问
以下域名可出售
Dbspace布局 -- informix体系架构笔记
了解块(chunk)的布局;
了解保留页结构;
了解块可用列表页(chunk free-list page)的用途;
了解partition页的结构;
了解partition number(partnum);
了解物理日志和逻辑日志结构;
root dbspace空间
&&&&root dbspace是Informix数据库第一个且是重要的dbspace,它包含系统的第一个chunk(root chunk),跟其它dbspace一样,可为root dbspace增加附加chunk。由于root dbspace不能被删除,故应当显式地为其指定初始chunk。
最好不要把业务库放置于root dbspace上,而应该放置于特别指定的dbspace或者多个dbspace上,以使数据分布在多个磁盘上。
在初始化时,物理日志和最少3个逻辑日志均位于root dbspace上,在实际应用时,需要把它们移至独立的dbspace上以获取更好的性能。
root chunk布局
保留页(reserved pages)
&& & &root chunk前12页称为系统保留页,用于保存在检查点时更新的系统信息。从第三个保留页开始,页使用半冗余对方式,各半冗余对使用不同的结构,半冗余对中的页交替保存最新的信息。oninit轮换读取半冗余对中页的信息,以确保数据库宕机未能写入半冗余对中的页时,另一个页可以做为备份启动。
块可用列表页(chunk free-list page)
每个chunk的系统保留页后的1页为块可用列表页,它包含该chunk里的空闲页信息。
Tblspace tblspace
Tblspace tblspace是描述dbspace内所有tblspace位置和结构的页的集合。每个页都是相同的格式,包含以下主要组件:
区段的数量和位置;
字段的数量和描述;
一列索引键信息;
数据库名和表名。
Tblspace tblspace在root dbspace上的初始大小是250页。
Database Tblspace
Database tblspace 是一个包含系统中所有数据库的列表,包含以下组件:
数据库名(database name)
数据库所有者(database owner)
数据库创建时间
数据库在systables中的tblspace编号
数据库日志类型标识
查找database tblspace的物理位置,可以使用oncheck -pe 命令,在输出的结果中,sysmaster:sysdatabases 的位置即是。
非root chunk布局
Dbspace上的第一个chunk和其它chunk的区别仅仅是在dbspace建立时第一个chunk上含有50页的tblspace tblspace。Root dbspace的其它chunk布局与dbpsace中的其它chunk一致。
保留页(Reserved pages)
&& &非root chunk上的前2页为保留页,但未用。
块可用列表页(chunk free-list page)
&& &在所有的chunk上,在保留页之后的页是块可用列表页。
Tblspace tblspace
&& &每个dbspace均包含tblspace tblspace(又称partition table)。Dbspace的第一个tblspace tblspace区段位于该dbpsace的第一个chunk上,tblspace tblspace亦跟其它表一样可以扩展。Tblspace tblspace的初始区段和扩展区段大小均是50页。
Root Reserved Page概述
页0(page 0)
&& &页0包含Informix的版权信息,和系统初始化时间。
&& &可通过oncheck -pr 输出中的PAGE_PZERO部分或者oncheck -pP 1 0 查看该页信息。
参数配置页(configuration page)
&& &页1为参数配置页,包含上次服务器正常启动的系统配置文件信息。
&& &该页包含配置文件中绝大部分的参数和配置值,但有些合法的参数并未列出。
&& &可通过oncheck -pr输出中的PAGE_CONFIG部分或者oncheck -pP 1 1 查看该页信息。
检查点、日志页(checkpoint/logical log pages)
&& &页2和页3为第一个半冗余对,为检查点、日志页。当前检查点、日志页包含最后检查点的位置和时间、各逻辑日志的位置和状态。
&& &注意的是:冗余对中仅其中一个页是当前使用页,仅当前页损坏时才使用另一页。故当我们提到主chunk保留页、dbspace保留页或者检查点、日志保留页时,均是指冗余对中当前使用页。判断是否是当前页使用的是timestamp,使用oncheck -pr输出时,也是仅输出当前使用页。
&& &可通过oncheck -pr 输出中的PAGE_1CKPT & PAGE_2CKPT部分或者oncheck -pP 1 2 和oncheck -pP 1 3查看该页(对)信息。
&&近似相同的半冗余对页(A Pari of Nearly-Identical Pages)
&&如下图所示,检查点、逻辑日志信息均存在于两个页中。这两个页的信息的区别在于:当前页包含最新的信息,另一个是以往的信息。(所有半冗余对均是这个差别)
检查点结构 与 检查点记录
区分检查点结构(位于 检查点、日志保留页)与检查记录这两者的区别很重要。
检查点记录是写到逻辑日志上的。检查点的最后一步即是将检查点记录写入到当前逻辑日志文件上。
在任何时刻,磁盘上的逻辑日志上可以存在多个检查点记录。但在这些记录中,只有最近的检查点对于快速恢复是重要的。在检查点、日志页上的检查点结构包含在系统关闭或者宕机后指引快速恢复至最重要最近的检查点记录的信息。
检查点结构
&& &Validating PAGE_1CKPT & PAGE_2CKPT...
&& & & & &Using check point page PAGE_1CKPT.
&& &Time stamp of checkpoint & & & 0x383e2
&& &Time of checkpoint & & & & & & 04/12/:13
&& &Physical log begin address & & 1:263
&& &Physical log size & & & & & & &25000 (p)
&& &Physical log position at Ckpt &1152
&& &Logical log unique identifier &5
&& &Logical log position at Ckpt & 0x107e018 (Page 4222, byte 24)
&& &Checkpoint Interval & & & & & &207
&& &DBspace descriptor page & & & &1:4
&& &Chunk descriptor page & & & & &1:6
&& &Mirror chunk descriptor page & 1:8
检查点时间戳:16进制,是检查点的最后时刻。检查点、日志页上的时间戳仅比检查点结构上的检查点时间戳大一点点。
检查点时间:实际的检查点时间。使用的是localtime()。
物理日志开始地址:DEC:DEC(chunk number:page offset),物理日志开始的位置。
物理日志大小:DEC,物理日志的大小,单位是页。
检查点时物理日志位置:DEC,检查点时物理日志位置指的是最后的检查时,物理日志相对于物理日志地址开始地址的偏移。快速恢复(fast recovery)的第一步即是物理恢复(physical recovery)开始于此(即:检查点物理日志位置)。从该页开始,物理日志上页的页完成时间戳(page-ending timestamp)大于检查点时间戳的页复制回它们正确的地址上(即,它们物理恢复)。物理恢复结束是在物理日志上所有页的页完成时间戳小于检查点时间戳。
逻辑日志唯一识别符:DEC,包含最近检查点记录的逻辑日志唯一ID。
检查点时逻辑日志位置(LOGPOS):HEX,在逻辑日志唯一识别符标识的逻辑日志上的具体位置。包含最近的检查点记录。
Dbspace描述页:DEC:DEC(chunk number:page offset),最后检查点使用的当前dbspace保留页地址。
Chunk描述页:DEC:DEC(chunk number:page offset),最后检查点使用的当前chunk保留页地址。
镜像Chunk描述页:DEC:DEC(chunk number:page offset),最后检查点使用的当前镜像chunk保留页地址。
逻辑日志文件结构
逻辑日志文件结构在 检查点、日志保留页中是同一种结构。
& &Log file number & & & & & & & &5
Unique identifier & & & & & & &5
Log contains last checkpoint: &Page 4236, byte 24
Log file flags & & & & & & & & 0x13 & & & Log file in use
& & & & & & & & & & & & & & & & & & & & & Current log file
& & & & & & & & & & & & & & & & & & & & & Log written to archive tape
Physical location & & & & & & &1:45263
Log size & & & & & & & & & & & 5000 (p)
Number pages used & & & & & & &4237
Date/Time file filled & & & & &-
Time stamp & & & & & & & & & & -
逻辑日志文件编号:DEC,逻辑日志文件在系统中的编号。
唯一识别符:DEC,逻辑日志唯一识别符。
包含最近检查点的逻辑日志:DEC,最近检查点记录的具体逻辑日志页号和字节偏移量
逻辑日志文件标识:HEX,使用逻辑或(OR),各单独标识的含义如下:
Log file in use
Current log file
Newly added (archive required)
Log has been written to an archive tape
Log is a temporary log file
使用oncheck -pr输出中含有翻译结果。
逻辑日志物理地址:DEC:DEC(chunk number:page offset),该逻辑日志文件的开始物理地址。
逻辑日志大小:DEC,该逻辑日志文件的大小,单位是页。
逻辑日志已使用页数:DEC,该逻辑日志文件已经使用的页数。Informix恢复机制并不信任该值。
逻辑日志填充时间:DATE和TIME,基于localtime()。
时间戳标识:HEX,逻辑日志完成时的全局系统时间戳标识。
&& &逻辑日志唯一识别符 和 逻辑文件编号
&& & & & &逻辑日志备份后得用逻辑日志文件,但使用新的识别符。
Dbspace页(dbspace pages)
页4和页5为第二个半冗余对,为dbspace页。当前dbspace页包含所有dbspace的状态、位置、数据和创建时间等。
Dbspace保留页结构
& &Validating PAGE_1DBSP & PAGE_2DBSP...
&& & & & &Using DBspace page PAGE_1DBSP.
&& &DBspace number & & & & & & & & 1
&& &DBspace name & & & & & & & & & rootdbs
&& &Flags & & & & & & & & & & & & &0x40001 & &No mirror chunks
&& &Number of chunks & & & & & & & 1
&& &First chunk & & & & & & & & & &1
&& &Date/Time created & & & & & & &01/31/:52
&& &Partition table page number & &14
&& &Pagesize (k) & & & & & & & & & 2
&& &Logical Log Unique Id & & & & &0
&& &Logical Log Position & & & & & 0x0
&& &Oldest Logical Log Unique Id & 5
&& &Last Logical Log Unique Id & & 0
&& &DBspace archive status &
Archive Level & & & & & &0
&& & & & &Real Time Archive Began &04/11/:38
&& & & & &Time Stamp Archive Began 172828
&& & & & &Logical Log Unique Id & &5
&& & & & &Logical Log Position & & 0x942e4
Dbspace编号(dbspace number):DEC,dbspace编号,从1开始。
Dbspace名称(dbspace name):CHAR,dbspace名称。
标识(flags):HEX,dbspace标识。
标识,参考管理员参考大全里的onstat -d解释。
Flag & & & Value Description
0x Mirror not allowed and dbspace is unmirrored
0x Mirror is allowed and dbspace is unmirrored
0x Mirror is allowed and dbspace is mirrored
0x Newly mirrored
0x Blobspace
0x Blobspace on removable media
0x Blobspace is on optical media
0x Blobspace is dropped
0x Blobspace is the optical STAGEBLOB
0x Space is being recovered
0x Space is fully recovered
0x Logical log is being recovered
0x Table in dbspace is dropped
0x Temporary dbspace
0x Blobspace is being backed up
0x Sbspace
0x Physical or logical log changed
0x Dbspace or chunk tables have changed
0x Dbspace or blobspace contains large chunk
0x Chunk in this dbspace has been renamed
0x Temporary dbspace used by only by shared disk secondary server. It is one of the dbspaces listed in the SDS_TEMPDBS onconfig parameter on the SD server.
0x Temporary dbspace for the shared disk Secondary server. This is listed in the DBSPACETEMP onconfig variable on the shared disk secondary server.
0x The DBspace was externally backed up.
包含chunk数(number of chunks): DEC,该dbpsace包含的chunk总数。
首chunk(first chunk):DEC,该dbspace的第一个chunk编号;
创建时间:(date/time created):datetime,该dbspace的创建时间;
Tblspace位置(Partition table page number):DEC,该dbspace的tblspace在chunk上的位置。
页大小(page size):DEC,该dbspace的默认页大小。
主chunk页(primary chunk pages)
页6和页7为第三个半冗余对,为主chunk页。包含所有主chunk的信息(路径、大小、偏移和状态等)。
主chunk保留页结构
Validating PAGE_1PCHUNK & PAGE_2PCHUNK...
&& & & & &Using primary chunk page PAGE_1PCHUNK.
&& &Chunk number & & & & & & & & & 1
&& &Flags & & & & & & & & & & & & &0x30040 & &Chunk is online
&& &Chunk path & & & & & & & & & & /opt/informix/dbs/rootdbs
&& &Chunk offset & & & & & & & & & 0 (p)
&& &Chunk size & & & & & & & & & & 100000 (p)
&& &Number of free pages & & & & & 40211
DBspace number & & & & & & & & 1
Chunk编号(chunk number):DEC,chunk编号,从1开始。
Flags标识(flags):HEX,chunk标识。(有些flags并未找到相应的文档,参考dbspace的flags理解)
0x0010 Mirror chunk
0x0020 Chunk is off-line
0x0040 Chunk is on-line
0x0080 Chunk is being recovered
0x0100 Chunk is newly mirrored
0x0200 Chunk is belongs to a blobspace
0x0400 Chunk is being dropped
0x0800 Chunk is part of an optical stageblob
0x1000 Chunk is inconsistent with the rest of the system
0x2000 Chunk has been chained
0x4000 Chunk belongs to an subspace
Chunk路径(chunk path):CHAR,chunk文件路径。
Chunk偏移量(chunk offset):DEC,chunk开始位置相对于文件/设备的开始偏移量,单位是页。
Chunk大小(chunk size):DEC,chunk的大小,单位是页。
空闲页总数(number of free pages):DEC,块空闲页总数,单位是页。
所属dbpsace编号:(dbspace number):DEC,chunk所属的dbspace编号。
镜像chunk页(mirror chunk pages)
页8和页9为第四个半冗余 对,为镜像chunk页。其结构和主chunk页结构相同,保存所有镜像chunk的信息。
结构与主chunk页相同,仅chunk大小为0,镜像chunk不存在空闲页。
备份页(archive pages
页10和页11(0xa和0xb)为第五个半冗余对,为备份页。保存服务器最近的备份信息。
备份保留页结构
Validating PAGE_1ARCH & PAGE_2ARCH...
&& & & & &Using archive page PAGE_1ARCH.
&& &Archive Level & & & & & & & & &0
&& &Real Time Archive Began & & & &04/11/:38
&& &Time Stamp Archive Began & & & 0x2a31c
&& &Logical Log Unique Id & & & & &5
Logical Log Position & & & & & 0x942e4
备份级别(archive level):DEC,备份级别,仅0,1,2
备份开始时间(real time archive began):datetime,备份时检查点开始时间点,localtime()
备份开始时间戳(time stamp archive began):HEX,备份时检查点开始时间点的时间戳;
逻辑日志唯一ID(logical log unique id):DEC,包含备份时检查点记录的逻辑日志;
逻辑日志位置(logical log position):HEX,包含备份时检查点记录的逻辑日志上的具体位置;
块可用列表页(chunk free-list page)
每个chunk都需要有个机制用于跟踪其上可用空间。在保留页后的一个页即块可用列表页(chunk free-list page),每个可用列表条目(结构)包含两个元素:开始页,大小。
当分配页面时,从可用列表上减去空间,调整偏移;
空间回收(删除表,alter操作等)时,从可用列表项中增加空间,调整偏移,或者增加条目;
&& &附加的块可用列表页:
在第一个块可用列表页填充满后,需要附加的块可用列页。附加的块可用列表页以联接的方式与第一个块可用列表页联接,该联接仅是第一个块可用列表页与附加的块可用列表页之间的联接。
Tblspace tblspace(root dbspace上)
在每个dbspace的初始chunk中,第一个块可用列表后的一块连续页称为tblspace tblspace(partition table)。Tblspace tblspace是用于描述dbpace上表信息的位置的页。Tblspace tblspace上的一个页用于描述tblspace tblspace本身(root dbspace上的0x100001描述tblspace tblspace本身,即将自己也当作一个表)。Tblspace tblspace上的页称为partition页(partition page)。
Partition编号(partnum)
以sysmaster:systables表的partnum为例:
&& & & &0x001 00002
&& & & &前3位(1.5字节)为001为dbspace编号,后5位(2.5字节)00002为逻辑页编号(tblspace blspace中的页)
Partition页布局
每个partition页均包含5个slot,
Slot 1:partition结构
Slot1存储的partition结构包含的是表的常规信息。
一些通用tblspace信息做为表统计信息存储于partition结构中,也存储于做为优化器使用的系统编目(system catalog)中。事实上,在一些update statistics操作中,一部分表partition页信息复制到系统编目中,另一部信息则需要从tblspace页中获取。虽然系统编目中的信息在表增长的过程中变成过期,但在partition页上的信息是准确的。然而,优化器(optimizer)仅访问系统编目中的信息,而不访问partition页中的信息。
可通过oncheck -pt database_name:table_name 或者oncheck -pt partnumber的方式查看其结构:
TBLspace Report for demodb:informix.t1
&& &Physical Address & & & & & & & 2:527
&& &Creation date & & & & & & & & &04/12/:28
&& &TBLspace Flags & & & & & & & & 800901 & & Page Locking
&& & & & & & & & & & & & & & & & & & & & & & &TBLspace contains VARCHARS
&& & & & & & & & & & & & & & & & & & & & & & &TBLspace use 4 bit bit-maps
&& &Maximum row size & & & & & & & 73 & & & &
&& &Number of special columns & & &3 & & & &&
&& &Number of keys & & & & & & & & 0 & & & &&
&& &Number of extents & & & & & & &1 & & & &&
&& &Current serial value & & & & & 1 & & & &&
&& &Current SERIAL8 value & & & & &1 & & & &&
&& &Current BIGSERIAL value & & & &1 & & & &&
&& &Current REFID value & & & & & &1 & & & &&
&& &Pagesize (k) & & & & & & & & & 2 & & & &&
&& &First extent size & & & & & & &8 & & & &&
&& &Next extent size & & & & & & & 8 & & & &&
&& &Number of pages allocated & & &8 & & & &&
&& &Number of pages used & & & & & 2 & & & &&
&& &Number of data pages & & & & & 1 & & & &&
&& &Number of rows & & & & & & & & 1 & & & &&
&& &Partition partnum & & & & & & &2097212 &&
&& &Partition lockid & & & & & & & 2097212
物理地址(physical address):DEC:DEC,这个并不是partition编号,也不是与tblspace区段相关。不同于其它元素,物理地址并不是partition结构的一部分。它是物理位置(chunk编号 和 偏移)。
创建时间(creation date):datetime,表的创建时间,localtime();
Tblspace标识(tblspace flags):DEC,该标识与页标识,dbspace标识,chunk标识类似,使用 逻辑或(OR)计算(有些flag没有相关信息)。
0x0001 Page-level locking
0x0002 Row-level locking
0x0004 Tblspace is a Bundlespace (OnLine secure)
0x0008 Partition marked for DDR replication
0x0010 Partition dropped (shared memory only)
0x0020 System-defined temporary table
0x0040 User-defined temporary table
0x0080 Tblspace used for sorting
0x0100 Contains VARCHAR column(s)
0x0200 Contains BLOBspace BLOB column(s)
0x0400 Contains partition-resident BLOB column(s)
0x0800 Requires 4-bit bitmap
0x1000 Contains optical BLOB column(s)
0x2000 Partition required for system to function - do not drop
0x4000 Temp table being used for special function - do not update bitmaps
0x8000 Partition is being appended to
行最大大小(Maximum row size):DEC,行的最大大小,在包含varchar字段时,每个varchar字段需要增加1个字节。
特殊字段数(Number of special columns):DEC,blob和varchar的字段个数;
键(索引)数(Number of keys):DEC,键(索引)数;
区段总数(Number of extents):DEC,分离的区段总数;
当前序号(Current serial value):DEC,使用了serial字段时,当前的序号;
当前序号8(Current SERIAL8 value):DEC,使用了serial8字段时,当前的序号;
当前大序号(Current BIGSERIAL value):DEC,使用了bigserial字段时,当前的序号;
当前REFID号(Current REFID value):DEC,使用了refid字段时,当前的序号;
页大小(Pagesize (k)):DEC,表的页大小;
首区段大小(first extent size):DEC,表的第一个区段大小,首区段最小为4页,默认为8页。或是在建表的时候指定的大小。
下一区段大小(next extent size):DEC,当前表的下一区段大小;
已分配页总数(Number of pages allocated):DEC,所有区段页的总数;
已使用页总数(Number of pages used):DEC,已分配页中已使用页的总数;
数据页总数(Number of data pages):DEC,已使用页中的数据页总数;
行总数(Number of rows):DEC,表中行的总数;
Partition编号(Partition partnum):DEC,前已经讲述,此处以10进制显示;
Partition锁(Partition lockid):DEC,当锁定表时,其实锁定的是partition编号(在表和partition编号一一对应时)。当使用分片表时,partition锁代替所有分片上的partition编号。
Partition页位置
Informix基于表的partition编号确定表partition页的位置,partition编号存储于systables.partnum。读取partition页时,服务器检查从partition结构的前4字节(包含partition number)中判断是否正确读取。
以下为一个示例:
服务器接收到访问表demodb.t1请求;
为了获取表demodb.t1的partition页,服务器需要知道partition编号(partnum)。服务器从表systables的字段partnum中查找结果;
根据partnum,可以获知dbspace编号和逻辑页编号(partnum由这两个组成,Informix从tblspace tblspace中读取特定的partition页)
Informix处理器从partition页的slot 1(partition结构)的第一个元素(即上面提到的partnum),和第2步从systables表中查询到的partnum对比。
若两者相匹配,则本次操作是成功的。若是不匹配,informix往消息日志里写入断言失败的信息并返回错误号242和134给客户端。
&& &Slot 2:包含数据库名,所有者,表名,NLS(有的话);
&& &Slot 3:包含对每个特殊字段(blob,varchar等)的描述,每个特殊字段使用8字节;
&& &Slot 4:(键、索引的partition页上才有记录)包含key descriptor,用于描述索引信息;
&& &Slot 5:包含区段列表信息。每8字节描述一个区段,包含区段的开始地址和逻辑页开始数。
&& &区段slot(slot 5)
&& &Partition页的第5个slot是区段slot,每8字节为一条目,每一条目描述表中的一个区段。每一条目分开4字节的两部分:区段的开始逻辑页编号 和 该页的物理地址。
以上第二个区段为例:8 &0 &0 &0 &ea &8 &0 &0,转换后可知,该区段开始的逻辑页编号为0x8,开始位置为0x8ea,该区段的大小可从下一逻辑页编号(0x20) 减去0x8得到 0x18(即10进制的24页)。 (注意:在不同版本的数据库上,该输出格式可能不一样,原理应是相近的,示例使用的是IDS11.50FC8,第4个区段的物理地址0x4e23转换成10进制为2 00003即该页相对于第一个区段所在的chunk偏移为2,即chunk编号增加2,开始页为编号为3的页,由于第一个区段所有的chunk编号为2,故第4个区段的物理地址为4:3)
准备就绪的条目(on deck or cap entry),在已经使用的区段条目后是准备就绪条目,准备接收下一区段的物理地址。该条目包含空的物理地址和将分配的区段开始逻辑页编号。
&& &表也可能有slot 6,用于描述因alter导致的不同版本的区段信息,该slot不出现在当前的主partition页中,而是在单独的tblspace tblspace上(联接主partition页)。
&& &若是表进行了更改(alter)操作,需要附加的slot用于保存版本信息。
原表更改(in-place alter)指的是alter table操作更改表结构不需要重建表,而是在tblspace tblspace上的附加页上记录表更改信息。附加页是partition页的扩展,且该页上仅有一个slot即slot 6。该逻辑页编号填充该表partition页上pg_next字段。
已经更改的表(altered table)上的一个记录要更新(update),如果当前页有足够的空间供当前页的所有记录转换至新版本,那么当前页所有的记录都将更新至新版本。如果当前页没有足够的空间供当前页的所有记录转换至新版本,那么仅该记录被更新且被移到其它有相同版本的页中。版本号记录在数据页(data page)上的pg_next字段上。
虽然表可以更改很多次,数据库使用versioning来描述区段中的那些页包含更新页。
每个表仅可以进行255次的原表更改,其tblspace上至多含 有255个版本的页。
Slot 6包含以下信息(存在版本差异):
2字节:版本号;
2字节:当前版本标识;
4字节:当前版本更改开始的逻辑页;
4字节:保存新的描述(descriptor)信息的tblspace tblspace逻辑页编号
4字节:更改前的行大小
4字节:更改后的行大小
4字节:未知
在灾难情况下使用
物理日志在顺畅运行的环境里并不体现出重要的用途,它的重要性体现在备份机制和快速恢复机制,这两个机制能保障在电源失败和磁盘失效时能非常快捷的恢复。
物理日志大小影响检查点间隔
过小的物理日志大小设置可能造成检查点过于频繁。
&& &物理日志页结构(physical log page)
&& &物理日志页的结构看起来跟数据页或者索引页很相似,仅以下不同。
页标识含0x800(pg_flags)
确定页是物理日志页的最确切方法是检查页的页标识。若是页标识包含0x800,那么这个页就是物理日志页。
页地址并非物理位置
比较页地址(page address)与物理地址(physical location),若是两者不区配,则表明该页为物理日志页或者是未初始化的页。
逻辑日志页结构
逻辑日志由一组连续的日志页组成,每个页偏移等于逻辑日志页编号(从0开始)。
请记住日志文件(log file)是chunk上的一个区段(extent),是可以复用的。日志文件只是作为逻辑日志(logical log)的临时存放区域,逻辑日志是唯一的,备份到磁带上的是逻辑日志而不是日志文件(这里说的备份指的是逻辑日志备份)。
逻辑日志可以包含日志文件大小内任意页数。
当逻辑日志缓冲区刷新时,逻辑日志缓冲区信息顺序写入到逻辑日志中。
&& &逻辑日志页结构(logical log page)
&& &逻辑日志页没有slot表(各日志记录各自记录日志长度)。逻辑日志记录非常灵活,可以从一个页跨越到另一个页中(一个日志记录必须在一个日志文件中,不可跨日志文件)。逻辑日志页头的特别之处:
Pg_nslots:未用,因为逻辑日志页上没有真正意义上的slot。
Pg_frcnt:固定为0,即便该页未必完全填充(pg_frptr是准确的)。
逻辑日志缓冲区填充逻辑日志页是完全填充(至页的最后一个字节),故经常有跨逻辑日志页的日志记录。因此绝大多数页是完全充满的,特别是使用缓冲型日志时。
然而,在使用非缓冲型日志时,检查点或是提交确认的日志记录时,在缓冲区的最后一个页并未完全填充。刷新回日志文件时,该页设置结束,不允许其它记录追加。Pg_frcnt设置为0的原因:在逻辑日志缓冲区刷回日志文件前,刷新处理器更新缓冲区最后一页上的pg_frcnt为0,使该页看起来是满的,以阻止其它处理器写入该页。
Pg_next:在逻辑页中,该元素包含逻辑日志维一ID;
Pg_prev:在逻辑页中,该元素包含页偏移(与逻辑页编号类似);该页偏移仅在日志中。
&& &逻辑日志位置(logical log position(logpos))
&& &如图所示,该记录开始位置为0x80字节,位于逻辑日志页0x600中,故其logpos为0x,其前5位为该逻辑日志页的偏移,后3位为记录在该页的起点。
需要注意的是,logpos并不指明具体的日志(uniqid或是日志文件编号)。Logpos仅在特定的逻辑日志中唯一。
&& &练习:在online.log中,每次检查点有类似于以下信息,如何在逻辑日志中找到它?
&& & & 23:03:32 &Checkpoint Completed: &duration was 0 seconds.
&& & & 23:03:32 &Wed Apr 13 - loguniq 6, logpos 0x610018, timestamp: 0x40180 Interval: 363
&& &答:从系统保留页中的检查点、日志页上,可以找到loguniq 6的物理地址,然后从0x610页中,定位0x18(24)字节偏移,即是该次检查点记录。
实际上也可以通过onstat -l的输出获取对应信息。通过onlog来查看逻辑日志记录,如练习中所示,可通过onlog -l -n 6的输出,然后定位到0x610018
&addr & & len &type & & xid & & &id link & &
610018 & 44 & CKPOINT &1 & & & &6 &0 & & & &0 & & &&
&& & & & 2c00
,.....B. ........&
&& & & & 00
........ ........&
&& & & & 7b00 & & & & &{....... ....}

我要回帖

更多关于 mysql输出到文件 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信