zoukankan      html  css  js  c++  java
  • sql server 与 informix的区别

    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型变量(具有精度和刻度)。 说明:不要使用floatreal型变量,因为可能出现四舍五入的情况(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中,故障得以排除。

  • 相关阅读:
    POJ 2342
    SHU 413
    SHU 414
    进制转换模板
    SHU 第15届上海大学程序设计联赛夏季赛[热身赛] 第三题(G题)
    POJ 3185
    XTU 1260
    高斯消元法模板
    POJ 2057
    模态窗口的定时关闭
  • 原文地址:https://www.cnblogs.com/nameliu/p/2818418.html
Copyright © 2011-2022 走看看