Informix Dynamic Server 11.50 基础考试 555 认证准备: 第 3 部分:DBMS 实例和存储对象
开始之前 关于本系列
这个免费的共包含 9 篇教程的 教程系列 的目的是为了帮助您准备 Informix Dynamic Server (IDS) 基础认证考试(555)。这个认证将考察关于 IDS 11.50 管理的入门级知识,包括基础 SQL、如何安装 IDS 11.50、如何创建数据库和数据库对象、安全性、事务隔离、备份和恢复流程,以及数据复制技术。这些教程为考试的每部分打下了坚实的基础。不过,您不能仅使用这些教程作为唯一的考试准备材料。
回页首 关于本教程
在本教程中,了解如何识别和连接到 Informix 数据库服务器和数据库。此外,还了解如何创建和配置数据库存储对象,以及系统数据库和系统目录表。
识别并连接到 Informix 数据库服务器和数据库
一台 UNIX® 或 Windows® 计算机可能同时运行多个 ISDN 实例。一个 IDS 实例(或数据库服务器)可以包含几个数据库。 要了解运行在计算机上的实例的细节,请运行命令: onstat –g dis
清单 1 提供来自 onstat –g dis 命令的示例输出。该输出结果显示一个 IDS 示例的信息。
清单 1. onstat –g dis 命令的示例输出 Server : mm11fc3hdr Server Number : 78 Server Type : IDS Server Status : Up
Server Version: IBM Informix Dynamic Server Version 11.50.FC3 Shared Memory : 0xa000000
INFORMIXDIR : /space/ifmx/11.50.FC3
ONCONFIG : /space/ifmx/11.50.FC3/etc/onconfig.mm_HDR1 SQLHOSTS : /space/ifmx/11.50.FC3/etc/sqlhosts Host : swanners
还可以连接到远程或本地数据库服务器。
当需要连接的应用程序和数据库服务器在同一台计算机上,该连接就是本地连接。当需要连接的应用程序和数据库服务器在不同的计算机上,该连接就是远程连接;客户机和服务器之间必须通过网络进行连接。
客户机应用程序和数据库服务器之间的本地连接可以通过 3 种方式实现: 通过共享内存消息系统。对于这种情况,客户机应用程序和服务器都连接到共享内存的相同部分。客户机应用程序和服务器之间相互交换信息。 通过流线连接。这是使用 UNIX 流的本地进程间通信方法。
使用套接字或 TLI 编程接口通过 TCP/IP 进行连接。当客户机应用程序和数据库服务器位于相同的计算机上时,IDS 将使用本地循环。
客户机应用程序和数据库服务器之间的远程连接仅能通过 TCP/IP 实现。 使用 TCP/IP 进行通信时,IDS 支持两种类型的接口: 套接字
传输层接口(TLI,Transport Layer Interface)
在 $INFORMIXDIR/release 目录中查看发布说明,以找到 IDS 针对您的平台支持的接口。针对 Windows 的网络编程接口是 WINSOC(套接字编程 Windows 接口)。
要指定应用程序用于连接到服务器的方法,必须添加 sqlhosts 信息,并设置一下配置参数和环境变量。
当应用程序试图与数据库服务器建立连接时,将需要一些基础的信息。在 UNIX 环境中,这些信息储存在 $INFORMIXDIR/etc/sqlhosts 文件中。对于 Windows,sqlhosts 信息保存在注册表中。Windows 服务文件为 C:\\WINNT\\System32\\drivers\\etc\\services。
运行应用程序的用户必须将 INFORMIXSERVER 环境变量设置为指向 sqlhosts 文件的条目的键名。
对于服务器连接,键名与 onconfig 文件中的 DBSERVERNAME 或 DBSERVERALIASES 配置参数的值一样。键名可以是 sqlhosts 文件中的任意唯一的名称。
当应用程序在 sqlhosts 文件中找到正确的条目时,它就获得了连接到数据库服务器所需的信息。
如果客户机应用程序和数据库服务器位于不同的计算机之上,您应该在两台计算机中都包含 sqlhosts 文件。这是必要的,因为数据库服务器需要 sqlhosts 文件来执行初始化处理。
客户机可以选择通过 INFORMIXSQLHOSTS 环境变量设置 sqlhosts 文件的路径名,以允许组具有可用于连接的服务器的不同视图。例如,IT 人员的 sqlhosts 文件应该包含生产和开发系统的条目。 UNIX/Linux 上的 sqlhosts 文件
图 1 展示了共享内存连接的示例 sqlhosts 文件:
图 1. 共享内存连接的示例 sqlhosts 文件
Dbservername 被设置为 onconfig 文件中的 DBSERVERNAME 配置参数的值或 DBSERVERALIASES 配置参数的值。DBSERVERNAME 配置参数只能有一个值。DBSERVERALIASES 配置参数最多可有 32 个服务器名。
它还对应于在启动客户机应用程序之前的 INFORMIXSERVER 环境变量的值。INFORMIXSERVER 值必须在 DBSERVERNAME 或 DBSERVERALIASES 配置参数中指定。
Nettype 在共享内存连接中设置为 onipcshm。 Hostname 设置为本地计算机的主机名。
Servicename 在 sqlhosts 文件中可以是唯一的,也可以是非唯一的。
servicename 用作指向数据交互共享内存的指针的名称。通常,servicename 和 dbservername 使用同一名称。 nettype 列
sqlhosts 文件中的第二个列是 nettype 列。nettype 列包含关于数据库服务器的类型以及如何进行连接的信息。
图 2. nettype 列
nettype 由 8 个分为 3 类的字母组成。前两个字母代表数据库服务器产品:
on 或 ol 用于 IDS。
se 用于 Standard Engine,它是另一个 IBM Informix 数据库产品。 dr 由 DRDA 用于 Informix Enterprise Gateway。
第二类的 3 个字母表示连接所用的编程接口:
ipc 用于进程间通信,并且仅适用于本地连接。 tli 用于传输层接口,这是一个 TCP/IP 编程接口。 soc 用于套接字,这是一个 TCP/IP 编程接口。
最后 3 个字母表示特定的协议或 IPC 机制:
shm 用于共享内存连接。 str 用于流线连接。 tcp 用于 TCP/IP 协议。 spx 用于 IPX/SPX 协议。
imc 用于 IBM Informix MaxConnect。
表 1 为各种通信方法提供一些样例 sqlhosts 文件条目:
表 1. 针对各种通信方法的 sqlhosts 文件条目
通讯方法 dbservername nettype Stream pipes sydney2 onipcstr TCP/IP sockets sydneysoc onsoctcp TCP/IP sydneytcp ontlitcp
Windows – sqlhosts 注册表
sqlhosts 注册表包含客户机应用程序在网络上找到并连接到 Informix 数据库服务器所需的信息。安装数据库服务器时,安装程序将在 Windows 注册表中创建以下键:HKEY_LOCAL_MACHINE\\SOFTWARE\\INFORMIX\\SQLHOSTS。数据库服务器的名称是 HKEY_LOCAL_MACHINE\\SOFTWARE\\INFORMIX\\SQLHOSTS 分支上的一个键。
对于每个键(在数据库服务器中定义),将提供以下子键: HOST:数据库服务器所在的计算机的名称。 OPTIONS:为指定连接提供更多灵活性。 PROTOCOL:识别连接所用的协议。
SERVICE:提供让指定的协议生效所需的细节。
hostname servicename sydney sydney2 sydney sydneysoc sydney sydneytcp
sqlhosts 注册表的位置:
安装数据库服务器时,您可以指定用于储存 sqlhosts 注册表的计算机的名称。
有两个选项可以选择:
安装数据库服务器的本地计算机。 网络中的另一台计算机,它作为共享储存库为网络中的多个数据库服务器提供 sqlhosts 信息。
您可以使用 INFORMIXSQLHOSTS 环境变量指定使用哪个机器为数据库服务器存储 sqlhosts 文件。如果您指定了共享 sqlhosts 注册表,那么必须在本地计算
机上将 INFORMIXSQLHOSTS 环境变量设置为储存注册表的 Windows 计算机的名称。
编辑或添加 sqlhosts 注册表:
您可以使用 SetNet32 应用程序编辑现有条目或为 sqlhosts 注册表添加新的条目:
1. 启动 SetNet32。如果不能从开始菜单找到 SetNet32,那么可以直接从 %INFORMIXDIR%\\bin\\setnet32.exe 启动该应用程序。 2. 单击 HOSTS 选项卡。
3. 根据需要输入或修改信息。
4. 单击 Apply 在 sqlhosts 注册表中输入信息。 5. 单击 Make Default Server 为用户将 INFORMIXDIR 设置为这个数据库服务器。 注意:这将修改 HKEY_CURRENT_USER\\Software\\Informix\\Environment 注册表。 您还可以使用注册表编辑器在 sqlhosts 注册表中创建或更改条目。
回页首
连接到本地数据库
本地数据库位于您登录的主机的 IDS 实例中。
您可以使用服务器内置的 DB-Access 实用程序连接到本地数据库。 要连接到本地数据库:
1. 登录包含您想访问的 IDS 实例的服务器。 2. 像前面小节一样设置环境变量。.
3. 输入命令 dbaccess 启动 DB-Access 实用程序。您将看到 DB-Access 的顶层菜单:
清单 2. 启动 DB-Access 实用程序
DBACCESS: Query-language Connection Database Table Session Exit
Use SQL query language.
------------------------------------------------ Press CTRL-W for Help --------
4. 使用左右箭头选择 Query-language 选项。然后,您将看到 Select Database 子菜单,从这里可以看到所有位于这个特定的 IDS 实例中的数据库:
清单 3. 选择 Database 子菜单 SELECT DATABASE >>
Select a database with the Arrow Keys, or enter a name, then press Return.
------------------------------------------------ Press CTRL-W for Help --------
stores_demo@mm11fc3hdr1
sysadmin@mm11fc3hdr1
sysha@mm11fc3hdr1
sysmaster@mm11fc3hdr1
syspgm4gl@mm11fc3hdr1
sysuser@mm11fc3hdr1
sysutils@mm11fc3hdr1
5. 使用箭头键选择您想要访问的数据库。在这个例子中,仅有一个用户创建的数据库(stores_demo)。选择它。 您可以看到数据库名(stores_demo)和您连接到的 IDS 实例
(mm11fc3hdr1),正如 INFORMIXSERVER 环境变量所定义的一样:
清单 4. 数据库名和 IDS 实例
SQL: New Run Modify Use-editor Output Choose Save Info Drop Exit
Enter new SQL statements using SQL editor.
----------- stores_demo@mm11fc3hdr1 ------------ Press CTRL-W for Help --------
通过在不同菜单选项之间进行选择,您可以在该数据库中执行的操作包括: 在数据库中查看表的列表(Info 选项) 删除数据库(Drop 选项)
打开 vi 编辑器,以编写和执行 SQL
回页首
连接到远程数据库
远程数据库位于您登录的计算机之外的计算机中的 IDS 实例上。 使用 DB-Access 进行连接
假设您连接到名为 swanners 的计算机上,并且希望在包含名为 tcp_1001 的数据库服务器的 mm11fc3hdr1 计算机上查询 stores_demo 数据库。名为
sqlhosts 的计算机上的 sqlhosts 文件必须包含针对数据库服务器 tcp_1001 的条目:
表 2. sqlhosts 条目
Dbservername Nettype tcp_1001 ontlitcp
Hostname millie Servicename 1906
注意:作为 servicename 的代替办法,您可以输入与 /etc/services 文件中的 dbservername 对应的端口号。
通过 DB-Access 在另一台计算机上查询数据库的语法是:database@server:[owner.]table。
清单 5. 在 DB-Access 会话中查询远程数据库的样例语法
SQL: New Run Modify Use-editor Output Choose Save Info Drop Exit
Run the current SQL statements.
----------------------- my_db2@mm11fc3hdr1 ----- Press CTRL-W for Help --------
select * from stores_demo@tcp_1001:state;
清单 5 中的 SQL 语句将从服务器上的 stores_demo 数据库中的 state 表选择 dbservername tcp_1001。 从 Windows 客户机连接到远程服务器
您需要在客户机上安装驱动程序才能与 IDS 服务器通信。最简便的方法是在客户机上安装 IBM Informix Client SDK (CSDK)。然后,您可以使用 CSDK 中内置的 ILogin 实用程序测试连接。
现在给出在 Windows XP 客户机上安装和测试连接的示例步骤: 1. 在客户机计算机上安装 CSDK。
2. 运行 Setnet32 实用程序(随 CSDK 安装)。 3. 选择 Environment 选项卡。 您将看到类似于图 3 的屏幕:
图 3. Setnet32 – Environment 选项卡
4. 确保 INFORMIXDIR 环境变量设置为在客户机计算机上安装 CSDK 的位置。
如果有必要的话,可以在这个步骤中编辑 INFORMIXDIR。为此,打开 Control Panel 并选择 System > Advanced > Environment Variables。 5. 确保 INFORMIXSERVER 环境变量设置为一个数据库服务器名称,该名称是服务器的 onconfig 文件中的 DBSERVERNAME 或 DBSERVERALIASES 配置参数的值。此外,还有确保这个名称对应于服务器上的 sqlhosts 文件中的一个 tcp 连接(例如,ontlitcp)。 表 3 包含了服务器上的样例 sqlhosts 条目:
表 3. 样例 sqlhosts 条目
Dbservername Nettype Hostname Servicename ids11uc2_cdr1tcp ontlitcp Swanners ids11uc2_cdr1tcp
如果您错误地将 INFORMIXSERVER 设置为共享内存连接(比如表 3 中的
ids11uc2_cdr1),那么将得到一个 25596 错误:INFORMIXSERVER 值没有在 sqlhosts 文件或注册表中列出。
6. 在服务器和客户机的服务文件上添加相同的条目。在 Windows XP 客户机上,服务文件为 C:\\WINDOWS\\system32\\drivers\\etc\\services。 所以,在这个例子中,该文件需要包含以下行: ids11uc2_cdr1tcp
7. 在 Setnet 32 Server Information 选项卡上输入以下字段:
o IBM Informix Server(例如,ids11uc2_cdr1tcp)。 o HostName:服务器所在的计算机(例如,swanners)。 o Protocolname:任何 tcp 连接协议。ontlitcp 协议不是下拉列表
中的选项;不过 onsoctcp 能够正常工作。
o Service Name:应该对应于客户机和服务器(ids11uc2_cdr1tcp)
的服务文件中的条目,或相应的端口号。
图 4. Setnet32 – Server Information 选项卡
32012/tcp
8. 在 Host Information 选项卡上输入以下字段:
o Current Host(例如,swanners) o User Name:informix
o Password Option:Password
o Password:[password for informix]
图 5. Setnet32 – Host Information 选项卡
现在,您可以使用 ILogin 实用程序测试连接:
1. 打开 ILogin 并选择 File > Run。您将看到类似于图 6 的屏幕,在这里可以输入以下登录参数:
o Server:ids11uc2_cdr1tcp
o Stores Database:stores_demo
图 6. Login Parameters
2. 单击 OK。您将看到查找到的客户记录列表,如图 7 所示:
图 7. ILogin - Output
现在,您可以确保客户机能够连接到数据库。
要更多地了解使用 Setnet32 实用程序的信息,请参考手册 “Configure IBM Informix Client products on Windows systems”(见 参考资料)。 JDBC 连接字符串
清单 6 提供了一个 JDBC 连接字符串,Java 代码必须通过它才能连接到 IDS 数据库:
清单 6. 样例 JDBC 连接字符串
Connection conn = DriverManager.getConnection ( \"jdbc:informix-
sqli://millie:8003/test:INFORMIXSERVER=tcp_940;user=informix;password=mypassword\");
millie 是您连接到的主机名。 8003 是端口。
tcp_940 是数据库服务器名。
informix 是您以其身份进行连接的用户。 mypassword 是密码。
创建和配置数据库储存对象
IBM Informix Dynamic Server 提供两个数据存储选项:
原始设备,这是一个允许数据库服务器使用非缓冲磁盘访问的特殊设备。 cooked 文件,这是一个由操作系统管理的常规文件。当数据库服务器控制该文件的内容时,它必须向操作系统发出 I/O 请求。
准备原始设备
遵循以下步骤准备一个可供 IDS 使用的原始设备:
1. 在磁盘上创建一个新的(或使用一个空闲的)分区。
2. 将文件权限设置为 660 (rw-rw----):chmod 660 device_name。 3. 将文件的组设置为 informix:chgrp informix device_name。
4. 将文件的所有者设置为 informix:chown informix device_name。 要创建原始设备,请参考 UNIX 系统的系统管理手册。
如果您要对现有的磁盘进行重新分区,建议您在卸载设备之前存档数据,然后在执行重新分区。
以千字节为单位表示每个原始设备的大小。您在创建块(chunk)时需要使用该信息。
要准备在数据库服务器中使用的原始设备,请按照以上的步骤 2、3 和 4 中的命令设置权限、归属和组。
注意:不要执行 mount 命令,它将装载设备并指示操作系统与设备进行交互。另外,也不要使用 mkfs 命令,它将在设备上构造一个文件系统。如果您在 IDS 正在使用的原始设备上运行 mkfs,那么将损坏数据库信息。
要在原始设备上划分块时,请通过链接为设备分配一个更具描述性的名称(例如,/dev/ifmx-raw-001)。这将有助于记住对每个块使用的设备名,更重要的是,这样做允许您在遇到磁盘设备失败时为新的设备重新定义一个链接。 清单 7 提供一个示例会话,其中准备了一个用作 Dynamic Server 块的原始设备:
清单 7. 准备原始设备的示例会话
$ ln /dev1/rxy0f /dev/informix-raw-001
or: ln -s /dev1/rxy0f /dev/informix-raw-001 $ chmod 660 /dev/informix-raw-001
$ chgrp Informix /dev/informix-raw-001 $ chown Informix /dev/informix-raw-001 $ ls -lg /dev/informix-raw-001
crw-rw---- 2 informix informix 9, 5 Jan 1 12:00 /dev/informix-raw-001
回页首
创建 cooked 文件
遵循以下步骤创建可供 IDS 使用的 cooked 文件:
1. 创建一个文件以供使用:touch filename。
2. 将该文件的权限设置为 660 (rw-rw----):chmod 660 filename。 3. 将该文件的组设置为 informix:chgrp informix filename。 4. 将文件的所有者设置为 informix:chown informix filename。 我们不推荐对块使用 UNIX 文件,尤其是您的系统可以利用内核 AIO 时。不过,设置 cooked 文件非常容易,并且不需要了解磁盘设备的可用性。如果您希望对块使用 UNIX (cooked) 文件,则必须为块设置一个文件。
使用以上步骤 1 的命令,将 filename 替换为 cooked 文件的名称。然后,使用步骤 2、3 和 4 中的命令更改文件的权限和归属。
清单 8 提供了一个示例会话,其中创建了一个 cooked 文件:
清单 8. 创建 cooked 文件的示例会话 $ touch /dev/informix-cooked-001 $ chmod 660 /dev/informix-cooked-001
$ chgrp informix /dev/informix-cooked-001 $ chown informix /dev/informix-cooked-001 $ ls -lg /dev/informix-cooked-001
-rw-rw---- 1 informix informix 0 Jan 1 12:00 /dev/informix-cooked-001
在初始化之前,出现在组名之后的 length 字段显示的值为 0。
到目前为止,您不需要为该文件分配空间。当您把块分配给服务器并指定块的大小时,服务器将 cooked 文件的大小增加到您指定的大小,从而给该块分配空间。
回页首 磁盘组件 - 块
服务器不使用 UNIX 文件系统进行磁盘空间管理,它使用自己的机制管理磁盘空间 —— 这些机制更适合用于数据库管理。
必须让服务器可以使用物理空间。分配空间的单位为块。
块是分配给服务器使用的连续磁盘空间单元;服务器在块中管理空间的使用。块可以是一个 UNIX 原始设备,或是 UNIX cooked 文件。 通常通过一些项来唯一地识别块: 绝对路径名 偏移量
它可以是:
原始磁盘 cooked 文件
它被指定了以千字节为单位的大小,并且由服务器在内部进行管理。
图 8. 块
在 Windows 系统上,块可以是 NTFS 文件或原始磁盘空间。它由服务器在内部进行管理。我们不推荐在 Windows 上使用原始磁盘(未格式化分区),因为不希望在 Windows 系统上使用原始磁盘的用户可能错误地对其执行格式化操作。
回页首 磁盘组件 - 页
当给数据库服务器分配了块之后,块将被分成更小的单元页。页是 IDS I/O 的最基本单元。服务器上的所有数据都储存在页上。例如,如果您要储存数据库表的一个行,那么就要把该行的数据储存在页上。页具有内部结构,并且有多个不同类型的页。
页是对磁盘执行读写操作的最小 I/O 单元。当将数据从磁盘读取到共享内存的缓存时,储存数据的整个页都被读取到缓存中。
在 IDS 10.0 之前,服务器系统的页大小由在特定计算机上建立的端口决定。最常见的页大小为 2KB,尽管有些系统使用 4KB 的页。
在 IDS 10.0 之后,您可以为新的非根 dbspaces 指定非默认的页大小。页大小的范围是 2K 到 16K,并且必须是所在平台的默认页大小的倍数。
图 9. 页
回页首
磁盘组件 - dbspace
dbspace 是块的逻辑集合。每个 dbspace 最初至少必须包含一个块。 在必要时,可以给 dbspace 分配多个块。如果特定的 dbspace 的空间耗尽了(因为分配给它的所有块都填满数据了),还可以向它添加额外的块。
图 10. dbspace
可以在特定的 dbspace 中创建数据库和表。这意味着数据库和表的最大大小不能超过它们所在的 dbspace 的可用空间。您不能控制在哪个块中创建数据库或表。如果您想要确保在特定物理设备上创建表或数据库,那么您必须将位于该设备中的块分配给 dbspace。
注意:每个服务器系统至少必须有一个 dbspace —— 根 dbspace。根 dbspace 用于储存所有控制服务器的重要系统信息。
回页首
磁盘组件 - tblspace
tblspace 是为特定的表分配的所有页的逻辑集合。否则,如果表储存在多个 dbspace 时,表的片段被分散在 dbspace 中。
tblspace 表示的空间不一定是相邻的;页可以分布在一个块中,或者某个表的页可以分布在不同的块中。
图 11. tblspace
您可以将 dbspace 和 tblspace 看作物理空间的逻辑分组。
dbspace 是物理块的逻辑分组。块可以位于不同的磁盘上,尽管它们都属于相同的 dbspace。
tblspace 是区段的逻辑分组。tblspace 中的区段可以位于不同的块上(因此也可以位于不同的磁盘上)。
图 12. 逻辑分组:dbspace 和 tblspace
回页首
特殊数据类型 —— 简单大对象
简单大对象是指任意值和任意长度的字节流。一个简单的大对象可能是数字化图像或音频,或者是对象模块或源代码文件。
能够在计算机的文件系统储存的东西都可以储存在简单大对象中。简单大对象的理论极限是 2GB;这个大小基于 4 个字节的整数能够容纳的最大值。 有两种类型的简单大对象:TEXT 和 BYTE。TEXT 数据类型用于储存可打印的 ASCII 文本,比如源代码和脚本。BYTE 数据类型用于存储任何二进制数据,比如保存的电子表格、程序加载模块和数字化图像或音频。
回页首
磁盘组件 – blobspace
blobspace 是一种特殊的 dbspace,用于储存简单简单大对象。它具有以下特征: 仅能用于储存简单大对象的磁盘池。 至少包含一个块。 可以包含多个块。
可以包含来自任意列、表和数据库的简单大对象。
图 13. blobspace
回页首
特殊数据类型 —— 智能大对象 智能大对象包括:
CLOB 和 BLOB 内置类型:CLOB 和 BLOB 类型是用户定义的用于储存大量数据的数据类型。这些类型在数据库中自动创建,并存储在 sysxtdtypes 目录中。 第三方索引:第三方应用程序可能使用智能大对象来为索引储存数据。该索引仅能由创建它的 DataBlade 模块操作。
用户定义数据类型(UDT):智能大对象为大型的用户定义数据类型提供理想的储存方法。
回页首
磁盘组件 - sbspace
subspace 是块的逻辑集合。它有以下特征:
它是一个磁盘空间池,服务器创建的表可以使用它储存智能大对象。 至少包含一个块。 可以包含多个块。
图 14. subspace
与 Informix Dynamic Server 中的其他存储空间一样,subspace 由一个或多个块组成。不过,subspace 的主块的架构更加复杂。该架构将在后面的模块中描述。
subspace 有时用于储存称为智能 LO 或智能 blob 的智能大对象。
回页首
使用命令行创建存储对象
可以使用 onspaces 实用程序从系统命令行在服务器中创建 dbspace、blobspace、sbspace 或临时 dbspace。 使用 onspaces 创建 dbspace
表 4 列出了使用 onspaces 实用程序创建 dbspace 的参数:
表 4. 使用 onspaces 实用程序创建 dbspace 的参数
参数 操作 -c 创建一个 dbspace -d spacename 创建 dbspace 的名称
新的 dbspace 的非默认页大小(必须在 2K 至 16K 之间,并
-k pagesize
且必须是默认页大小的倍数)
-m pathname
映像路径名和偏移量
offset -o offset 设备占用初始块的偏移量,以千字节为单位 -p pathname 初始块的磁盘分区或设备名
-s size -t
初始块的大小,以千字节为单位
表示创建的 dbspace 是一个临时 dbspace
下面的示例命令为第一个块创建一个大小为 2GB 名为 dbspace3 的 dbspace,其偏移量为 100,000 千字节:
onspaces -c -d dbspace3 -p /dev/rdsk/device1 -o 100000 -s 2000000
要创建大小为 800,000KB 并且包含 100,000 千字节偏移量的名为 tempdbs1 的 dbspace,可以使用以下命令:
onspaces -c -t -d tempdbs1 -p /dev/rdsk/device9 -o 100000 -s 800000
使用 onspaces 创建 blobspace
表 5 列出了使用 onspaces 实用程序创建 blobspace 的参数:
表 5. 使用 onspaces 实用程序创建 blobspace 的参数
参数 操作
-c 创建一个 blobspace 或 dbspace -b spacename 将要创建的 blobspace 的名称 -g blobpagesize blobpage 的大小,以磁盘的页数为单位 -m pathname offset 映像路径名和偏移量 -o offset 初始块的偏移量,以千字节为单位 -p pathname 初始块的设备或文件名 -s size 初始块的大小,以千字节为单位
以下示例命令创建一个大小为 1GB 名为 blobspace2 的 blobspace,其偏移量为 100,000KB,blobpage 为 1000KB(2K 系统页面大小): onspaces -c -b blobspace2 -g 500 -p /dev/rdsk/device8 -o 100000 -s 1000000
使用 onspaces 创建 sbspace
表 6 列出了使用 onspaces 实用程序创建 sbspace 的参数:
表 6. 使用 onspaces 实用程序创建 sbspace 的参数
参数 操作
-c 创建一个 sbspace
-S spacename 将要创建的 sbspace 的名称 -m pathname
映像路径名和偏移量
offset -o offset 初始块的偏移量,以千字节为单位 -t 将 sbspace 创建为临时 sbspace -p pathname 初始块的设备或文件名 -s size 初始块的大小,以千字节为单位
-Ms metasize sbspace 元数据区域的大小,以千字节为单位
-Mo metaoffset sbspace 中的元数据区域的偏移量,以千字节为单位
为储存在 sbspace 中的智能大对象指定不同的默认储存特
-Df options
征和其他属性
以下示例命令创建一个大小为 5GB 名为 sbspace4 的映像 sbspace,针对主块和映像块的偏移量为 300,000KB,元数据大小为 150,000KB 并且带有 10,000KB 的偏移量,以及包含一个大小为 32KB 的智能 blob: onspaces -c -S sbspace4 -p /dev/rdsk/device5 -o 300000 -s 5000000 -m /dev/rdsk/device6 300000 -Ms 150000 -Mo 10000 -Df \"AVG_LO_SIZE=32\"
使用 onspaces 删除空间
可以使用 onspaces 实用程序从命令行删除 dbspace、临时 dbspace、blobspace 或 sbspace。
删除不再使用的 dbspace、blobspace 或 sbspace。
在删除 dbspace 之前,您必须先删除在该 dbspace 中创建的所有数据库和表。 在删除 blobspace 之前,您必须先删除包含引用 blobspace 的 TEXT 和 BYTE 列的所有表。
要删除 dbspace dbspace3,发出以下命令: onspaces -d dbspace3
要删除包含数据的 sbspace,使用 -f (force) 选项:
onspaces -d sbspace2 -f
向 dbspace 或 blobspace 添加块
您可以使用 onspaces 向 dbspace 或 blobspace 添加块。表 7 列出了使用 onspaces 实用程序向 dbspace 或 blobspace 添加块的参数:
表 7. 使用 onspaces 实用程序向 dbspace 或 blobspace 添加块的参数
参数 操作
-a spacename 向指定的 dbspace 或 blobspace 添加块 -m pathname offset 映像路径名和偏移量 -o offset 初始块的偏移量,以千字节为单位 -p pathname 块的设备或文件名 -s size 块的大小,以千字节为单位
以下的示例命令为 dbspace1 添加大小为 5GB 的映像块,针对主块的偏移量大小为 500,000KB,针对映像块的偏移量大小为 200,000KB: onspaces -a dbspace1 -p /dev/rdsk/device2 -o 500000 -s 5000000 -m /dev/rdsk/device5 200000
向 sbspace 添加块
表 8 列出了使用 onspaces 实用程序向 sbspace 添加块的参数:
表 8. 使用 onspaces 实用程序向 sbspace 添加块的参数
参数 操作
-a spacename 向指定的 sbspace 添加块 -m pathname offset 映像路径名和偏移量 -o offset 新块的偏移量,以千字节为单位 -p pathname 新块的设备或路径名 -s size 新块的大小,以千字节为单位
在新块中分配的 sbspace 元数据区域的大小,以千字节为
-Ms metasize
单位
-Mo metaoffset 新块的元数据区域的偏移量,以千字节为单位 -U 表示新块仅包含用户数据
以下示例命令为名为 sbspace6 的 sbspace 添加一个大小为 7GB 的映像块,针对主块和映像块的偏移量都为 50,000KB,元数据的大小为 10,000KB 并且带有 5000KB 的偏移量:
onspaces -a sbspace6 -p /dev/rdsk/chunk7 -o 50000 -s 7000000 -m /dev/rdsk/chunk6 50000 -Ms 10000 -Mo 5000
要让该块仅用于储存用户数据,请指定 -U 选项(省略 -Ms 或 -Mo 选项)。 使用 onspaces 删除块
可以使用 onspaces 实用程序删除 dbspace、sbspace 或 blobspace 中的块。表 9 列出了使用 onspaces 实用程序删除块的参数:
表 9. 使用 onspaces 实用程序在存储空间中删除块的参数
参数 操作
-d space_name 删除指定的 dbspace、blobspace 或 sbspace 中的块 -o offset 块的偏移量,以千字节为单位 -p pathname 块设备或文件的路径名
您可以使用 onspaces 删除任何 dbspace、sbspace 或 blobspace 中的非初始块。
以下命令从 dbspace2 删除偏移量大小为 15,000KB 的块: onspaces -d dbspace2 -p /dev/rdsk/chunk3 -o 15000
注意,不能以这种方式删除 dbspace、sbspace 或 blobspace 中的初始块。您必须删除存储空间本身。 重命名 dbspace
如果您正在重新组织现有的 dbspace 或觉得有必要更改 dbspace 的名称,那么可能希望重命名标准的 dbspace。重命名 dbspace 操作仅更改 dbspace 的名称,不会重新组织数据。
重命名 dbspace 时,服务器必须处于 quiescent 模式。
不能重命名关键的 dbspace,比如根 dbspace 或包含物理或逻辑日志的 dbspace。
在重命名 dbspace 之后,您应该执行 level-0 存档。
您可以使用以下语法重命名 dbspace:
onspaces -ren old_dbspacename -new new_dbspacename
回页首
使用 OpenAdmin Tool 管理空间
您可以使用 OpenAdmin Tool for IDS (OAT) 管理储存空间。 使用 OAT 添加 dbspace、blobspace 或 sbspace
您可以使用 OAT 添加 dbspace、临时 dbspace、blobspace 或 sbspace。 为此,导航到 Space Administration > DBSpaces。输入空间名、路径、偏移量、大小、类型(DBSpace、Temp DBSpace、Blobspace 或 SBSpace)和页大小,然后单击 Create:
图 15. 使用 OAT 添加 dbspace
(查看图 15 的 大图)。 使用 OAT 添加块
您可以使用 OAT 向现有的 dbspace、blobspace 或 sbspace 添加块。 为此,导航到 Space Administration > DBSpaces。单击需要向其添加块的 dbspace、blobspace 或 sbspace 的名称。单击 Admin 选项卡,从这里可以看到用于添加块的选项:
图 16. 使用 OAT 添加块
(查看图 16 的 大图)。 使用 OAT 删除 dbspace
导航到 Space Administration > DBSpaces。单击需要删除的 dbspace、
blobspace 或 sbspace 的名称。单击 Admin 选项卡,从这里可以看到删除空间的选项:
图 17. 使用 OAT 删除空间
(查看图 17 的 大图)。
OpenAdmin Tool 是一个开源产品,可以在线下载(参见 参考资料)。
回页首
使用 SQL Administration API 管理空间
SQL Administration API 允许您使用内置的 admin() 和 task() 函数远程执行管理任务,它是通过模拟各种 IDS 管理命令行实用程序的 EXECUTE FUNCTION SQL 语句来完成的。
task() 和 admin() 函数提供相同的功能;它们的唯一区别是返回代码不同。task() 函数返回描述命令的结果的字符串。admin() 函数返回一个整数。 使用 admin() 函数创建 dbspace 您可以使用 admin() 函数创建 dbspace。
以下示例命令创建了一个名为 mydbspace 的 dbspace,其大小为 30000KB,块偏移量为 0:
execute function admin(\"create
dbspace\\"30000\
使用 admin() 函数创建 blobspace
您可以使用 admin() 函数创建 blobspace。
以下示例命令创建了一个名为 myblobspace 的 blobspace,其大小为 10,000KB,偏移量为 0,带有一个大小为 4 页的 blob 页:
execute function admin(\"create
blobspace\\"10000\
使用 admin() 函数创建 sbspace 您可以使用 admin() 函数创建 sbspace。
以下示例命令创建一个名为 mysbspace 的 sbspace,其大小为 15,000KB,块偏移量为 100KB:
execute function admin(\"create
sbspace\\"15000\
使用 admin() 函数向 dbspace、blobspace 或 sbspace 添加块 您可以使用 admin() 函数向 dbspace、blobspace 或 sbspace 添加块。 使用该函数添加块受到以下:
块的大小必须大于等于 1000KB,并且必须是页大小的倍数。 开始偏移量和块大小之和不能超过块的最大大小。 最大偏移量为 4TB。
以下示例命令向名为 data1space 的 dbspace 添加了一个大小为 10,000KB 偏移量为 0 的块: execute function
admin(\"add
chunk\0\");
使用 admin() 函数删除块、dbspace、blobspace 或 sbspace 您可以使用 admin() 函数删除块、dbspace、blobspace 或 sbspace。 以下示例命令删除一个名为 myblobspace 的 blobspace: execute function admin(\"drop blobspace\
以下示例命令仅从名为 data1space 的 dbspace 删除路径名为 /space/ifmx/11.50.UC5_CDR1/datachunk2、偏移量为 0 的块:
execute function admin(\"drop
chunk\
系统数据库和系统目录表
数据库服务器第一次上线时,将创建 sysmaster、sysutils、sysuser 和 sysadmin 数据库。
这些是 IDS 使用的系统或内部数据库。
像用户创建的数据库一样,这些数据库包含系统目录表。 系统目录表
系统目录表跟踪数据库对象,比如:
表、视图、序列、同义词、序列对象 列、、索引和片段 触发器
过程、函数、例程和关联消息 授权用户和 用户定义例程
数据类型转换 聚合函数
访问方法和操作符类 继承关系
外部优化器指令
数据库中的系统目录表之一就是 systables 表。这个表列出数据库中包含的所有表。systables 表中包含的每个表都是使用唯一 tabid 标识的。每个系统目录表都有一个小于 99 的 tabid。
要查看数据库中的系统目录表,可以运行以下 SQL 语句: database stores_demo;
select * from systables where tabid < 99;
sysadmin、sysutils 和 sysuser 数据库
sysadmin 数据库包含储存任务属性的表。它允许数据库管理员调度管理任务的运行。
sysutils 数据库包含 ON-Bar 备份和恢复实用程序使用的表。
sysuser 数据库用于服务器之间通信的 PAM(Pluggable Authentication Module)身份验证。 sysmaster 数据库
如果不能够创建 sysmaster 数据库,数据库服务器将在每次上线时尝试创建它。 sysmaster 数据库包含执行共享内存结构的数据词典信息。sysmaster 数据库中的表称为 SMI (system-monitoring interface) 表。
系统监控接口 (SMI) 表是由包含关于数据库服务器状态的动态信息的数据库服务器管理的特殊表。
大部分 SMI 表都不包含数据;SMI 表的数据词典结构指向共享内存。 当在一个常规表上执行 SELECT 语句时,服务器将为表读取数据词典信息,以查找该表的分区号和其他信息。如果相关信息不在缓冲池中的话,服务器将从磁盘读取数据。
当在 SMI 表上执行 SELECT 语句时,服务器仍然为 SELECT 列出的表读取数据词典信息。SMI 表有一个特殊的分区号(分区号中的 dbspace 号为 0)。当服务器检测到特殊的分区号时,它将根据查询从共享内存读取一组特定的数据。
因为 SELECT 语句从共享内存读取实时数据,所以两个 SMI 表之间的数据可能没有同步。
所有用户都有权限查询 sysmaster 数据库中受支持的表,除了用于审计操作的表之外。
使用 SMI 表受到以下:
不能锁定非持久化 SMI 表或使用隔离级别。因为这些表仅使用共享内存结构,所以传统的关系 SQL 锁机制无效。
不能对非持久化 SMI 表执行 INSERT、UPDATE 和 DELETE 语句。 不能在 sysmaster 数据库上使用 dbschema 和 dbexport 实用程序。如果使用它们将收到以下错误:
Database has pseudo tables - can't build schema.
在 SELECT 语句中使用 rowid 将返回不一致的结果。
sysmaster 表
sysmaster 数据库由 50 个以上的表组成。IBM Informix 仅支持这些表的一小部分(并提供文档),以及使用这些表的一些视图。为了安全起见,请在查询中仅使用受支持的表和视图,因为不受支持的表可能在各个版本之间发生变化。支持的表和视图包括:
sysdatabases 表,它列出数据库、所有者和数据库特征。 systabnames 表,它包含服务器中的所有表的名称。
syscheckpoint 和 sysckptinfo 表,它们是版本 11 新添加的,用于列出检查点。
syslogs 视图,它包含关于逻辑日志的信息。您可以使用 syslogs 确定是否需要备份日志。
sysdbspaces 视图,它包含关于 dbspace 的信息。
syschunks 视图,它包含服务器中的块。nfree 列显示块中空闲的页的数量。
syslocks 视图,它列出所有活动的锁。
sysvpprof 视图,它包含所有活动的虚拟处理器。 syssessions 视图,它列出关于每个会话的信息。
syssesprof 视图,它包含关于每个会话的更详细信息。 sysextents 视图,它列出在服务器中分配的区段。 syschkio 视图,它包含块的 I/O 统计数据。
sysptprof 视图,它列出 tblspace 在任意时间点的信息。该视图仅列出正在使用的表。当最后的用户关闭了表之后,共享内存中的 tblspace 结构将被释放,接着将丢失所有配置文件统计数据。
sysprofile 视图,它列出服务器中的某个事件,例如磁盘读、磁盘写、回滚和检查点等。每个行包含一个配置事件及其值。
sysadtinfo 表,它包含关于服务器的审计配置的信息。仅有用户 informix 能够从该表获取信息。
sysaudit 表,它包含每个已定义审计掩码的十六进制表示。要列出、修改或添加审计掩码,必须使用 onaudit 实用程序。仅有用户 informix 能够从 sysaudit 获取信息。
sysconfig 表,它描述配置参数的有效值、原始值和默认值。 sysdri 表,它提供数据库服务器的数据复制状态的信息。
sysseswts 表,它提供用户等待各种数据库对象的时间的信息。
回页首
数据库日志模式
IDS 使用逻辑日志为日志数据库记录数据操作语言(data manipulation
language,DML)条目(INSERT、UPDATE 和 DELETE),以及为所有数据库记录数据定义语言(data definition language,DDL)语句和检查点活动。 如果您没有启用数据库日志,当出现故障时服务器将不能完全恢复数据库,因此您也不能使用事务。
使用 ondblog 实用程序改变数据库的日志模式
您可以使用 ondblog 实用程序为一个或多个数据库更改日志模式。
如果您为一个数据库更改日志模式,必须在更改生效之前执行 level-0 备份。 使用以下命令在 stores7 日志数据库上更改缓存状态: ondblog unbuf stores7 ondblog buf stores7
要终止日志记录,使用以下命令: ondblog nolog stores7
要为 “mydbfile” 文件中的一组数据库终止日志记录,使用以下命令: ondblog nolog -f mydbfile
使用以下命令让数据库遵从 ANSI 标准: ondblog ansi stores7
使用 ontape 实用程序更改数据库的日志模式
您可以在创建 level-0 备份的同时使用 ontape 实用程序为数据库添加日志记录。
例如,要使用 ontape 向名为 stores_demo 的数据库缓存日志,请使用以下命令:
ontape -s -B stores_demo
要使用 ontape 向名为 stores_demo 的数据库添加非缓存日志记录,请执行以下命令:
ontape -s -U stores_demo
除了打开事务日志之外,这些命令还创建整个系统的存储空间备份。当 ontape 提示您选择备份级别时,请指定 level-0 备份。
注意:使用 ontape 时,必须对所有存储空间执行 level-0 备份。
要使用 ontape 终止名为 stores_demo 的数据库的日志记录,请执行以下命令: ontape -N stores_demo
要使用 ontape 在名为 stores_demo 的数据库上将缓存模式从缓存日志更改为非缓存日志,并且不需要创建存储空间备份,请执行以下命令: ontape -U stores_demo
要使用 ontape 在名为 stores_demo 的数据库上将缓存模式从非缓存日志更改为缓存日志,并且不需要创建存储空间备份,请执行以下命令: ontape -B stores_demo
要使用 ontape 将名为 stores_demo 的数据库(已经使用缓存或非缓存的事务
日志)更改为遵从 ANSI 标准,请执行以下命令: ontape -A stores_demo
要使用 ontape 将名为 stores_demo 的数据库(未使用事务日志)更改为遵从 ANSI 标准,请执行以下命令: ontape -s -A stores_demo
除了使数据库遵从 ANSI 标准之外,这个命令同时创建了一个存储空间备份。当提示您选择备份级别时,请指定 level-0 备份。
注意:将日志模式更改为遵循 ANSI 标准之后,就不能再轻易更改它了。要更改遵循 ANSI 标准的数据库日志模式,必须卸载数据,使用新的日志模式创建数据库,然后重新装载数据。
回页首
在创建数据库时指定日志模式
要创建数据库并指定日志模式,需要使用 CREATE DATABASE 语句。 清单 9 提供了该语句的语法:
清单 9. 创建数据库并指定日志模式的语法
>>-CREATE DATABASE--database--+-------------+-------------------> '-IN--dbspace-'
>--+-----------------------------+----------------------------->< '-WITH--+-+----------+--LOG-+-' | '-BUFFERED-' | '-LOG MODE ANSI-----'
以下示例命令在 dbspace2 中创建一个名为 my_db 的数据库,并指定其日志记录模式为非缓存日志:
create database my_db in dbspace2 with log;
清单 10 中的命令确认数据库的日志状态,并在 sysmaster 数据库中查询 sysdatabases 表:
清单 10. 通过查询 sysdatabases 表确认日志状态 database sysmaster;
select * from sysdatabases where name='my_db';
name my_db partnum 1049131 owner informix created 07/20/2009 is_logging 1 is_buff_log 0 is_ansi 0 is_nls 0
flags -12287
结束语
IBM Informix Dynamic Server Information Centre 为在本文中讨论的所有主题提供可搜索的文档(见 参考资料 获取链接)。 关于作者
Matthew Margan 是 Informix Down Systems 支持团队的 Informix 高级数据库支持工程师。
因篇幅问题不能全部显示,请点此查看更多更全内容