Informix环境
数据库对象
Informix | |
列数 | 2,767 |
行数 | 32,767字节 |
最大行数 | 不限(只要表容量保持在64 GB以内) |
二进制大对象(Blob)型存储 | 无法存储在表或二进制大对象空间内 |
群集化表索引 | 每表1个(按索引组织的表) |
非群集化表索引 | 77个(假设表内存在一个范围,每个键只有一个组成部分) |
单个索引中的最大列数 | 16 |
索引中的最大列值长度 | 255字节 |
表命名规则 | [[database.]owner.]table_name[@Server] |
视图命名规则 | [[database.]owner.]table_name[@Server] |
索引命名规则 | [[database.]owner.]table_name[@Server] |
数据库对象标识符
Informix |
标识符名称最长可达128字节。 |
标识符名称可以字母字符或下划线开始,并包含文字数字式字符、下划线(_)或美元符号($)。 |
数据库名称必须在Informix实例中具备唯一性(除在ANSI模式下为owner.database之外) |
标识符名称必须在用户账户(数据库)范围内具备唯一性。 |
列名必须在表和视图范围内具备唯一性。 |
索引名称必须在数据库范围内具备唯一性。 |
限定表名称
当您对存在于Informix用户账户中的表进行访问时,只需利用不受限制的名称即可将表选中。对其它Informix数据库中的表进行访问需要为表名冠以数据库名,并在两者之间用圆点(.)分隔。Informix的相似限定方法提供了更大的位置透明度。Informix还允许利用表所有者对表加以识别。
访问存在于…之中的表 | Informix |
用户账户 | SELECT * FROM STUDENT |
其它架构 | SELECT * FROM STUDENT_ADMIN.STUDENT |
数据类型
1.与sql server的比较
Informix | Microsoft SQL Server |
CHAR | 建议使用char型变量。由于char型数据列使用固定存储长度,因此,它们接受访问的速度在某种意义上高于varchar型数据列。 |
VARCHAR 与TEXT, NTEXT与 IMAGE | varchar或text。(如果Informix列中的数据值长度小于等于8000字节,就应使用varchar型变量;否则,必须使用text型变量。) NTEXT、TEXT和IMAGE可在单个赋值内最多保存2 GB数据。 而NTEXT则是TEXT类型的Unicode版本 |
NCHAR NVARCHAR | CHAR和VARCHAR的Unicode字符数据版本 |
BLOB | varbinary或image型变量。(如果Informix列中的数据值长度小于等于8000字节,就应使用varbinary型变量;否则,必须使用image型变量。) |
INTEGER SMALLINT TINYINT BIGINT FLOAT SMALLFLOAT MONEY SMALLMONEY DECIMAL NUMERIC | 如果整数值域在1到255之间,应使用tinyint型变量。 如果整数值域在-32768到32767之间,应使用smallint型变量。 如果整数值域在-2,147,483,647到2,147,483,647之间,应使用int型变量。 如果您需要使用浮点型数字,请使用numeric型变量(具有精度和刻度)。 说明:不要使用float或real型变量,因为可能出现四舍五入的情况(Informix的INTEGER型变量和SQL Server的numeric型变量均不执行四舍五入运算)。 money型变量值域在-922,337,203,685,477.5808到+922,337,203,685,477.5807之间。 而smallmoney型变量值域则在-214,748.3648到+214,748.3647之间。 |
BINARY, VARBINARY | 二进制数据既可具有固定长度(binary),又能具有可变长度(varbinary) binary型变量值域为1到8000,存储容量为n+4字节 varBinary为可变长度二进制变量,存储容量为数据长度+4字节。 |
DATE DATETIME SMALLDATETIME | datetime. smalldatetime型变量可显示的日期范围在1900年1月1日到2079年6月6日之间 |
BIT | 取值为1、0或NULL的整数型变量 |
ROWID SERIAL | 使用标识列数据类型。 |
USER | USER |
常用语气
1生成表
CREATE TABLE table_name ( {col_name column_properties [default_expression] [constraint [constraint [...constraint]]]| [[,] constraint]} [[,] {next_col_name | next_constraint}...] ) [Informix Specific Data Storage Parameters]
Informix数据库对象名既可区分大小写,又可不区分大小写(设定DELIMIDENT环境变量,并用双引号将对象名括起来)。
2生成临时表
SELECT * INTO TEMP STUDENTBACKUP FROM STUDENT [WITH NO LOG]
3创建视图
CREATE VIEW view_name [(column_name [, column_name]...)] AS select_statement [WITH CHECK OPTION]
4索引
CREATE [UNIQUE | DISTINCT] [CLUSTER] INDEX index_name ON table_name (column_name [, column_name]...) [ASC | DESC] [FILLFACTOR n] [IN tablespace_name] DROP INDEX ABC;
5对象级权限
GRANT {ALL [PRIVILEGES][column_list] | permission_list [column_list]} ON {table_name [(column_list)] | view_name [(column_list)] | synonym name [(column_list)] | stored_procedure_name} TO {PUBLIC | name_list | role_name } [WITH GRANT OPTION] [AS grantor] REVOKE {ALL [PRIVLEGES]} ON {table | view | synonym } FROM { user | user list | role } [CASCADE | RESTRICT]
6主键与唯一列
CREATE TABLE DEPT (DEPT VARCHAR(4) NOT NULL, DNAME VARCHAR(30) NOT NULL, PRIMARY KEY (DEPT) CONSTRAINT DEPT_DEPT_PK, UNIQUE (DNAME) CONSTRAINT DEPT_DNAME_UNIQUE) ) EXTENT SIZE 32 NEXT SIZE 32
7存储过程
CREATE PROCEDURE procedure [(argument datatype [, argument datatype)] block END PROCEDURE OR CREATE FUNCTION function [(argument datatype [, argument datatype)] RETURNING datatype; block END FUNCTION
8触发器
描述 | Informix |
每个表的触发器数量 | 不限 |
是否在INSERT、UPDATE和DELETE语句前执行触发器 | 是 |
是否在INSERT、UPDATE和DELETE语句后执行触发器 | 是 |
是否不执行INSERT、UPDATE和DELETE语句而执行触发器 | 否 |
是否允许嵌套触发器 | 否 |
是否存在语句级触发器 | 是 |
是否存在行级触发器 | 是 |
是否在执行前检查约束 | 在日志功能被激活的情况下,约束条件将延迟到触发器执行完毕 在日志功能未被激活的情况下,约束将不会延迟 |
引用UPDATE或DELETE触发器中的原有或先前值 | 用户定义 |
引用INSERT触发器中的新数值 | 用户定义 |
禁用触发器 | SET TRIGGER trigger DISABLED |
CREATE TRIGGER TRACK_GRADES [UPDATE OF SSN ON GRADE | UPDATE OF CCODE ON GRADE | UPDATE OF GRADE ON GRADE | INSERT ON GRADE | DELETE ON GRADE] REFERENCING OLD AS OLD NEW AS NEW FOR EACH ROW (INSERT INTO GRADE_HISTORY( TABLE_USER, ACTION_DATE, OLD_SSN, OLD_CCODE, OLD_GRADE, NEW_SSN, NEW_CCODE, NEW_GRADE) VALUES (USER, CURRENT, OLD.SSN, OLD.CCODE, OLD.GRADE, NEW.SSN, NEW.CCODE, NEW.GRADE), );
1. 以显性方式请求表级锁定
功能 | Informix |
锁定整个表——允许其他人对表进行读取,但防止他们对其进行更新。锁定状态将缺省持续到语句执行完毕。 | LOCK TABLE…IN SHARE MODE |
将表锁定至事务处理完成 | ? |
排它锁——防止其他人对表执行读取或更新操作,并将这种状态保持到指令或事务处理完成 | LOCK TABLE…IN EXCLUSIVE MODE |
设定语句等待解锁的毫秒数。 | SET LOCK MODE TO [WAIT seconds | NOT WAIT] |
SQL语言支持
1 SELECT语句
Informix |
SELECT [ALL | DISTINCT] [optimizer directives] select_list [FROM {table_name | view_name | select_statement}] [WHERE clause] [GROUP BY group_by_expression] [HAVING search_condition] [{UNION | UNION ALL } SELECT …] [ORDER BY clause] [FOR UPDATE { OF column } | FOR READ ONLY] [INTO {TEMP | SCRATCH} table_name] |
2 INSERT语句
Informix |
INSERT INTO {table_name | view_name } [(column_list)] VALUES {values_list | select_statement} |
3 UPDAYTE语气
UPDATE [optimizer directives] {table_name | view_name | synonym_name } SET [column_name(s) = {constant_value | expression | select_statement | column_list | variable_list] [ {where_statement} | {WHERE CURRENT OF cursor_id}] |
UPDATE语句中使用子查询
UPDATE STUDENT_ADMIN.STUDENT S SET TUITION_TOTAL = 1500 WHERE SSN IN (SELECT SSN FROM GRADE G WHERE G.SSN = S.SSN AND G.CCODE = '1234')
4 DELETE语句
Informix |
DELETE [optimizer directives] [FROM] {table_name | view_name | synonym_name} [ {WHERE clause} | { WHERE CURRENT OF cursor_id} ] |
5 联接子句
Informix |
SELECT S.SSN AS SSN, FNAME, LNAME FROM STUDENT S, OUTER CLASS C, OUTER GRADE G WHERE S.SSN = G.SSN AND G.CCODE = C.CCODE |
6 将SELECT语句用作表名
Informix |
SELECT SSN, LNAME, FNAME, TUITION_PAID, SUM_PAID FROM STUDENT, (SELECT SUM(TUITION_PAID) SUM_PAID FROM STUDENT) |
函数
1数字/数学函数
函数 | Informix |
绝对值 | ABS |
反余弦 | ACOS |
反正弦 | ASIN |
n的反正切 | ATAN |
n和m的反正切 | ATAN2 |
余弦 | COS |
指数值 | EXP |
十六进制值 | HEX |
自然对数 | LOGN |
10的对数 | LOG10 |
取模(余数) | MOD |
求幂 | POW |
求根 | ROOT |
四舍五入 | ROUND |
数字符号 | 无 |
正弦 | SIN |
平方根 | SQRT |
正切 | TAN |
舍位 | TRUNC |
2字符函数
数 | Informix |
将字符转换成小写形式(LOWER) | LOWER |
将字符转换成大写形式(LOWER) | UPPER |
填充字符串左侧 | LPAD |
删除前导空格 | TRIM |
删除尾部空格 | TRIM |
多次重复字符串 | RPAD |
重复空格的字符串 | RPAD |
取子串 | SUBSTR SUBSTRING |
字符替换 | REPLACE |
将字串中每个单词的首写字母转换成大写形式 | INITCAP |
字符串长度 | LENGTH CHAR_LENGTH CHARACTER_LENGTH |
包括空格在内的字符列字节数 | OCTET_LENGTH |
3日期函数
函数 | Informix |
日期添加 | date column +/- INTERVAL(value) 或 date column +/- DATETIME(value) 或 date column +/- value UNITS datetime unit |
日期差距 | date column +/- DATETIME(value) 或 date column +/- DATE(value) |
当前日期和时间 | CURRENT TODAY |
日期的字符串表示形式 | DATETIME(value) |
日期的整数表示形式 | 无 |
日期的四舍五入 | DATETIME(value) datetime unit TO datetime unit |
日期截断 | DATETIME(value) datetime unit TO datetime unit |
将字符串转变为日期 | DATETIME(value) 或 DATE(value) |
将空值转换成日期 | 无 |
4转换函数
函数 | Informix | 其他 |
从数字型到字符型 | 隐含 | CONVERT |
从字符型到数字型 | 隐含(在未执行计算的情况下报错) | CONVERT |
从日期型到字符型 | 隐含 | CONVERT |
从字符型到日期型 | 隐含(在未执行计算的情况下报错) | CONVERT |
从十六进制到二进制 | 无 | CONVERT |
从二进制到十六进制 | 无 | CONVERT |
5其它行级函数
函数 | Informix |
返回第一个非空表达式 | DECODE |
如果exp1 = exp2,则返回空值 | DECODE |
用户登录ID编号 | 无 |
用户登录名 | USER |
用户数据库ID编号 | 无 |
用户数据库名 | USER |
当前用户 | USER |
6聚合函数
函数 | Informix |
平均值 | AVG |
计数 | COUNT |
最大值 | MAX |
最小值 | MIN |
标准差 | STDDEV |
求和 | SUM |
方差 | VARIANCE |
全距 | RANGE |
7条件检验
Informix |
DECODE (test_value, expression1, value1 [[,expression2, value2] […]] [,default_value] ) CASE test_value WHEN expression1 THEN value1 [[WHEN expression2 THEN value2] [...]] [ELSE default_value] END CREATE VIEW STUDENT_GPA (SSN, GPA) AS SELECT SSN, ROUND(AVG(DECODE(grade ,'A', 4 ,'A+', 4.3 ,'A-', 3.7 ,'B', 3 ,'B+', 3.3 ,'B-', 2.7 ,'C', 2 ,'C+', 2.3 ,'C-', 1.7 ,'D', 1 ,'D+', 1.3 ,'D-', 0.7 ,0)),2) FROM GRADE GROUP BY SSN 或 CREATE VIEW STUDENT_GPA (SSN, GPA) AS SELECT SSN, ROUND(AVG(CASE grade WHEN 'A' THEN 4 WHEN 'A+' THEN 4.3 WHEN 'A-' THEN 3.7 WHEN 'B' THEN 3 WHEN 'B+' THEN 3.3 WHEN 'B-' THEN 2.7 WHEN 'C' THEN 2 WHEN 'C+' THEN 2.3 WHEN 'C-' THEN 1.7 WHEN 'D' THEN 1 WHEN 'D+' THEN 1.3 WHEN 'D-' THEN 0.7 ELSE 0 END),2) FROM GRADE GROUP BY SSN |
8将数值转换为不同数据类型
转换方式 | Informix |
从字符型到数字型 | CAST('10' AS number) '10'::number |
从数字型到字符型 | CAST(10 as char) 10::char |
从字符型到日期型 | CAST('97-JUL-04' AS datetime) '97-JUL-04'::datetime CASE('07-04-97' AS date) '07-04-97'::date |
从日期型到字符型 | CAST(CURRENT AS char) CURRENT::char |
从十六进制到二进制 | 无 |
从二进制到十六进制 | 无 |
9用户定义函数
Informix |
SELECT ssn, fname, lname, tuition_paid, tuition_paid/get_sum_major(major) as percent_major FROM student |
CREATE FUNCTION get_sum_major (inmajor varchar) RETURN NUMBER AS sum_paid number; BEGIN SELECT sum(tuition_paid) into sum_paid FROM student WHERE major = inmajor; RETURN(sum_paid); END get_sum_major; |
10比较运算符
Operator | Informix |
等于 | (=) |
大于 | (>) |
小于 | (<) |
大于等于 | (>=) |
小于等于 | (<=) |
不等于 | (!=,<>,^=) |
不大于,不小于 | 无 |
属于集合成员 | IN |
不属于集合成员 | NOT IN |
集合中的任意值 | ANY,SOME |
引用集合中的所有值 | != ALL,<> ALL,< ALL,> ALL,<= ALL,>= ALL |
样式相似 | LIKE |
样式不相似 | NOT LIKE |
x和y之间的值 | BETWEEN x AND y |
x和y之间的值 | NOT BETWEEN |
数值存在 | EXISTS |
数值不存在 | NOT EXISTS |
数值为空或非空 | IS NULL, IS NOT NULL |
11模式匹配
Informix | 其它 |
SELECT * FROM STUDENT WHERE LNAME MATCHES '[ABC]?' | SELECT * FROM STUDENT_ADMIN.STUDENT WHERE LNAME LIKE '[ABC]%' |
12字符串连接
Informix | 其它 |
SELECT FNAME||' '||LNAME AS NAME FROM STUDENT | SELECT FNAME +' '+ LNAME AS NAME FROM STUDENT_ADMIN.STUDENT |
13关键字
语句 | Informix SPL |
声明变量 | DEFINE DEFINE GLOBAL <variable> DEFINE GLOBAL <variable> DEFAULT <value> |
语句块 | BEGIN...END; |
有条件的处理 | IF…THEN, ELIF…THEN, ELSE END IF; |
无条件退出 | RETURN |
无条件退出到紧随当前程序块的语句 | EXIT FOR EXIT FOREACH EXIT WHILE |
重新开始WHILE循环 | CONTINUE |
等候指定间隔 | 无(dbms_lock.sleep) |
循环控制 | WHILE <condition> END WHILE FOR <condition> … END FOR; |
程序注释 | , -- |
打印输出 | 无 |
报告程序错误 | RAISE EXCEPTION |
执行程序 | EXECUTE |
语句终止符 | 分号(;) |
14声明变量
Informix |
DEFINE VSSN CHAR(9); VFNAME VARCHAR(12); VLNAME VARCHAR(20); VBIRTH_DATE DATE; VLOAN_AMOUNT NUMBER(12,2); |
15为变量赋值
Informix | 其它 |
LET variable = value | SET @variable = value |
从单一行中选取列数值的SELECT...INTO语法 | 指派文字值、涉及其它本地变量之表达式或单一行中列数值的SELECT @var=<expression> [FROM…]语法 |
无 | FETCH…INTO语法 |
下面提供一些语法示例。
DECLARE VSSN CHAR(9); DEFINE VFNAME VARCHAR(12); DEFINE VLNAME VARCHAR(20); BEGIN LET VSSN = '123448887'; SELECT FNAME, LNAME INTO VFNAME, VLNAME FROM STUDENTS WHERE SSN=VSSN; END;
16数据类型映射
Informix数据类型 | ODBC SQL数据类型 |
BYTE | SQL_LONGVARBINARY |
CHAR | SQL_CHAR |
DATE | SQL_TIMESTAMP |
DATETIME YEAR TO FRACTION(F) | SQL_TYPE_TIMESTAMP |
DATETIME YEAR TO DAY | SQL_TYPE_DATE |
DATETIME HOUR TO SECOND | SQL_TYPE_TIME |
DECIMAL | SQL_DECIMAL |
FLOAT | SQL_DOUBLE |
INTERVAL YEAR(P) TO YEAR | SQL_INTERVAL_YEAR |
INTERVAL YEAR(P) TO MONTH | SQL_INTERVAL_YEAR_TO_MONTH |
INTERVAL MONTH(P) TO MONTH | SQL_INTERVAL_MONTH |
INTERVAL DAY(P) TO DAY | SQL_INTERVAL_DAY |
INTERVAL DAY(P) TO HOUR | SQL_INTERVAL_DAY_TO_HOUR |
INTERVAL DAY(P) TO MINUTE | SQL_INTERVAL_DAY_TO_MINUTE |
INTERVAL DAY(P) TO SECOND | SQL_INTERVAL_DAY_TO_SECOND |
INTERVAL DAY(P) TO FRACTION(F) | SQL_INTERVAL_DAY_TO_SECOND |
INTERVAL HOUR(P) TO HOUR | SQL_INTERVAL_HOUR |
INTERVAL HOUR(P) TO MINUTE | SQL_INTERVAL_HOUR_TO_MINUTE |
INTERVAL HOUR(P) TO SECOND | SQL_INTERVAL_HOUR_TO_SECOND |
INTERVAL HOUR(P) TO FRACTION(F) | SQL_INTERVAL_HOUR_TO_SECOND |
INTERVAL MINUTE(P) TO MINUTE | SQL_INTERVAL_MINUTE |
INTERVAL MINUTE(P) TO SECOND | SQL_INTERVAL_MINUTE_TO_SECOND |
INTERVAL MINUTE(P) TO FRACTION(F) | SQL_INTERVAL_MINUTE_TO_SECOND |
INTERVAL SECOND(P) TO SECOND | SQL_INTERVAL_SECOND |
INTERVAL SECOND(P) TO FRACTION(F) | SQL_INTERVAL_SECOND |
INTERVAL FRACTION TO FRACTION(F) | SQL_VARCHAR |
MONEY | SQL_DECIMAL |
SERIAL | SQL_INTEGER |
SMALLFLOAT | SQL_REAL |
SMALLINT | SQL_SMALLINT |
TEXT | SQL_LONGVARCHAR |
VARCHAR | SQL_VARCHAR |
17外部联接
ODBC Extended SQL and SQL-92 | Informix | Microsoft SQL Server |
SELECT STUDENT.SSN, FNAME, LNAME, CCODE, GRADE FROM {oj STUDENT LEFT OUTER JOIN GRADE ON STUDENT.SSN = GRADE.SSN} | SELECT STUDENT.SSN, FNAME, LNAME, CCODE, GRADE FROM STUDENT, OUTER GRADE WHERE STUDENT.SSN = GRADE.SSN | SELECT STUDENT.SSN, FNAME, LNAME, CCODE, GRADE FROM STUDENT LEFT OUTER JOIN GRADE ON STUDENT |
18日期、时间与时间戳数值
SQL | Informix | Microsoft SQL Server |
SELECT SSN, FNAME, LNAME, BIRTH_DATE FROM STUDENT WHERE BIRTH_DATE < {D '1970-07-04'} | SELECT SSN, FNAME, LNAME, BIRTH_DATE FROM STUDENT WHERE BIRTH_DATE < '1970-07-04' | SELECT SSN, FNAME, LNAME, BIRTH_DATE FROM STUDENT WHERE BIRTH_DATE < '1970 |
19调用存储过程
Generic ODBC Extended SQL | Informix | Microsoft SQL Server |
{?=} call procedure_name[(parameter(s))]} SQLExecDirect(hstmt1,(SQLCHAR *)"{? = call owner.procedure(?)}", SQL_NTS); | SQLExecDirect(hstmt1, (SQLCHAR*)"{? = call STUDENT_ADMIN.P1. SHOW_RELUCTANT _STUDENTS(?)}", SQL_NTS); | SQLExecDirect(hstmt1, (SQLCHAR*)"{? = call STUDENT_ADMIN. SHOW_RELUCTANT _STUDENTS}", SQL_NTS); |
数据库维护
1数据库查询用户的建立
银行Informix_on_line数据库由于存储了储户的大量重要信息,为了数据库的安全性必需要对数据的操作有严格的规定,如进入on_line数据库要履行严格的手续,这在某些时候又给查找问题带来不便,因此有必要专门建立一个动态查询用户,该用户仅有对数据库的可读权限。
具体做法是:
1.建立查询用户,该查询用户应具有数据库使用的环境
2.将查询用户与数据库作连接(work用户为例)
ln-s/homel/work/homel/read(将查询用户read与数据库用户作连接);
3.由work用户使用数据库,将connect权限赋予read用户
grant connect to read;
4.对数据库中每一张表放select权给read用户
grant select on abc to read.(将select权限赋给read用户)
这样,以read用户注册,对数据库拥有了可读操作,给查找问题等带来方便。
2数据库一致性检查
a.以informix登录
b.将数据库状态置为off_line
onmode-ky
用onstat-检查数据库状态为off_line
c.将数据库状态置为单用户模式
onmode -s
用onstat-检查数据库状态为quiesent
d.检查数据库保留页状态
oncheck-cr 1>/tmp/oncheck.cr 2>&1
e.检查数据库目录页一致性
oncheck-cc 1 >/tmp/oncheck.cc 2>&1
f.检查数据库数据的一致性
oncheck-cD workdb 1>/tmp/oncheck.cd 2>&1
g.检查数据库索引的一致性
oncheck-cI workdb 1>/tmp/oncheck.ci 2>&1
h.检查/tmp下oncheck.cr,oncheck.cc,oncheck.cd,oncheck.ci文件,查看有无错误信息,如没有,则数据库状态正常,反之亦然。
i.将数据库状态置为online
onmode-m
用onstat-检查数据库状态为online
3数据库的备份与恢复
1.dbexport备份与dbexport恢复
dbexport备份是一文体文件备份,该备份将数据库中信息以文本文件方式保存,要注意的是,在备份时必须保证没有对数据库有访问者,否则做dbexport不会成功,dbexport备份的一般格式为(以数据库workdb为例)
dbexport workdb-d -s workdbs /path
2.dbimport恢复是将用dbexport备份的文件恢复到数据库中
a.停止一切数据库操作→删除数据库;
b.$dbimport workdb-d workdbs -i/path;
c.用工具onmonitor将参数TAPEDEV改为/dev/null;
d.ontap -s -u workdb.
e.检查workdb是否改为U状态.
f.将TAPEDEV值改回原先的值.
需要指出的是在dbimport恢复过程中,有大量的信息要写在逻辑日志文件中,采用上述方式,可避免写逻辑日志文件,加快dbimport的速度。
3.数据库的零级备份
数据库零级备份是重要的备份手段,日常一般用磁带备份,经常用于做重大操作之前的备份,数据往往需要恢复,而磁带上的零级备份数据由于数据量大,恢复起来花费时间较长,因此,可采用在硬盘上做零级备份的办法。
a.在硬盘上划一个足够大的空间,用于备份文件的存放。
b.用onmonitor将参数TAPEDEV改定指向零级备份文件。
如把/cs2000在作为零级备份文件oback的存放空间,可将参数改为TAPEDEV=/cs2000/oback,这样可做硬盘零级备份,备份恢复时间只是磁带机的1/6。在恢复过程中应该用tail -f online.log监控。恢复过程,一直到数据库状态变为online..
c.将参数TAPEDEV=/cs2000/oback改为TAREDEV=/dev/rmt/0m;
4数据库常见故障处理
1.检查:用onstat_-1检查逻辑日志的使用情况,是否中止进程,根据finder col.数据库故障的一般检查,首先要检查数据库状态,经常用onstat_de查找可能出现的错误,同时检查online.log是否报错。
2.数据库表的跟踪:遇到在对数据库表作大规模操作时,有时我们不知道对该表的操作是否得以在继续进行,因为isql进入,操作该表,数据库报“该表已被锁”信息,这时可用查询语句:
首先:set retrieved to drity read
然后:select count(*)from abc,
通过不断对abc表进入统计,如统计数在不断增加,则对该表的操作仍在进行,否则,以停止了对该表的操作。还有,当批量执行SQL命令,如update,……insert等时如不能成功执行,可采用增加判断条件,缩小范围的方法去执行,往往可以获得成功,遇有些语句涉及的记录在处理过程中被锁定,直到处理过程结束可能超过系统关于同时锁定界限,遇这种错误,可以在开始处理时锁定该表。
3.故障排除举例:
故障现象:在银行批量结息向结息数据表插入记录时出现informix sqlcode错误号为-239。
故障检查:经查,从现象看,似乎有重复记录插入表中,但经核查数据,可以肯定数据绝无重复记录,考虑到表文件长期使用,表文件的相关信息受到某种破坏,为此,做以下操作:
a.unload to “/tmp/abc.txt”select*from abc.卸出abc中全部数据;
b.drop table abc.(删除表文件abc);
c.create tabk abc
(abc_swo mteger;
abc_ano smallint)
…
);建立数据库表文件abc.
d.load form“tmp/abc.txt”insert into abc.
(将原数据装入表文件abc中)。
e.重新执行结息操作,新产生的结息数据顺利装入表文件abc中,故障得以排除。