.net vs怎么连接Informix数据库

.net vs怎么连接Informix数据库,第1张

在使用 ADO.NET 驱动程序之前,应该确保该驱动程序已安装并能正确运行。该驱动程序的当前版本可以使用 Informix Client Software Developer's Kit (SDK) 2.90 来安装。与以前的 2.81 版本不同,此 SDK 版本包括默认的 ADO.NET 驱动程序。SDK 的安装程序也会警告您有关事项。它并不真正在您的计算机上查找 .NET 框架的安装,只是警告您必须在安装 SDK 之前安装好 .NET 框架。如果您已经安装了 2.81 SDK,那么最好先卸载它。这两个版本无法共存。还要认识到的一点是,在将 2.90 ADO.NET 驱动程序添加到 Visual Studio Projects 中时,它会不正确地报告它自己是版本 2.81。

2.9 版本是在 2.81 版本之上的一次重要升级。它包括一个新的 IfxDataAdapter 向导、IPv6 支持和一些用于 Informix 数据类型(IfxDateTime、IfxDecimal、IfxBlob 和 IfxClob)的新类。该文档更为完善,内容总量是以前的两倍。

要点:IBM Informix ADO.NET 驱动程序并不仅仅包含在安装目录下的 /bin 目录下的 IBM.Data.Informix.dll 文件中。显然,它使用了由 SDK 安装的其他客户端代码。这意味着您必须在所有将使用 ADO.NET 驱动程序的机器上安装 Informix Client SDK。您不能只在您的发行版中包括 IBM.Data.Informix.dll。这对一些应用程序而言可能是一个严重的限制。您还需要仔细检查 SDK 安装程序 (SetNet32),以定义 Informix 数据源。

在将 ADO.NET 驱动程序用于连接之前,还必须运行一个叫做 cdotnet.sql 的存储过程。这个存储过程位于 SDK 安装的 /etc 目录中。这类似于设置 OLEDB 驱动程序的过程,尽管这个过程更短一些。这个过程记录在 User's Guide 中。(请参阅下面的 参考资料 部分。)

在完成安装之后,检查一下驱动程序,确保建立了连接。要在 Visual Studio 项目中使用 ADO.NET 驱动程序,则必须确保已将一个引用添加到客户端 SDK 安装的 /bin 目录中找到的 IBM.Data.Informix.dll 中。正确的 using 语句是:using IBM.Data.Informix。以下是一个演示如何获得到数据库的连接的简单方法:

清单 1. 到 Informix 数据库的连接

public void MakeConnection() {    string ConnectionString = "Host=" + HOST + " " +     "Service=" + SERVICENUM + " " +     "Server=" + SERVER + " " +     "Database=" + DATABASE + " " +     "User id=" + USER + " " +     "Password=" + PASSWORD + " "    //Can add other DB parameters here like DELIMIDENT, DB_LOCALE etc    //Full list in Client SDK's .Net Provider Reference Guide p 3:13    IfxConnection conn = new IfxConnection()    conn.ConnectionString = ConnectionString    try {        conn.Open()        Console.WriteLine("Made connection!")        Console.ReadLine()    } catch (IfxException ex) {        Console.WriteLine("Problem with connection attempt: "                          + ex.Message)    }}

示例代码中包括一个用于此功能的 BasicConnection 类。如您所见,ConnectionString 只是一个用于连接的分号分隔的参数列表。Open() 方法打开了到数据库的连接,如果连接失败,则抛出一个 IfxException。IfxException.Message 属性通常提供关于失败原因的合理数量的详细信息

基本命令

一旦建立了连接,就可以开始对数据库执行命令。要做到这一点,需要使用 IfxCommand 对象。IfxCommand 的构造函数接收一个字符串(SQL 命令文本)和一个 IfxConnection 作为参数。IfxCommand 对象有一系列的 Execute 方法,以便对数据库执行命令。要清除连接,可以使用 IfxConnection.Close() 方法。以下是执行某个不返回结果集的简单命令的例子。该命令可能是 insert、update 或 delete。

清单 2. 执行 insert、update 或 delete 命令

IfxCommand cmdcmd = new IfxCommand("insert into test values (1, 2, 'ABC')",conn)cmd.CommandTimeout = 200 //seconds to wait for command to finishtry {    int rows = cmd.ExecuteNonQuery()}catch (IfxException ex) {    Console.WriteLine("Error "+ex.Message)}

ExecuteNonQuery 以整数形式返回受命令影响的行数。您还可以构建参数化语句和查询,后面部分将对它们进行研究。注意 IfxCommand 的 CommandTimeout 属性。默认超时时间是 30 秒,尽管在文档中没有对此进行说明。除非更改此属性,否则运行 30 秒后,命令就会超时,并且将抛出一个异常。

下一个例子是执行一条 select 语句,并处理由数据库服务器返回的结果集。对于快速的、只向前通过结果的游标,可以使用由 ExecuteReader 方法返回的 IfxDataReader。不过,每个 IfxConnection 只可以有一个打开的 IfxDataReader。(这是一条 ADO.NET 限制,不是 Informix ADO.NET 驱动程序的特定限制。)

清单 3. 迭代通过 IfxDataReader

IfxCommand cmd = new IfxCommand("select * from test",bconn.conn)try {    IfxDataReader dr = cmd.ExecuteReader()    while (dr.Read()) {        int a = dr.GetInt32(0)        int b = Convert.ToInt32(dr["b"])        string c = (String)dr[2]    }    dr.Close()}catch (IfxException ex) {    Console.WriteLine("Error "+ex.Message)}

每一列都被作为一般的 Object 类型进行检索。正如代码所演示的,存在一些将列 Objects 转换为正确数据类型的方法。您可以使用 IfxDataReader 的 GetXxx 方法。对于每种数据类型,几乎都有相应的方法。GetXxx 方法将列数目作为一个参数。可以使用 IfxDataReader 的索引,通过列的名称来访问列。如果可能的话,.NET 框架的 Convert 函数可以将这些 Objects 转换为正确的类型。最后,可以根据列编号为这些列建立索引,并直接强制转换结果(对于某些类型)。

下一个例子将展示如何调用需要一个参数值的存储过程。

清单 4. 执行带有一个参数的存储过程

IfxCommand cmd = new IfxCommand("test_proc",conn)cmd.CommandType = CommandType.StoredProcedure //from System.Datacmd.Parameters.Add("in_parameter",2) //many ways to create thesetry {    cmd.ExecuteScalar()}catch (IfxException ifxe) {    Console.WriteLine("Error "+ifxe.Message)}

对于此 IfxCommand,必须将 CommandType 设置为来自 System.Data 中的 CommandType 枚举的 StoredProcedure 值。为了创建参数,可以使用 IfxCommand 的 Parameters.Add 方法。IfxCommands.Parameters 是一个集合,因此您可以添加您所需数量的参数。您可以使用任意 IfxParameter() 构造函数来创建参数,或者可以像上面这样简化参数的创建。不过要注意的是,每个 IfxParameter 都与一个特定的 IfxCommand 相关。您不能先创建 IfxParameters,然后在多个 IfxCommand 对象中使用它们。ExecuteScalar() 方法现在只返回 1。这一示例没有从存储过程返回任何东西。

要构建一个不执行存储过程的参数化 SQL 语句,需要将问号作为占位符插入 CommandText 中。例如:

清单 5. 参数化查询

IfxCommand insCmd = new IfxCommand("insert into clientstest "     + "(clientcode, clientacctname, primarycontact, primaddrcode, "    + "initialamt,createdate) values (0,?,?,?,?,TODAY)",conn)

按照 IfxParameter 对象在命令文本中的顺序,将这些对象添加到 IfxCommand 的 Parameters 集合中。在下面的扩展示例中的最终强类型化 DataSets 中,将进一步演示此技术。

强类型数据集

ADO.NET 包括一个叫做 DataSet 的专用数据库对象。它是一个内存数据库。DataSet 由一个或多个(由一些 DataRow 对象的)DataTable 对象组成。DataTable 可以通过主键和外键相关联。可以对数据设置一些约束。DataSet 也与实际的数据存储断开连接,可以通过一个或多个 DataAdapter(每个 DataTable 一个)来填充它,然后在内存中保存这些数据和所有更改。稍后,DataAdapter 可以将这些更改提交回数据存储。

基本的 DataSet 不是强类型的。它不知道数据库的实际行和列是什么。因此编译器没有检查这些列名称。直到运行的时候,列名称中的任何错误才会显现出来。此外,当开发者记不清列名是 "itemcode" 还是 "itemid" 的时候,他会发现基本的 DataSet 在这方面毫无帮助。

一个强类型的 DataSet 可以解决这些问题。而一个普通的 DataRow 却无法取代它,因为普通的 DataRow 只有一个(例如)作为 OrderDetailDataTable 一部分的 OrderDetailDataRow。您可以将这些列作为 OrderDetailDataRow 的实际属性 (row.ItemCode) 进行引用。用这种方式,可以提高 IntelliSense 的生产率。表名称和列名称在属性编辑器中也会变得有效,从而增强诸如数据绑定之类的设计人员级工具。

那么,怎样构建这个提高生产率的强类型 DataSet 呢?要花费如此多的时间或精力来构建一个您还没有体验到任何净生产效率的东西吗?Informix ADO.NET 驱动程序可能没有其他一些驱动程序那么复杂。Microsoft 的 SQLDataAdapter(用于 SQL Server)包括一个 Generate DataSet 向导。而 IfxDataAdapter 没有这样的向导。不过,您可以构建一些工具来帮助您,也可以使用一些已在 .NET 框架中构建的工具。最后,您将拥有封装所有数据库交互的强类型 DataSet 的一个子代。

.NET 框架包括一个 XSD 编译器 (xsd.exe),它可以从某个经过特殊格式化的 .xsd 文件中生成一个强类型 DataSet。但是,谁想键入一串 XML 呢?幸运的是,DataSet 对象包括一个叫做 WriteXmlSchema() 的方法。此方法允许您使用非类型化的 DataSet 为强类型 DataSet 创建 XSD 文件。让我们来看一下如何做到这一点。以下是一个示例表:

清单 6. Clientstest 表

CREATE TABLE clientstest (  clientcode SERIAL not null,  clientacctname CHAR(60) not null,  primarycontact CHAR(30) not null,  primaddrcode CHAR(10),  createdate DATE,  initialamt DECIMAL (18,0))    

以下是用于此表的单表 DataSet :

清单 7. 定义 DataSet

DS = new DataSet("dsClients")//main table definitionDataTable mainTable = new DataTable("clients")DataColumnCollection cols = mainTable.ColumnsDataColumn column = cols.Add("clientcode",typeof(Int32))column.AllowDBNull = falsecols.Add("clientacctname",typeof(String)).MaxLength = 60cols.Add("primarycontact",typeof(String)).MaxLength = 30cols.Add("primaddrcode",typeof(String)).MaxLength = 10cols.Add("initialamt",typeof(Decimal))cols.Add("createdate",typeof(System.DateTime))//primary keymainTable.PrimaryKey = new DataColumn[] {cols["clientcode"]}//add table to DataSetDS.Tables.Add(mainTable)//Write schema to fileDS.WriteXmlSchema("dsClients.xsd")

在这个定义中,可以在数据上设置类型和限制条件。还可以设置列名称。这些名称不必与数据库的列名称匹配。观察本文 下载 部分中的代码文件,以查看得到的 dsClients.xsd 文件。

为了使生成 XSD 文件(或者在发生更改后重新生成它)变得更容易,可以为这些 DataSet Builders 构建一个框架。(完成此任务所需的所有代码都包含在下面部分。)在想用该框架确定要构建哪些 Builders 时,可以使用反射来动态确定某一 Builders 是否是 DataSetBuilder。让我们从编写 IBuildable 接口开始。它定义了 DataSetBuilder 必须实现的属性和方法。

清单 8. IBuildable 接口

public interface IBuildable {    string FileName {get set}    string FilePath {get set}    Logger Log {get set}    DataSet DS {get set}    void BuildXSD()    void CompileXSD(string outputDirectory)}

常用命令oninit

系统从off-line模式变为on-line模式oninit -iy

(初始化数据库,删除所有dbspace和chunk)oninit -s(

脱机-->静态)onmode -ky offlineonmode -sgraceful shutdown-->quiescent(联机到静态,让用户处理完成)

onmode -u

immediate shutdown-->quiescent(联机到静态,所有用户立即终止)

onmode -m

quiescent--->onlineonmode -z sid 删除某session onmode -l 将当前正在使用的逻辑日志下移onmode -c

强制执行检查点 *** 作即onmonitor->force ckpt 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影响的dbspaceonstat -x查看事务onstat -k

显示所有活动的锁onstat -g sub_option 运行多线索选项

onstat -g ses/sql onstat -r <value>每隔<value>秒后重复选项 onstat -g act

显示系统中所有的活动线索 onstat -g ath -r 2 每隔两秒显示系统中所有的活动的线索 onstat -i 交互方式 >sql>sql sidipcs

查看共享内存情况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

extendoncheck -ceoncheck -cr reserved pagesoncheck -cd TBLspace data rows including bitmaponcheck -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 150002.

在datadbs这一个dbspace中增加一个chunk:(datadbs_chunk1)onspaces -a datadbs -p /home/informix/datadbs_chunk1 -o 0 -s 150003.将上述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)

p 卸载的步骤如下:用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) 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)锁定表格lock table tabname in exclusive mode

3)用SQL UNLOAD 将表格卸载到磁盘或磁带中unload to file_or_tape_path select * from tabnameunload to "/usr/data/unload/customer.unl" select * from customer

检查表中的行数(用SQL中的Table/Info命令),验证卸载是否成功。比较这个数与装入完成后SQL显示的消息。用此验证file_or_tape_path中的行数:wc -l file_or_tape_path

4)删除表格

5)用dbacess生产表格并运行tabname.sql。这时不要生成索引

6)用SQL的LOAD FROM 或用 dbload重新装入表格load from file_or_tape_path insert into tabnameload 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

语法 oninit [-s] [-i] [-p] [-y]

oninit 将系统从off-line模式变为on-line模式

oninit -s  将系统从off-line模式变为quiescent模式

oninit -i  初始化系统

oninit -p  在共享内

存初始化时,不搜索,删除临时表

oninit -y  对提示自动回答yes

oninit -v 加入这个选项显示oninit处理过程

oninit-- 键入此命令可以获得使用帮助

oninit命令用来改变系统的运行模式。其中-i选项用于初始化系统的root dbspace。注意,root-dbspace一旦被初始化,则等于整个数据库系统被初始化。

如果用户希望在计算机启动时自动自动启动动态服务器系统,请在系统初启文件(在许多UNIX系统中为/etc/rc)中加入oninit命令(不加任何选项)。

onmode 命令

语法: onmode [-k] [-m] [-s] [-u] [-y]

onmode -k 执行立即shutdown,将系统变为off-line模式

onmode -m 将系统从quiescent模式变为on-line模式

onmode -s 执行graceful shutdown

onmode -u 执行immediate shutdwon

onmode -y  对提示自动回答yes

onmode 命令同样用于改变动态服务器的运行模式。除了上述选项外,onmode还有很多与改变系统运行模式无关的选项。

利用onspaces命令创建数据空间

语法: onspaces -c [-b] [-d] [-z] [-m] [-o] [-p] [-s] [-t]

-c  创建blobspace或dbspace

-b blobspace blobspace名

-d dbspace dbspace名

-g page size  blobpages大小

-m mirror 镜像设备设的全路径名和偏移量(KB)

-o offset 偏移量(KB)

-p pathname   chunk设备的全路径名

-s sizedbspace大小(KB)

-t创建临时dbspace

onspaces 命令用于创建数据空间、临时空间和存储blob数据的空间(blobspace)。键入onspaces--可以获得该命令的联机帮助。

利用onstat -D或onstat -d可以看到系统中的关于数据空间的重要信息。包括:chunk的状态、空闲、每一chunk读写的次数。

系统中可能包括的多个系统空间,特别当进行数据分片后,我们建议用户最好能利用命令行来创建数据空间。

可以利用如下命令创建数据空间:

onspaces -c -d datadbs1 -o 0 -p /dev/rrvol3 -s 60000

可以用如下的方式创建临时数据空间:

onspaces -c -d tempdbs1 -t -o 0 -p /dev/rrvol5 -s 80000

在系统中,临时数据空间非常重要,通常情况下,应将多个临时数据空间分布在独立的物理设备上。

利用onspaces命令删除数据空间

增加或删除chunks

语法: onspaces -a -d [-m] [-o] [-p]

-a spacename  为dbspace新增chunk

-m pathname镜像设备的全路径名和偏移量(KB)

-o offset 主设备的偏移量(KB)

P>

-p pathname   chunk设备的全路径名

-s sizechunk大小

-d spacename  删除chunk

-o offset chunk设备的偏移量(KB)

onspaces不仅能创建数据空间还能删除数据空间、临时数据空间或存储blob数据的空间。在删除数据空间时,必须首先保证它是无用的,即该数据空间上无数据库或表。

如需删除数据空间,请键入如下命令:onspaces -d dbspace_name /blobspace_name

数据空间最初由一个chunk(first chunk)构成,一旦其空间用尽,用户必须追加chunk为了提高系统性能,用户在为数据空间分配chunk时需要计算以保证它的大小能适应未来的需要,否则在追加chunk的时候,它与先前的chunk在物理上不一定相邻,导致增加读取数据的时间。关于如何计算空间需求将在以后章节中阐述。利用 onspaces命令可以对数据空间增加或者删除chunk,除此之外,利用该命令还可以完成如下任务:启动镜像、中止镜像或改变chunk的状态。

例如可以用如下命令为数据空间增加chunk:

onspaces -a -d datadbs1 -0 60002 -p /dev/rrvol3 -s 60000

再如可以用如下方式从数据空间中删除chunk:

onspaces -d datadbs1 -o 60002 -p /dev/rrvol3 -s 60000

onparams 命令

语法:onparams -a -d -p [-d] [-s] [-l]

-a 新增逻辑日志

-d dbspace 指定日志存放的dbspace

-s size  新增逻辑日志的大小(KB)

-d 删除逻辑日志

-l logid 指定删除一个逻辑日志

-p 改变物理日志

-d dbspace 新物理日志存放的dbspace名

-s size物理日志大小(KB)

系统在初始化时自动地在root dbspace中创建逻辑日志和物理日志。在DBMS系统中,尤其在OLTP环境下,数据库的 *** 作非常频繁,日志中必须记录大量的信息,所以用户最好能将多个日志文件分布在不同的设备上。有一种非常简单的方法:即按所需大小创建逻辑日志,同时创建一个较小的物理日志,系统初始化完毕后,再将物理日志移至其它设备。关于如何确定所需的物理日志的大小,将在以后的章节详述。利用onstat -l命令可以看出系统中所有新增的逻辑日志被标识为A。这些逻辑日志只有在系统进行归档后才会真正被使用。为了激活这些逻辑日志有一种简单的方法:执行一次"伪"归档。具体步骤如下:将参数TAPEDEV设置为/dev/null然后运行一次ontape -s。也可以执行onbar -F命令。由于伪归档并不真正归档系统信息,所以千万要适时地对系统进行真正的归档 *** 作。

只有在逻辑日志真正无用时才能将其删除。利用onstat -l 可以看出所有的空闲日志被标记为F。如果逻辑日志中包含事务回滚或快速恢复所需的信息,该逻辑日志是不能被删除的。利用onstat -l命令可以看出接受当前事务的日志被标记为C。如果逻辑日志包括最后一个检查点记录,它也是不能被删除的,只有当检查点记录被写入下一个日志忠并且上一个日志被备份后,该日志才能被删除。利用onstat -l命令可以看出包含最后一个检查点记录的日志被标记为L。用户可以利用

onmode -c命令强制写检查点记录直至最后一个检查点记录被写入所要求的日志为止。

onstat 工具

显示动态服务器共享内存中的信息

涉及少量磁盘I/O *** 作

将对系统性能的影响极小

提供关于系统有价值得信息

命令行交互式监控系统

在本章中将讲解onstat 的各种重要选项,请熟悉它们的使用

onstat 命令是一种非常有用的系统实时监控工具。该命令直接从共享内存的数据结构中读取信息,报告当时的系统状况。通常onstat 命令不会进行磁盘I/O *** 作,也不会对系统资源加锁,所以它对系统性能的影响减少到最小。简言之,onstat是informix提供的一种交互式的系统监控工具。

onstat 的一些常用选项:

onstat -- 列出所有选项

onstat -i 设置进入交互模式

onstat - 显示运行模式和数据库引擎状态

onstat -g sub_option 运行多线索选项

onstat -r 每隔秒后重复选项

onstat -g act 显示系统中所有的活动线索

onstat -g ath -r 2 每隔两秒显示系统中所有的活动的线索

系统监控界面

sysmaster数据库在系统初始化时自动创建

数据库中包括指向系统共享内存结构数据字典信息

提供瞬时的系统性能和状态信息

提供SQL界面了解数据字典信息

允许管理员将系统管理工作自动化

用于执行重复性的监控任务

系统监控界面(system Monitoring Interface --SMI)是一种基于SQL的系统工具,

用户通过SMI可以非常方便地获取系统信息。系统在初始化时,自动地在root dbapace创建sysmaster系统数据库。

每一系统包括一个sysmaster数据库,该数据库中的大部分表为虚表,是指向共享内存中数据结构的指针。利用SMI可以自动监控系统,特别是在执行重复任务时。

sysmaster数据库是只读的,即不允许对其进行INSERT UPDATE,或DELETE *** 作。所有用户都拥有对该数据库的查询权限。

在系统初始化后,用户一定要注意检查sysmaster数据库是否建立成功。创建sysmaster数据库的信息都保存在消息日志文件中(online.log)请注意由于所有的DDL语句都将被记录在日志中,

所以一定要在日志文件中留出足够的空间以保证创建sysmaster所需。

sysmaster数据库模式记录在$INFORMIXDIR/etc/sysmaster.sql文件中。

oncheck 命令

检查动态服务器磁盘上的数据结构

定位并修补损坏的索引和数据

有磁盘I/O *** 作

一些 *** 作在处理时将在表上加锁

oncheck命令用于修复磁盘上损坏的索引和数据页,该命令也可用于检查并打印系统的数据结构。在使用oncheck时一定要当心,因为改命令的某些选项会对表加共享锁,例如:oncheck -pt

>

为防止对系统的损坏,系统会对所有共享内存中的数据进行一次一致性检查。一旦发现数据页出现一致性错误或发现索引错误,系统将把问题和可能的解决方案(利用oncheck)写入消息日志文件,并返回isam错误代码105。

如果发现一致性错误信息,用户应该立即关闭系统并按消息日志文件中的提示运行oncheck。如果oncheck运行失败,则应尝试卸出表再重新装入;如果是索引得问题,则应先删除索引再重建之。如果所有这些步骤都失败了,只有根据原有的系统归档备份来恢复系统。

下面的命令可以提供extend信息:

oncheck -pe

在onstat –l中,flag位表示了逻辑日志的状态,

A表示新加了还不能使用的日志

F表示空闲的可以使用的日志,一般是在0级备份之后才有这样的状态

U表示已经使用的逻辑日志

L表示当前的日志文件包含一个检查点

C表示正在使用当前的日志文件

B表示已经备份的日志文件

打开DbVisualizer软件,点击"Tools"菜单,选择"Connection wizard"选项,进入配置窗口"New Connection Wizard"

在"New Connection Wizard"窗口中,输入一个连接名称,可随意取名,之后点击"Next"

在"Select Database Driver"驱动选择步骤中选择Informix驱动,前提是在DbVisualizer安装目录下的lib目录有ifxjdbc.jar驱动包,没有可在网上下载。点击"Next"

在主设置界面设置数据库信息。从上至下依次为:

Database Userid 数据库连接名,必须设置

Database Passwoed 数据库连接密码,必须设置

Database Server数据库服务器IP,必须设置

Database Port 数据库服务器端口,必须设置

Database 数据库名,必须设置

Database Server数据库实例名,必须设置

在上一步的设置窗口中,点击"Ping Server"按钮,测试是否能ping通数据库服务器,测试通过则点击"Finish"完成按钮,失败则检查配置情况

6

配置通过后,在主界面的右侧则会显示出配置的连接,右键选择"Connect"则可连接到配置的数据库


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/9995283.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-04
下一篇 2023-05-04

发表评论

登录后才能评论

评论列表(0条)

保存