informix操作:
- 检查是否开启fullrowlog :
oncheck -pt dbname:tabname (输出结果存在TBLspace flagged for Log Snooping即为开启)
- 查看分区表
select t1.tabname,t2.fragtype
from systables t1,sysfragments t2
where t1.tabid=t2.tabid
and t2.fragtype='T'
and t1.tabname='tablename'
- 查看分配页数
select round(npdata/16777215,3),* from sysmaster@hebei_hdr:Sysptnhdr
where partnum in (select partnum from hbuserdb@hebei_hdr:systables
where tabname='tablename')
- 查看数据库下所有数据表\
select tabname from systabnames where dbsname='databasename' and tabid > 99
- 查询死锁
select * from syslocks where dbsname='databasename' and tabname='tablename'
- 查询统计更新时间:
SELECT * FROM systables a WHERE a.tabname = lower("tablename")
- informix dbschema用法:用dbschema工具导出Informix数据库的结构的具体步骤
(1)导出数据库中所有的表结构到文件db.sql
$>dbschema -d your_database_name -t tablename all db.sql
(2)导出数据库中所有的存储过程到文件db.sql
$>dbschema -d your_database_name -f all db.sql
(3)导出数据库中的所有对象(包含表,存储过程,触发器。。。)到文件db.sql
$>dbschema -d db.sql
(4)导出数据库中一个表的结构到文件db.sql
$>dbschema -d your_database_name -t your_table_name db.sql
(5)导出一个存储过程定义到文件db.sql
$>dbschema -d your_database_name -f your_PRocedure_name db.sql
(6)如果导出更多的表的信息(EXTENT...)
$>dbschema -d your_database_name -ss db.sql
(7)导出数据库中对用户或角色的授权信息
$>dbschema -d your_database_name -p all
$>dbschema -d your_database_name -r all
(8)导出数据库中的同义词
$>dbschema -d your_database_name -s all
(9)导出数据结构以及索引、权限信息
$>dbschema -d ha4600car3gdb@ha_4600_cb_hdr -p all ha4600car3gdb.sql
(10)导出库级别所有信息
dbschema -d bj1100prplpdb@bj_1100_lp_hdr -ss > bj_prplp.sql
- informix dbload使用
dbload
-d 数据库名
-c 命令文件名(在这里我们的命令文件就是Load.db)
-l 日志文件
-n 每次要导入的数据量
-e 运行中超过多少错误就退出(一般是1条)
-i 本次导入数据从第i条导起
-r 导入时不锁表
-k 导入时所表
————————————————
需要注意的是:用DbLoad导入时,如果不指定-n,也就是不指定每次要导入多少条数据,默认的是每次导入100条,还有就是如果不指定是否锁表,一般情况下是锁表的;而锁表后导入数据的速度就比较慢了。所以在导入时,记得加-r,还有一点值得关注的是,如果这里要拿Load命令导入的话,超过一定的数据量,Informix为其分配的锁就会不足,导致导入数据失败(具体的锁的数目是在Informix的onconfig文件中设定的)。
————————————————
dbload命令的语法为:
dbload -d 数据库名 -c 命令文件名 -l 日志文件名
示例:
(1)一次导入10w条,报错100000000此后停止执行此脚本:
dbload -d yn5300car3gdb -c load.cmd -l error.log -e 100000000 -n 100000;
此前大数据表清理方案:可供参考:
一、urldata数据表缓存表方案:
1.停止应用(需先停业务,根据自己实际情况来)
2. 数据备份
1)备份urldata表invalidtime>=(date(current)-2)数据
unload to urldata.unl select * from urldata where invalidtime>=(date(current)-2);
3. 重建表
1)将urldata表重命名
rename table urldata to urldata_20210225;
2)重新建urldata表
create table urldata
(
comcode varchar(255),
riskcode varchar(3) not null ,
datakey varchar(255),
datakey_all varchar(255),
licenseno varchar(20),
datakey3 varchar(255),
requesttext lvarchar(4000),
resposetext lvarchar(4000) not null ,
resposetext2 lvarchar(4000),
resposetext3 lvarchar(4000),
startdate date,
starthour smallint,
operatedate date not null ,
enddate date,
endhour smallint,
operatorcode varchar(10),
licensetype varchar(3),
tcol1 varchar(255),
tcol2 varchar(255),
tcol3 varchar(255),
remark varchar(255),
querytime datetime year to second not null ,
invalidtime datetime year to second not null ,
ip varchar(100),
mac varchar(100),
inserttimeforhis datetime year to second
default current year to second,
operatetimeforhis datetime year to second
default current year to second,
flag varchar(10),
primary key (datakey_all) constraint pk_urldata_new) --建立唯一约束pk_urldata_new
extent size 2048000 next size 102400 lock mode row; --创建表,数据库分给该表空间2G,第一个分配的空间使用完毕之后每次新增100M,行锁
grant select on urldata to "chmdo" as "user3g"; --指定执行此查询的chmdo主体要从 user3g主体派生授予该权限的权利。
4.将备份的数据分批次导入urldata表中(每次10w条),需要从下面两个方案中选择最优方案(需分公司在测试库验证)
(重建索引可以与此步骤调换,减少占用锁资源,28个字段、200多万条数据,大概占用1450万锁资源)
1). 方案1:
a). 创建load.cmd文件
b). 编辑load.cmd,输入如下命令
file "urldata.unl" delimiter "|" 28 ; insert into urldata;
c).执行如下命令,导入数据databasename需指定(一次导入10w条,报错100000000此后停止执行此脚本)
dbload -d databasename -c load.cmd -l error.log -e 100000000 -n 100000;
2). 方案2:load from urldata.unl insert into urldata;
5. 重建索引:分公司注意create创建新表之后需要重建索引并统计更新
create index idx_urldata_dall_new_invalidtime on urldata (datakey_all,invalidtime) using btree;
create index urldataidx_new_flag on urldata(flag) using btree;
6. 统计更新
update statistics for table urldata;
7. 验证:
1)确认是否有数据
select count(*) from urldata;
2)做业务查看表中urldata是否新增数据
select count(*) from urldata; ---确认是否有新增数据
二、回退过程
rename table urldata_20210225 to urldata;