分类: DB2/Informix
2016-02-17 10:13:35
原文地址:informix数据库学习总结 作者:hero--008
一. informix数据库基础管理类常用命令
一、常用命令 oninit 将系统从off-line模式变为on-line模式 oninit -iy (初始化数据库,删除所有dbspace和chunk) oninit -s (脱机-->静态) onmode -ky offline onmode -s graceful shutdown-->quiescent(联机到静态,让用户处理完成) onmode -u immediate shutdown-->quiescent(联机到静态,所有用户立即终止) onmode -m quiescent--->online onmode -z sid 删除某session onmode -l 将当前正在使用的逻辑日志下移 onmode -c 强制执行检查点操作 即onmonitor->force ckpt 其中的oninit onmode一般情况下只有dbsa权限才可以执行,oninit权限限制级别更高 onstat - 查看服务器状态 onstat -d 查看dbspace和chunk情况 onstat -l 查看逻辑日志 onstat -F 查看写入磁盘的页刷新和类型情况,从共享内存缓冲区向磁盘写入页面有三种方式(fg:前台写 LRU:队列写 chunk:块写) onstat -R 打印LRU队列 onstat -p 显示系统的基本I/O与性能配置文件 onstat -c 查看onconfig文件 onstat -m 查看消息日志 onstat -f 查看受DATASKIP影响的dbspace onstat -x 查看事务 onstat -k 显示所有活动的锁 onstat -g sub_option 运行多线索选项 onstat -g ses/sql onstat -r onstat -g act 显示系统中所有的活动线索 onstat -g ath -r 2 每隔两秒显示系统中所有的活动的线索 onstat -i 交互方式 >sql >sql sid 关于onstat命令的更多用法,可以在系统中运行onstat -help查看 ipcs 查看共享内存情况 ipcrm 删除某个共享内存 ipcrm -m id ipcrm -s id Ontape命令: 1)零级(一级或二级)备份 $>ontape -s $>ontape -s -L 0 $>ontape -s -L 1 $>ontape -s -L 2 自动备份逻辑日志文件 $>ontape -a 3)连续逻辑日志备份(日志文件写满一个,online系统自动备份一个,你可以插盘磁带到磁带机上,让IDS自动备份。要占用磁带机) $>ontape -c 4)备份恢复(对应零级备份或一级备份或二级备份) $>ontape -r (详细过程见ontape恢复文挡) 5)备份恢复几个DBSPACE(一定要存在逻辑日志备份,否则物理恢复完后,还是不能用) $>ontape -r -D dbs1 dbs2 。。。 6)配置HDR时使用的物理恢复 $>ontape -p 7)修改数据库日志模式 $>ontape -s -B db_name 修改为buffer_log 即缓冲日志模式 $>ontape -s -U db_name 修改为unbuffer_log 即非缓冲日志模式 $>ontape -s -N db_name 修改为无日志模式 数据库不含日志,即不支持事务,对数据库的任何修改都不会记录到逻辑日志中去 $>ontape -s -A db_name 修改为ansi logging模式,从这个模式无法改到其它模式,因此一般不要用该项。 oncheck 命令 oncheck -pe extend oncheck -ce oncheck -cr reserved pages oncheck -cd TBLspace data rows including bitmap oncheck -ci table indexes databases 对逻辑日志的操作: 以informix用户登录, $ onmode -uy (由Online切换到Quiescent状态,所有用户立即中止) onmode -m (切换到Online) $ onparams -a -d logdbs -s 100000 其中logdbs为dbspaces 名 ,-s 100000 表示增加了100M空间。 再连续执行4遍上述命令,这样新的逻辑日志空间总共为500M,可以用 onstat -l 查看逻辑日志情况,接下来就要删除前面3个旧逻辑日志, 删除前做一个0级备份 # ontape -s -L 0 执行该命令做0级备份,建议: 如果允许可以每天在业务系统结束工作 后做一次0级备份,做完备份后管理好备份磁带,做好标记。 $ onparams -d -l logid logid 为逻辑日志id号,可以用onstat -l 查看,然后就可根据id号删 除3个旧逻辑日志。 将当前正在使用的逻辑日志下移 $onmode -l 三、DBSPACE及数据库导入导出 1.增加一个新的dbspace:(datadbs,15M, 偏移为0) onspaces -c -d datadbs -p /home/informix/datadbs -o 0 -s 15000 2.在datadbs这一个dbspace中增加一个chunk:(datadbs_chunk1) onspaces -a datadbs -p /home/informix/datadbs_chunk1 -o 0 -s 15000 3.将上述chunk删除 onspaces -d datadbs -p /home/informix/datadbs_chunk1 -o 0 4.删除dbspace(仅当要删除的dbspace空间没有数据时才可删除) onspace -d datadbs 导出数据库: 用dbexport工具将数据卸成文本,并装载到其它服务器上。 (1) 卸载文本的步骤如下: 用informix用户注册 dbexport cleardb -o WORKDIR -ss 当系统提示dbexport completed!数据卸载完毕。 其中: -ss 确保数据库的建库信息或建表信息被保留如日志模式、初始extent尺寸、lock mode、表所在dbspace等。 -o 指定存放卸载数据的目录数据存放在目录cleardb.exp目录下,其中包含cleardb.sql和形如*.unl的文件, 提示信息存放在dbexport.out文件中。 (2) 装载文本的步骤如下: 用informix用户注册确保数据库处于On_Line状态,服务器上没有同名数据库。 dbimport cleardb -i WORKDIR 当系统dbimport completed!提示数据装载完毕。 其中: -i 指定从何处装载。 如何在不破坏库本身信息情况下(如行级锁等)将数据库卸载到磁带设备,并装载在其它服务器上? 1) 卸载的步骤如下: 用DBA用户注册 将存放数据的磁带插入磁带机,确认磁带及磁带机完好可用。 dbexport cleardb -t /dev/rmt/0m -b 512k -s 2048000k -ss 当系统提示dbexport completed!数据卸载完毕。 其中: -ss 确保数据库的建库信息或建表信息被保留如日志模式,初始extent尺寸,lockmode,表所在dbspace -t 磁带设备/dev/rmt/0m -s 磁带容量2G -b 块大小512KB 提示信息存放在dbexport.out文件中 2) 装载的步骤如下: 用DBA用户注册 将存放卸载数据的磁带放在磁带机上,确认磁带机正常,确认数据库系统处于On_Line状态,服务器上没有同名数据库。 $ dbimport cleardb -t /dev/rmt/0m -b 512k -s 2048000k 当系统dbimport completed 提示数据装载完毕!提示信息存放在dbimport.out 文件中。 重建表格: 1) 导出数据库中的所有对象(包含表,存储过程,触发器。。。)到文件db_createsql dbschema -d db_name db_create.sql 1. dbschema -d dbname -t tabname -ss tabname.sql /*将表格结构放进tabname.sql*/ 编辑此文件并在create table语句末尾增加新的区域长度 暂时将生成表格索引的tabname.sql部分标为说明语句,即在索引句前后加上“{}”,例如: { create index xl on customer(last_name); create index x2 on customer(cust_nbr);} 最好在后面生成索引,因为这样表格能快速装入,索引能在连续磁盘空间生成,使其更加有效。 2. 导出一个存储过程定义到文件db.sql dbschema -d db_name -f procedure_name procedure.sql 3.导出数据库中对用户或角色的授权信息 dbschema -d your_database_name -p all dbschema -d your_database_name -r all 2)锁定表格 lock table tabname in exclusive mode; 3)用SQL UNLOAD 将表格卸载到磁盘或磁带中 unload to file_or_tape_path select * from tabname unload to "/usr/data/unload/customer.unl" select * from customer; 检查表中的行数(用SQL中的Table/Info命令),验证卸载是否成功。比较这个数与装入完成后SQL显示的消息。 用此验证file_or_tape_path中的行数: wc -l file_or_tape_path 这个属于unix/linux命令了 4)删除表格 DROP TABLE tabname; 这是标准的sql了 5)用dbacess生产表格并运行tabname.sql。这时不要生成索引 DBACCESS DBNAME tabname.sql 6)用SQL的LOAD FROM 或用 dbload重新装入表格 load from file_or_tape_path insert into tabname; load form "/usr/data/unload/customer.unl" insert into customer; 对于日志数据库,上面的装入语句可能产生长事务或“to many lock”错误。这时建议用dbload之类的实用程序 将数据插入表中。dbload的 -n 选项强制在插入一定行后进行commit work(建议选1000行)。 检查表中的行数(用SQL中的Table/Info命令),验证装入是否成功。 7)如要生产索引,运行第一步中标为说明语句的tabname.sql部分。 8)更新表格统计信息 update statistics on tabname; 9) 查看SQL语句的执行时间 /home/dm/syk/my_shl>time dbaccess dw6400 test.sql Database selected. (sum) $560016715.41 1 row(s) retrieved. Database closed. real 0m14.53s user 0m0.02s sys 0m0.00s 10) 查看SQL语句的执行计划与ORACLE中的相同 SET EXPLAIN ON; Your execute sql; 11)Informix 进程隔离级(isolation level) 隔离级是指并发执行相同操作的进程相互隔离的程度。OnLine通过设定进程在读操作时上锁的不同规则而提供了四种隔离级:Dirty Read(脏读)隔离、Committed Read(提交后读)隔离、Cursor Stability(游标固定)隔离和Repeatable Read(可重复读)隔离具体说明如下: 1、Dirty Read(脏读)隔离 Dirty Read是最简单的隔离级,类同于无隔离级当进程在读数据据时并不对所读的数据上锁,也不管其他进程上没上锁或在做什么。 2、Committed Read(提交后读)隔离 当进程请求Committed Read隔离级时,OnLine保证进程得到的数据不是数据库未提交的数据即此时没有其他进程在对这些数据做修改。 3、Cursor Stability(游标固定)隔离 当进程使用Cursor Stability隔离级时,OnLine对进程最后获取的一行数据上锁,对普通的游标上一个共享锁,而对修改游标一个升级锁(更新锁)。 4、Repeatable Read(可重复读)隔离 Repeatable Read隔离级请求数据库服务器对进程读到的每一行数据都加锁为普通的游标加上共享锁而为修改游标上更新锁这些锁直到游标关闭或事务结束时才释放。Repeatable Read允许用户使用滚动游标对所选择的数据多次读取并保证这些数据没有被修改或被删除。用户设置隔离级的方法是用“Set Isolation To isolationlevel”SQL语句,其中isolationlevel是Dirty Read、Committed Read、Cursor Stability和Repeatable Read之一。在Informix-4gl、ESQL/C、SQL中均可以使用。 <一> dirty read 可能读到未提交(commited)的记录,可能读到最后被回滚的记录,该记录是一个phantom。 在一些查询中,使用此隔离级别,可提高效率。因为不受其他进程锁表,锁记录的影响。 <二> committed read 读到的数据均为提交后的数据。两个进程可同时update 同一条记录。(缺省的隔离级别) <三> cursor stability 当隔离级别设置为cursor stability 时,在某一游标内,当前记录不能被其他 的进程update,delete ,但游标内其他的记录可被其他进程update ,delete 。 <四> repeatable read 当隔离级别设置为repeatable read 时,在某一游标内有两种情况 1. 该游标的where 子句有索引,则满足条件的所有记录均不能被其他进程 update ,delete 。(该索引的搜索树的所有节点) 2. 该游标的where 子句不在索引上,则该表的所有记录均不能被其他进程 update,delete 。 所以,当使用repeatable read 时,最好有索引,否则相当于锁表,极大损害系统效率。 |
以上命令侧重于INFORMIX数据库的基础管理
文档参考来自于