SYBASE-IQ知识整理-12.7 - 图文

更新时间:2024-04-23 23:53:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

SYBASE IQ 知识整理

目录

SYBASE IQ 知识整理 --------------------------------------------------------------------------------------- 0 1 1.1 1.2 2 2.1

概述--------------------------------------------------------------------------------------------------- 4 内容简介 .......................................................................................................................... 4 Iq数据库的物理限制 ...................................................................................................... 5 SybaseIQ的安装 ---------------------------------------------------------------------------------- 5 Sybase IQ单服务器系统的安装 .................................................................................... 5 2.1.1 操作系统级别的配置 -------------------------------------------------------------------- 5 2.1.2 搭建IQ数据库的用户环境 ------------------------------------------------------------ 6 2.1.3 安装IQ数据库软件 --------------------------------------------------------------------- 7 2.1.4 创建IQ数据库 --------------------------------------------------------------------------- 7 Sybase IQ Multiplex多机系统安装 ............................................................................... 8 2.2.1 基础 ----------------------------------------------------------------------------------------- 8 2.2.2 安装和配置方法 -------------------------------------------------------------------------- 8 2.2.3 MultiPlex的注意事项 ------------------------------------------------------------------- 9 2.2.4 Multiplex重建查询服务器步骤 ------------------------------------------------------ 9 注册插件 .......................................................................................................................... 9 Utility数据库 ................................................................................................................. 10 优化和配置数据库参数 ------------------------------------------------------------------------- 10 配置数据库优化参数 .................................................................................................... 10 多个iq数据库的设置 ................................................................................................... 10 配置内存和高速缓存 .................................................................................................... 11 3.3.1 配置高速缓存分区 ---------------------------------------------------------------------- 11 3.3.2 示例 ---------------------------------------------------------------------------------------- 11 设置并发查询 ................................................................................................................ 12 Sybase IQ 数据加载 ----------------------------------------------------------------------------- 12 数据加载语法 ................................................................................................................ 12 从定长的文本文件装载数据是装载数据的最快方式 ................................................. 13 使用LOAD TABLE装载文本文件注意事项 ............................................................. 13 使用LOAD TABLE如何装载bcp导出的数据文件 ................................................. 13 数据装载时候遇到不能装载也不报错的问题 ............................................................. 14 LOAD TABLE 如何进行错误处理 ............................................................................. 14 Loadtable 其他一些问题处理 ..................................................................................... 15 4.7.1 数据库升级后load错误 --------------------------------------------------------------- 15 4.7.2 LOAD TABLE对缺省值的支持 ----------------------------------------------------- 16 4.7.3 Sybase iq 加载时跳过错误 ----------------------------------------------------------- 16

2.2

2.3 2.4 3 3.1 3.2 3.3

3.4 4 4.1 4.2 4.3 4.4 4.5 4.6 4.7

5 6 6.1 6.2 6.3 7 7.1

7.2 7.3

7.4 7.5 7.6 7.7 8 8.1 8.2 8.3

8.4

8.5 8.6 8.7

数据导出 ------------------------------------------------------------------------------------------- 16 索引-------------------------------------------------------------------------------------------------- 17 IQ的索引特性: ........................................................................................................... 17 索引的适用情况 ............................................................................................................ 18 并行执行创建索引 ........................................................................................................ 19 Sybase IQ 的主要语法简介 -------------------------------------------------------------------- 19 变量 ................................................................................................................................ 20 7.1.1 局部变量 ---------------------------------------------------------------------------------- 20 7.1.2 全局变量 ---------------------------------------------------------------------------------- 20 7.1.3 连接级变量 ------------------------------------------------------------------------------- 20 注释 ................................................................................................................................ 21 表达式 ............................................................................................................................ 21 7.3.1 IF 表达式 --------------------------------------------------------------------------------- 21 7.3.2 CASE 表达式的语法 ------------------------------------------------------------------ 21 7.3.3 游标FETCH 语句 ---------------------------------------------------------------------- 22 7.3.4 循环语句FOR --------------------------------------------------------------------------- 23 7.3.5 LOOP 语句 ------------------------------------------------------------------------------- 24 日期和字符串比较 ........................................................................................................ 25 ALTER TABLE 语句 ................................................................................................... 25 BACKUP 语句 .............................................................................................................. 26 7.6.1 语法 ---------------------------------------------------------------------------------------- 26 创建iq空间设备(dbspace)语法.............................................................................. 26 系统管理 ------------------------------------------------------------------------------------------- 27 使用存储过程获取信息................................................................................................. 27 查看数据库文件 ............................................................................................................ 27 Multiplex多机系统管理 ............................................................................................... 28 8.3.1 主数据库空间的计数在写入和查询服务器上不同 ----------------------------- 28 8.3.2 Multiplex 同步“Not enough space”错误 ---------------------------------------- 28 8.3.3 备份和恢复 Multiplex ----------------------------------------------------------------- 28 8.3.4 更换写入服务器 ------------------------------------------------------------------------- 30 系统表 ............................................................................................................................ 32 8.4.1 DUMMY 系统表 ------------------------------------------------------------------------ 32 8.4.2 IQ_MPX_INFO 系统表 --------------------------------------------------------------- 32 8.4.3 Sysobjects系统表 ----------------------------------------------------------------------- 32 8.4.4 SYSTABLE 系统表 -------------------------------------------------------------------- 33 8.4.5 SYSCOLUMN 系统表----------------------------------------------------------------- 33 8.4.6 SYSFKCOL 系统表 -------------------------------------------------------------------- 33 8.4.7 SYSFOREIGNKEY 系统表 ---------------------------------------------------------- 33 8.4.8 SYSINDEX 系统表 -------------------------------------------------------------------- 33 恢复数据库 .................................................................................................................... 33 系统字符集问题 ............................................................................................................ 34 数据库权限 .................................................................................................................... 34 8.7.1 添加新用户 ------------------------------------------------------------------------------- 34 8.7.2 授予对表、视图、存储过程的权限 ------------------------------------------------ 35

8.8

8.9 8.10

9 9.1 9.2 9.3 9.4 10 10.1 10.2 10.3 11 11.1 11.2 11.3 11.4 11.5 11.6 11.7 11.8 12 12.1 12.2 13 13.1 13.2 13.3 13.4 14 15 16 16.1 17

8.7.3 撤消用户权限 ---------------------------------------------------------------------------- 35 8.7.4 删除 Sybase IQ 用户帐户 ------------------------------------------------------------ 36 8.7.5 数据库连接问题 ------------------------------------------------------------------------- 36 8.7.6 管理组 ------------------------------------------------------------------------------------- 36 8.7.7 资源管理 ---------------------------------------------------------------------------------- 37 系统日志清理 ................................................................................................................ 37 8.8.1 单机系统日志清理 ---------------------------------------------------------------------- 37 8.8.2 SybaseIQ multiplex 日志清理 -------------------------------------------------------- 38 IQ数据仓库清理消息文件*.iqmsg .............................................................................. 38 数据库锁 ........................................................................................................................ 39 8.10.1 锁定用户 ---------------------------------------------------------------------------------- 39 8.10.2 解锁用户 ---------------------------------------------------------------------------------- 39 8.10.3 锁表查看 ---------------------------------------------------------------------------------- 39 存储过程 ------------------------------------------------------------------------------------------- 40 存储过程的语法规则 .................................................................................................... 40 输出存储过程中print消息; ...................................................................................... 40 系统存储过程 ................................................................................................................ 43 Multiplex 系统过程 ...................................................................................................... 43 常用的函数 ---------------------------------------------------------------------------------------- 43 日期和时间函数 ............................................................................................................ 43 CONVERT数据类型转换函数 .................................................................................... 43 字符串函数 .................................................................................................................... 44 故障排除(添加中) ---------------------------------------------------------------------------- 45 insert thrashing detected 或者Hash find thrashingdetected ................................... 45 ASA Error -1009134: Insufficient buffers for sort. .................................................... 45 Multiplex出现other version 数值过大...................................................................... 46 删除数据库中损坏的表................................................................................................. 46 使用强制模式恢复数据库............................................................................................. 47 删除损坏的数据库空间................................................................................................. 48 删除重复记录 ................................................................................................................ 49 一个实现IQ结果集分页SQL查询的调优 ................................................................ 49 系统诊断工具SQL Trace ----------------------------------------------------------------------- 51 SYBASE IQ 15之前的SQL Trace .............................................................................. 51 SYBASE IQ 15的SQL Trace功能增强 ..................................................................... 52 IQ 15 集群搭建 ----------------------------------------------------------------------------------- 53 环境要求 ........................................................................................................................ 53 创建Simplex IQ Server ................................................................................................ 54 创建IQ Multiplex ......................................................................................................... 55 设置IQ Multiplex ......................................................................................................... 56 获取iq数据库文件和日志路径 --------------------------------------------------------------- 57 IQ存储过程返回集的问题 --------------------------------------------------------------------- 57 Utility数据库-------------------------------------------------------------------------------------- 58 命令行下面启动和执行................................................................................................. 58 IQ的官方资源 ------------------------------------------------------------------------------------ 58

18 附录-------------------------------------------------------------------------------------------------- 60 18.1 Iq数据库创建脚本 ........................................................................................................ 60

18.1.1 以普通方式创建数据库(非裸设备) --------------------------------------------- 60 18.1.2 以裸设备方式创建数据库示例 ------------------------------------------------------ 60 18.2 开机自动启动数据库示例............................................................................................. 61 18.3 数据库配置文件params.cfg ......................................................................................... 61 18.4 IQ15以上版本安装 ....................................................................................................... 61 18.5 Iq命令行 ........................................................................................................................ 62

18.5.1 dbsqlc命令实例: ---------------------------------------------------------------------- 62 18.5.2 isql命令实例: -------------------------------------------------------------------------- 62

19 硬件方面问题 ------------------------------------------------------------------------------------- 63 19.1 对每块磁盘进行独立的磁盘扫描................................................................................. 63 19.2 为linux设定swap分区 ............................................................................................... 64 19.3 Aix 磁盘操作 ................................................................................................................ 64 19.4 配置NFS ........................................................................................................................ 66 19.5 如何格式化2T以上的分区 .......................................................................................... 66 19.6 时间设置 ........................................................................................................................ 66 19.7 配置图形安装界面 ........................................................................................................ 66 19.8 为Red Hat Linux5添加裸设备 ................................................................................... 67 19.9 为linux4添加裸设备 .................................................................................................... 67 19.10 Liunx清理swap和缓存 ............................................................................................... 68

19.10.1 清理swap --------------------------------------------------------------------------------- 68 19.10.2 清理缓存 ---------------------------------------------------------------------------------- 68 19.11 磁盘柜多路径驱动 ........................................................................................................ 68 20 优化指导 ------------------------------------------------------------------------------------------- 72 作者 赵亮 版本 1.0 2.0 日期 2009-11-25 2013-3-23 备注

1 概述

1.1 内容简介

本手册主要针对sybase iq文档内容进行提炼和总结,主要包括: Sybase IQ 单机系统的安装方法 Sybase IQ 的性能配置 Sybase IQ 多机系统搭建 Sybase IQ 的主要语法简介 Sybase IQ 的系统管理 Sybase IQ 的存储过程 Sybase IQ 的数据加载和导出 Sybase IQ 的索引

1.2 Iq数据库的物理限制

2 SybaseIQ的安装

2.1 Sybase IQ单服务器系统的安装

主要介绍linux系统下单机系统的安装,对linux3、4、5的版本均适用,windows系统的安装比较简单,无需额外配置,故不作说明。

2.1.1 操作系统级别的配置

配置项目 配置内容说明 硬件配置 Cpu:1.5G以上 内存:1.0G以上 硬盘:10G以上

硬盘分区 swap分区至少为内存的2倍,不要超过3倍 专门划分一个分区作为IQ数据库软件的目录 创建数据库时,将以下三种文件放在读写速度最快的分区: IQ的日志文件 .db文件 iq临时空间设备 建议: 将日志文件和.db文件放在同一个分区 iq临时空间设备(.iqtmp文件)放在另外的分区 最少创建两个以上的IQ临时空间设备(.iqtmp文件或者裸设备) IQ的主存储设备(main store)分为两种:即裸设备和.iq文件 如果有条件,建议将IQ主存储和临时存储都用裸设备创建 IQ的临时空间建议为主存储空间的10%到20% vi /etc/sysctl.conf 添加语句:kernel.sem = 250 32000 32 4096 执行命令:/sbin/sysctl –p 使配置生效 输入命令:echo '250 32000 32 4096' > /proc/sys/kernel/sem vi /etc/hosts 定义操作系统的网络地址IP和系统名称,例: 139.219.84.87 asiqdb1 asiqdb1 配置ftp、ssh、telnet等服务 安装jdk环境 操作系统内核配置

2.1.2 搭建IQ数据库的用户环境

搭建项目 内容说明 创建用户 root用户登陆系统 useradd iq passwd iq 在提示下输入iq用户密码 创建iq软件安装目录:如 mkdir –p /opt/iq chown –R iq:iq /opt/iq

iq用户登陆系统 添加安装IQ数据库目录的环境变量export ASDIR=/opt/iq/asiq12 修改.bash_profile文件(vi ~/.bash_profile),添加下面的内容(以iq的版本为准) 修改iq用户配置文件 export SYBASE=/opt/iq . $SYBASE/ASIQ-12_7/ASIQ-12_7.sh export LANG=zh_CN 使配置文件生效: source ~/.bash_profile

2.1.3 安装IQ数据库软件

搭建项目 内容说明 Sybase IQ安装文件和操作系统补丁 sybiqee127linx86.tgz (安装文件) EBF17132.tgz (补丁文件) 将两个文件解压缩 tar –zxvf sybiqee127linx86.tgz tar –zxvf EBF17132.tgz 将解压后的文件夹赋予iq权限:如 chown iq:iq -R /opt/sybase12.7linux86 ; chown iq:iq -R /opt/ebf17132 安装IQ软件: 以iq用户登陆,进入解压缩后的iq服务器安装文件目录,执行命令: ./sybinstall 根据提示操作即可 安装补丁: 以iq用户登陆,进入解压缩后的补丁文件目录,执行命令 ./sybinstall 安装IQ软件和补丁

2.1.4 创建IQ数据库

创建方式 内容说明 以iq用户登陆系统,进入如下目录:/opt/iq/ASIQ-12_7/bin/ 图形界面方式创建 运行Agen代理程序:/opt/iq/ASIQ-12_7/S99SybaseIQAgent1270 创建iq数据库文件存放目录

从客户端创建数据库: 1、 在Sybase Center中的Utilties中启动createDataBase 2、 根据提示输入IQ服务器的IP地址、端口号、分配主存储设备空间和临时存储设备空间大小 3、 设定字符集(如:CP936ZH) 4、 提示数据库创建成功后,以iq用户登陆数据库服务器,停止数据库:stop_asiq 5、 编辑数据库配置文件(.cfg文件) 6、 重新启动数据库(参考demo数据库的启动方式) 1、以iq用户登陆系统,进入如下目录:/opt/iq/ASIQ-12_7/demo/,2、启动demo数据库:start_asiq @asiqdemo.cfg asiqdemo.db 3、创建iq数据库存放目录、iq存储设备存放目录等 以命令脚本方式创建数据库 4、打开,连接到asiqdemo数据库 5、输入并执行命令脚本 6、以iq用户登陆数据库服务器,编辑数据库配置文件(.cfg文件) 7、启动数据库 2.2 Sybase IQ Multiplex多机系统安装 2.2.1 基础

1、 必须先安装第二章的内容安装sybase IQ单服务器系统; 2、 有两种Multiplex的安装方式

单机Multiplex :同一台物理机器上运行多个IQ数据库服务器

多机Multiplex: 每一台物理机器上运行一个IQ数据库服务器,共同组成一个多机系统

3、 注意 Sybase IQ 不支持异构 Multiplexe (混合 Multiplex 中的 UNIX 和Windows 服

务器)。写入和查询服务器必须在相同硬件平台上。

2.2.2 安装和配置方法

详细内容请参考下面的文档:

SYBASE IQ 多机配置.doc

2.2.3 MultiPlex的注意事项

1、 注意:配置好多机模式后,一定要用多机模式的方式启动,不要用单机模式启动写服务

器(即不能用start_asiq @iqwrite.cfg iqwrite.db 的方式启动写服务器)

2、 如果发生启动非常缓慢,或者在启动后发现连接很慢,有可能是由于多机模式的同步发

生问题,此时需要检查数据库,运行存储过程:sp_iqstatus,检查其中的Other Versions选项,如果值太大,如达到Gb以上则是由于同步原因引起的性能故障。

解决办法:重建查询数据库。

2.2.4 Multiplex重建查询服务器步骤

2.2.4.1 删除查询节点

1、 打开sybase 客户端 2、 连接到数据库

3、 在左边菜单栏找到multiplex,并打开

4、 在右边的区域里面会显示所有的multiplex服务器节点 5、 找到iqquery节点,用鼠标右击,选择删除

2.2.4.2 重建查询节点

删除节点后,在右边区域右击,添加新的查询节点,安装提示的步骤安装即可。 详细情况请参考文档《SYBASE IQ 多机配置.doc》

2.3 注册插件

如果未在 Sybase Central 主窗口中看到 Sybase IQ 的插件,可以手动定位它。 步骤:

? 选择“Tools” > “Plug-ins”。 ? 如果列出了 Sybase IQ,则将其选定,然后单击“Register”。如果未列出 Sybase IQ,

选择“Load”。使用“Browse”按钮查找和选择文件 $ASDIR/java/iq.jpr。 ? 单击“OK”。

2.4 Utility数据库

当安装完Sybase IQ后会自动生成一个名为“Utility”的数据库,此数据库没有数据,也没有数据文件与之关联(仅为一个util_db.ini文件)。它主要用于以下目的: (1)、当没有实际的数据库时,用于测试连接。 (2)、用来创建和恢复数据库。 (3)、千万不能删除之。 (4)、此数据库的用户名为:DBA,密码为:SQL。

3 优化和配置数据库参数

3.1 配置数据库优化参数

启动数据库后,打开iq客户端数请参考文件:set_options.sql

,连接到该数据库,设置数据库参

将该文件的内容拷贝到客户端,并执行,执行完成后执行commit提交,其中有些参数可能需要重新启动数据库。如果是刚刚安装好数据库,建议立即重启数据库。

3.2 多个iq数据库的设置

如果有两个以上iq数据库,它们之间需要相互通讯,则要制定接口文件,接口文件的名称为:interfaces 内容类似如下: asiqtest1

master tcp ether 139.219.84.87 2640 query tcp ether 139.219.84.87 2640

asiqtest2

master tcp ether 139.219.84.83 2641 query tcp ether 139.219.84.83 2641

将文件编辑好后,上传到每个数据库安装的根目录下(如/opt/iq),重启每一台iq数据库

Insert into table1 location ‘asiqtest2.db’ {select * from table1};

3.3 配置内存和高速缓存

Sybase IQ 的高速缓存分为两个部分:主缓存和临时缓存。

一般来说,原则是主缓存<临时缓存(可以按照2:3或者2.5:3的比例来分配)。对于操作系统来说,应该遵循下述原则:

1、iq数据库占用的总内存不应该超过操作系统内存的70%

2、每个用户连接占用10M的内存空间,所以对连接数量要进行控制。连接数最大以占用系统内存的10%为基准,不要超过这个数值。

3、主缓存和临时缓存一起大约是略小于整个操作系统内存的50%为佳。

3.3.1 配置高速缓存分区

如果对IQ数据库的loadtable和查询性能。如果多 CPU 配置中的装载或查询性能比期望值慢,可能能够通过更改 CACHE_PARTITIONS 数据库选项的值来提高它。可尝试使用不同的值以确定最佳设置。

? 通过减少锁争用,对缓冲区高速缓存进行分区有时可以提高具有多个 CPU系统的性能。

通常,应当信赖 Sybase IQ 自动计算的值,该值是以系统中的CPU 数为依据的。但是,如果发现多 CPU 配置中的装载或查询性能比预期低,则可以通过为 CACHE_PARTITIONS 设置其它值来提高装载或查询性能。

? 为 CACHE_PARTITIONS 设置的值同时适用于主缓冲区高速缓存和临时缓冲区高速缓存。

对于每个缓冲区高速缓存,绝对最大分区数都是 64。

? -iqpartition 服务器选项用于在服务器级设置分区限制。如果在服务器启动时指定

-iqpartition,该选项将始终覆盖 CACHE_PARTITIONS 设置

3.3.2 示例

在具有 100 个 CPU 的系统中,如果您不设置 CACHE_PARTITIONS, SybaseIQ 会自动将分区数设置为 16,计算方法如下: 100 个 CPU/8 = 12,舍入为 16。

在这种设置中,共有 16 个分区用于主高速缓存,16 个分区用于临时高速缓存。 在具有 100 个 CPU 的相同系统中,要将分区数显式设置为 8,请指定:

SET OPTION \

3.4 设置并发查询

-iqgovern 命令行选项允许控制服务器上的并发查询数。这与连接数不同,连接数是由许可证控制的。

-iqgovern 开关可以优化缓冲区数据到磁盘的分页,以便最有效地使用内存。-iqgovern 的缺省值是 (2 x CPU 数) + 4。

该选项主要是用于cpu在超频使用的时候。

4 Sybase IQ 数据加载

4.1 数据加载语法

LOAD [ INTO ] TABLE [ owner.]table-name [ ( column-name, . . . ) ] FROM filename

[ load-option . . . ]

[ statistics-limitation-options ] load-option :

CHECK CONSTRAINTS { ON | OFF } | COMPUTES { ON | OFF } | DEFAULTS { ON | OFF } | DELIMITED BY string

| ESCAPE CHARACTER character | ESCAPES { ON | OFF } | FORMAT { ASCII | BCP } | HEXADECIMAL {ON | OFF} | ORDER {ON | OFF}

| PCTFREE percent-free-space | QUOTES { ON | OFF } | SKIP integer

| STRIP { ON | OFF }

| WITH CHECKPOINT { ON | OFF }

? 如果字段名未出现在字段列表中,则填充NULL、0、空、或者DEFAULT; ? 存在于输入文件中的字段可以用“filler()”.忽略

? DEFAULTS { ON | OFF } 为ON则字段取缺省值。否则取NULL ? QUOTES { ON | OFF } 缺省为ON ,字段定界符为‘’或者 “”

? DELIMITED BY 选项: 可以单个字符,最多255个字符,例如:制表符号作分割符

号:...DELIMITED BY ’nx09’

? SKIP n 忽略前n条记录;

? STRIP ON|OFF 尾空格插入前是否截取; ? WITH CHECKPOINT ON|OFF 缺省为 OFF, 如果设置为ON则,命令完成后,执行CHECKPOINT

操作。

4.2 从定长的文本文件装载数据是装载数据的最快方式

尽量使用并行装载功能:

通过在LOAD TABLE命令中使用 ROW DELIMITED BY 选项,这时, 最后一个字段也必须有分隔符

col1 | col2 | col3 | \\n

单文本装载示例:

LOAD TABLE books(fieldname,fieldname2,?) From ‘/opt/data/books.dat'

DELIMITED BY '| ’ QUOTES OFF ESCAPES OFF WITH CHECKPOINT ON;

多文本装载示例:

LOAD TABLE books(fieldname,fieldname2,?) From ‘/opt/data/books.dat’,‘/opt/data/books2.dat’ ON FILE ERROR FINISH

DELIMITED BY '| ’ QUOTES OFF ESCAPES OFF WITH CHECKPOINT ON;

4.3 使用LOAD TABLE装载文本文件注意事项

? ? ? ? ? ?

当文本文件使用分隔符时,尽量使用Row Delimited By选项以便使用并行数据装载 当数据源有多个文件时,将装载任务作为一个事务进行处理 将数据文件放在和数据库数据空间不同的物理磁盘上 在装载数据后创建所有的IQ索引,可以取得较好的性能

设置专门用于装载的缓存:配置Load_Memory_MB 数据库选项指定装载缓存大小 为HG索引提供适当临时cache(通过增加临时高速缓存的方式)

4.4 使用LOAD TABLE如何装载bcp导出的数据文件

从Sybase IQ 12.7 ESD #2开始,LOAD TABLE命令支持bcp out -c 导出的数据文件格式,同时也支持使用-t和-r定制列分隔符和行结束符。下面是一个例子(使用bcp缺省的列分隔符): --使用bcp从ase导出数据

bcp mydb..bcptable out /tmp/bcp.out -Usa -Psybase -c --使用load table导入bcp文件

load table bcptable(id ,name ,age ) from '/tmp/bcp.out' format bcp escapes off 下面是另一个例子(使用bcp -t定制列分隔符): --使用bcp从ase导出数据

bcp mydb..bcptable out /tmp/bcp.out -Usa -Psybase -t\--使用load table导入bcp文件 load table bcptable( id, name, age)

from '/tmp/bcp.out' format bcp delimited by '|!'

row delimited by '\\n' escapes off quotes off;

在使用这种方法时需要注意:

(1) load table命令中不要在装载列表中指定列分割符

4.5 数据装载时候遇到不能装载也不报错的问题

使用相同的load table语句和数据文件,分别用isql和dbisql执行。dbisql能够正常装载数据,但是使用isql却不能:在执行时并不报语法错,但是数据不能装载。查看iqmsg文件,发现有如下信息:

Partial input record (nnnn) skipped at EOF (O/S 0). 0 rows read. 解决办法是:在执行load table语句之前,执行如下语句: set temporary option ESCAPE_CHARACTER='ON' ; 然后再执行load table语句。

4.6 LOAD TABLE 如何进行错误处理

有时我们需要知道LOAD TABLE语句在装载数据文件时是否执行正常,有没有发生错误。比如,唯一约束是否违背、数据文件中字段数据类型是否匹配等。下面以一个例子来说明LOAD TABLE的错误处理: LOAD TABLE service (

service_key '|!' ,

call_waiting_flag '|!' , caller_id_flag '|!' , voice_mail_flag '|!' , cellular_flag '|!' , internet_flag '|!' ,

isdn_flag '|!' )

FROM '/sybiq/import/service.dat' ESCAPES OFF QUOTES OFF NOTIFY 1000000

ROW DELIMITED BY '\\x0a'

ignore constraint unique 0,data value 0,all 0 --0表示忽略这种类型的所有错误, n>0表示当发生n+1次时装载停止

Message Log '/sybiq/import/service_msg.log' --指定错误信息输出日志文件 Row Log '/sybiq/import/service_row.log' --指定错误数据写入的文件 Only log Unique, Data Value Log Delimited By '|!'

WITH CHECKPOINT ON; COMMIT;

上面的load语句时,如果遇到违反约束的情况,会把相应的错误信息写入service_msg.log,出错的记录写入service_row.log文件中。

4.7 Loadtable 其他一些问题处理 4.7.1 数据库升级后load错误

用户的一个系统从IQ 12.7升级到IQ 15时,原先正常的LOAD操作在15下报\truncation of string data \错后操作失败。

原因是数据库选项\在12.7的缺省值为'OFF',而在IQ 15中变为了'ON'。下面是对于这个数据库选项的解释(摘自IQ 12.7参考手册) STRING_RTRUNCATION 数据库选项:

Determines whether an error is raised when an LOAD、INSERT or UPDATE truncates a CHAR or VARCHAR string.

When STRING_TRUNCATION is OFF, the

exception is not raised and the character string is silently truncated. If the option is ON and an error is raised, a ROLLBACK occurs.

可以使用如下查询获得这个数据库选项在12.7和15中的缺省设置: select * from sysoptiondefaults where option_name like '%STRING_R%' 使用下面的查询可以看到这个数据库选项在12.7和15中的当前设置: select * from sysoptions where \

解决这个问题的方法就是在IQ 15中使用如下命令把STRING_RTRUNCATION设为OFF: set option public.STRING_RTRUNCATION='OFF'

4.7.2 LOAD TABLE对缺省值的支持

从Sybase IQ 12.7 ESD#4开始支持装载字段缺省值。下面以一个例子来说明它的使用方法: --创建一个测试表

CREATE TABLE test1(c1 char(2), c2 int,c3 char(8)) --准备数据文件test1.dat 11|!aaaaaa|! 12|!bbbbbb|! 13|!cccccc|! 14|!dddddd|!

--编写支持load default values的load table语句 LOAD TABLE test1 (c1 DEFAULT 'LD', c2 '|!', c3 '|!') FROM '/sybiqdb/mp2/test/test1.dat' DEFAULTS ON QUOTES OFF ESCAPES OFF

ROW DELIMITED BY '\\n';

4.7.3 Sybase iq 加载时跳过错误

set temporary option ESCAPE_CHARACTER='ON'; set temporary option CONVERSION_ERROR='OFF';

LOAD TABLE terminal_gdyd(TERMINAL_id ,TERMINAL_OID,TERMINAL_CODE,TERMINAL_NAME,TERMINAL_MODEL_OID,TERMINAL_BRAND_OID,TERMINAL_BRAND_CODE,TERMINAL_BRAND_NAME,NET_TYPE_OID,TERMINAL_WIFI_OID,TERMINAL_TYPE_OID,TERMINAL_OS_OID,IS_TD,INFO,VENDOR_OID,CREATE_TIME,LAST_LOG_ID,STATUS,ELEMENT008,ELEMENT009,ELEMENT010,ELEMENT021,ELEMENT022,ELEMENT023,ELEMENT024,ELEMENT025,ELEMENT026,ELEMENT027)

From '/opt/zhaoliang/d_terminal_3.txt' DELIMITED BY ',' ROW DELIMITED BY '\\n' ignore constraint unique 0,data value 0,all 0 escapes off quotes off with checkpoint off;

5 数据导出

SET TEMPORARY OPTION temp_extract_name1 = ''; //下面这条语句可以根据自己的要求配置分隔符

set temporary option TEMP_EXTRACT_COLUMN_DELIMITER=';' set temporary option TEMP_EXTRACT_BINARY='OFF'; set temporary option TEMP_EXTRACT_SWAP='OFF';

set temporary option Temp_Extract_Null_As_Empty='ON' ; select * from table1 ;

6 索引

6.1 IQ的索引特性:

? ? ? ? ? ? ? ? ?

支持快速装载, 快速查询

比传统的B-tree索引需要更少的磁盘空间 可以在同样的内存中存放更多的数据 垂直存储结构技术 解决快速查询问题

每个字段有一个以上的索引

索引类型的选择基于数据类型、数据聚合度、和如何使用数据 不同的索引的保存和维护方式都不相同 增加或删除数据时不需对索引进行自动维护

6.2 索引的适用情况

下表列举了每种索引的适用范围。右边的一栏中的次序表示索引由快到慢的排列。

索引名称 简单解释 适应情况 备注 FP 快速索引 Like查询; select字段; 表间的关联; sum(A+B)之类的函数; Low Fast MIN or MAX等函数; GROUP BY; 布尔值字段; 枚举型字段(如国家、省名称); 范围range; Between; AVG/SUM函数; Joins group by order by 特别是含有distinct的语句中 在建表时自动创建,主要目的是提高装载速度,减少存储空间; 采用压缩技术; 针对的是低级数的数据; 使用位图索引技术; 此索引适用于级数较低的情况 (distinct值<1500); 基于位图索引; 对范围查找和汇总进行优化 对日期型数据比较适应 适用于高聚合度的索引字段 (distinct>1500) 加强B-tree索引对高聚合度的数据进行equality和GROUP BY 等数据操作 LF HNG High Non Group HG High Group

CMP Compare 两个字段间的比较,如=、<、>、一种比较索引,要求成对建立,<>、in等 建立索引的两个字段数据类型相同,很少用到; 此索引在同一张表的两个字段上建立,而且字段不应含null值。 使用 ‘CONTAINS’ 查询语法 单词索引; 极少使用。主要使用在like等比较中 WD word

聚合级数较低的情况 (distinct值<1500);指的是:

Select count(distinct fieldname) from tablename;的查询结果

6.3 并行执行创建索引

BEGIN PARALLEL IQ ... END PARALLEL IQ

自动提交结果

例子:

BEGIN PARALLEL IQ

CREATE HG INDEX c1_HG on table1 (col1); CREATE HNG INDEX c12_HNG on table1 (col12); CREATE LF INDEX c1_LF on table1 (col1); CREATE HNG INDEX c2_HNG on table1 (col2); END PARALLEL IQ

可同时对多个 IQ 表

创建索引。执行此语句时,任何用户将无法发出其它 DDL 语句。 可以在语句列表中指定多个表。粒度处于列级

7 Sybase IQ 的主要语法简介

详细内容请参考文件《iq12.7文法参考手册.pdf》

7.1 变量 7.1.1 局部变量

用@定义,如 BEGIN

DECLARE local_var INT ; SET local_var = 10 ;

select 'local_var = ', local_var ; END

屏幕上会打印出该变量的值。

7.1.2 全局变量

@@定义,用户不能定义,是IQ数据库系统预定义的。 例如:检查当前的sybase IQ 版本号 select @@version

7.1.3 连接级变量

这些是使用 CREATE VARIABLE 语句定义的变量。它们属于当前连接,当从数据库断开连接或使用 DROP VARIABLE 语句时,它们就会消失。例如: CREATE VARIABLE con_var INT; SET con_var = 10;

select 'con_var = ', con_var;

结果:

删除方法:DROP VARIABLE con_var;

7.2 注释

Sybase IQ 中提供了几种注释指示符:

1、-- (双连字符) 数据库服务器会忽略行中的所有其余字符。这是SQL92 注释指示符。 2、// (双斜线) 双斜线与双连字符的含义相同。

3、/* ? */ (斜线加星号) 将忽略两个注释标记间的所有字符。两个注释标记可以位于同一行,也可以位于不同行。可以嵌套以此样式指示的注释。这种注释样式也称为 C 样式注释。

4、% (百分号) 如果 PERCENT_AS_COMMENT 选项设置为 ON,则百分号与双连字符的含义相同。建议不要将 % 用作注释指示符。

7.3 表达式 7.3.1 IF 表达式

IF 表达式的语法如下: IF condition THEN expression1 [ ELSE expression2 ] ENDIF

7.3.2 CASE 表达式的语法

CASE expression

WHEN expression THEN expression [, ? ] [ ELSEexpression ] END

例如:SELECT nmBusinessMainVetorId , (CASE vcServerIp

WHEN '219.133.40.209' THEN 'Shirt'END) as Type FROM ftbBusinessMainVetor where type is not null

返回结果:

NULLIF ( expression-1, expression-2 )

NULLIF 比较两个表达式的值。如果第一个表达式的值与第二个表达式的

值相等,则 NULLIF 返回 NULL。如果它们不相等,则 NULLIF 返回第一 个表达式。

查询一个表中最大的值(最小值仿此),并列出相关的列

select * from ftbBusinessMainVetor where nmBusinessMainVetorId>= all (select max(nmBusinessMainVetorId) from ftbBusinessMainVetor)

7.3.3 游标FETCH 语句

重新定位游标并从中获取数据。

7.3.3.1 语法:

FETCH

{ NEXT | PRIOR | FIRST | LAST

| ABSOLUTE row-count | RELATIVE row-count } ... cursor-name

... { [ INTO host-variable-list ] | USING DESCRIPTOR sqlda-name | INTO variable-list }

... [ PURGE ] [ BLOCK n ] [ ARRAY fetch-count ] ... INTO variable-list ... IQ CACHE row-count

7.3.3.2 参数说明

cursor-name: 标识符或宿主变量 sqlda-name: 标识符

host-variable-list: 可以包含指示符变量 row-count: 数字或宿主变量 fetch-count: 整数或宿主变量

7.3.3.3 举例

BEGIN

DECLARE cur_employee CURSOR FOR SELECT emp_lname FROM employee; DECLARE name CHAR(40); OPEN cur_employee; LOOP

FETCH NEXT cur_employee into name ; ...

END LOOP

CLOSE cur_employee; END

7.3.3.4 用法详细解释

? FETCH 可从指定的游标中检索一行。

? ARRAY 子句允许宽提取,即同时检索多行,这样可能会提高性能。游标在此前必须已打

开。

? SELECT 语句结果中的一行被放入变量列表的变量中。选择列表和宿主变量列表之间是

一对一的对应关系。

? SELECT 语句返回的结果中的一行或多行放在变量列表的变量中或指定SQLDA 描述的程

序数据区中。在以上两种情况下,选择列表与宿主变量列表或 SQLDA 描述符数组之间都是一对一的对应关系。

? INTO 子句是可选的。如果未指定该子句,则 FETCH 仅定位游标。可指定一个可选定位

参数用来允许在提取行之前移动游标。缺省值为NEXT,它使游标在提取行之前向前移动一行。PRIOR 使游标在提取前向后移动一行。

? RELATIVE 定位用于在提取前将游标沿任一方向移动指定的行数。正数表示向前移动,

负数表示向后移动。因此, NEXT 等同于 RELATIVE 1,PRIOR 等同于 RELATIVE -1。RELATIVE 0 检索上一提取语句在此游标上所检索的行。

? ABSOLUTE 定位参数用于转到具体某行。0 表示第一行前面的位置。1 表示第一行,依

此类推,负数用于指定从游标末尾开始计数的绝对位置。-1 表示游标的最后一行。FIRST 是 ABSOLUTE 1 的简写形式。LAST是 ABSOLUTE -1 的简写形式。

? OPEN 最初将游标定位在第一行之前。如果提取操作中包括定位参数,而位置在允许的

游标位置外,则会发出SQLE_NOTFOUND 警告。

? IQ CACHE 子句指定 FIFO 队列中可以缓存的最大行数。如果不为此子句指定值,则会

使用 CURSOR_WINDOW_ROWS 数据库选项的值。CURSOR_WINDOW_ROWS 的缺省设置为 200。 注意 Sybase IQ 处理 FIRST、LAST、ABSOLUTE 和为负的 RELATIVE 选项 时并不是非常高效,因而使用这些选项时性能可能有所下降。

7.3.4 循环语句FOR

为游标中的每行重复执行一次语句列表

7.3.4.1 语法

[ statement-label: ]

... FOR for-loop-name AS cursor-name ... CURSOR FOR statement

... [ { FOR UPDATE | FOR READ ONLY } ] ... DO statement-list

... END FOR [ statement-label ]

7.3.4.2 示例

FOR names AS curs CURSOR FOR SELECT emp_lname FROM employee DO

CALL search_for_name( emp_lname ); END FOR;

7.3.4.3 用法详解

? FOR 语句是控制语句,它允许对游标中的每一行执行一次 SQL 语句列表。FOR 语句等

效于这样一个复合语句:游标有一个 DECLARE,游标结果集中的每一列有一个变量 DECLARE,后面跟一个循环,该循环将游标中的一行提取到局部变量,并对游标中的每一行执行一行statement-list。

? 所声明的局部变量的名称和数据类型都是从游标中使用的 statement 派生。在 SELECT

语句中,数据类型是选择列表中表达式的数据类型。名称是选择列表项的别名(如果存在这样的别名),否则名称是列的名称。任何不是简单列引用的选择列表项都必须有别名。在 CALL 语句中,名称和数据类型从过程定义的 RESULT 子句中获取。

? LEAVE 语句可在 END FOR 语句后的第一个语句处用于重新开始执行。如果指定结尾

statement-label,它必须与开头 statement-label 匹配。

7.3.5 LOOP 语句

重复执行语句列表

7.3.5.1 语法

[ statement-label: ]

... [ WHILE search-condition ] LOOP ... statement-list

... END LOOP [ statement-label ]

7.3.5.2 举例

SET i = 1 ;

WHILE i <= 10 LOOP

INSERT INTO Counters( number ) VALUES ( i ) ; SET i = i + 1 ; END LOOP ;

带标签的:功能和上面的一样 SET i = 1; lbl: LOOP

INSERT INTO Counters( number ) VALUES ( i ) ; IF i >= 10 THEN

LEAVE lbl ; END IF ; SET i = i + 1 ; END LOOP lbl

7.3.5.3 用法详解

? WHILE 和 LOOP 语句都是控制语句,当 search-condition 计算结果为 TRUE时,使用

这两个语句可以重复执行 SQL 语句列表。LEAVE 语句可在 END LOOP 之后的第一个语句处用于重新开始执行。

? 如果指定结尾 statement-label,它必须与开头 statement-label 匹配。

7.4 日期和字符串比较

要将日期作为字符串与某个字符串进行比较,请在比较前使用 DATEFORMAT 函数或 CAST 函数将日期转换为字符串。例如: DATEFORMAT(getdate(),'yyyy/mm/dd') = '1992/05/23'

7.5 ALTER TABLE 语句

Alter table 表名 { add | modify | drop | rename } 注:不能通过alter 的操作更改字段类型

如上述,alter table 有四种类型的操作,分别举例: Add:添加列

Alter table A add colum1 varchar(100) null;

Modify:修改(可针对identity、constraint、check、添加默认值等操作) Alter table A modify column1 identity;

Alter table A modify column1 default ‘dddddd’;

Drop:删除操作(可以是列、check、constraint、外键、主键、UNIQUE等) Alter table A drop column1 Rename 改名操作:

改表名:alter talbe A rename B

改字段名:alter table A rename column1 to newColumn

7.6 BACKUP 语句

在一个或多个存档设备上备份 Sybase IQ 数据库, BACKUP 命令用于指定完全备份或增量备份

7.6.1 语法

BACKUP DATABASE ... [ CRC { ON | OFF } ] ... [ ATTENDED { ON | OFF } ] ... [ BLOCK FACTOR integer ]

... [ { FULL | INCREMENTAL | INCREMENTAL SINCE FULL } ] ... [ { VIRTUAL DECOUPLED |

VIRTUAL ENCAPSULATED ‘shell_command’ } ]

...TO archive_device [ SIZE integer ] [ STACKER integer ] ... ... [ WITH COMMENT string ]

示例以下 UNIX 示例将 asiqdemo 数据库备份到 Sun Solaris 平台上的磁带设备

/dev/rmt/0 和 /dev/rmt/2 上。在 Solaris 上,设备名后面的字母 n 指定“无 关闭回绕”功能。请始终用 BACKUP 来指定此功能,并使用适用于您的 UNIX 平台的命名约定(Windows 不支持此功能)。此示例备份了自上 次完全备份以来服务器上的所有更改:

BACKUP DATABASE INCREMENTAL SINCE FULL TO '/dev/rmt/0n' SIZE 10000000 TO '/dev/rmt/2n' SIZE 15000000

7.7 创建iq空间设备(dbspace)语法

CREATE DBSPACE dbspace-name AS filename

... [ { IQ STORE | IQ TEMPORARY STORE | IQ LOCAL STORE | CATALOG STORE } ] ... [ [SIZE] file-size ] ... [ RESERVE sizeMB ] 例子:

Windows下面:

CREATE DBSPACE mydb_tmp_2 AS 'e:\\\\s2\\\\data\\\\mydb_2.iqtmp' IQ TEMPORARY STORE SIZE 200;

Linux下面:

CREATE DBSPACE main_raw1 AS '/dev/raw/raw1' IQ STORE;

CREATE DBSPACE temp_raw5 AS '/dev/raw/raw5' IQ TEMPORARY STORE;

8 系统管理

8.1 使用存储过程获取信息

Sybase IQ 提供的几个存储过程可以显示有关数据库的信息: ? sp_iqconnection 显示有关用户连接和版本的统计信息 ? sp_iqcontext 显示有关语句正在执行什么的信息 ? sp_iqcheckdb 检查当前数据库的有效性

? sp_iqdbstatistics 报告最近 sp_iqcheckdb 的结果 ? sp_iqdbsize 给出当前数据库的大小

? sp_iqspaceinfo 显示数据库中每个对象的空间使用情况 ? sp_iqstatus 显示有关数据库的杂项状态信息。 ? sp_iqtablesize 给出您指定的表的大小。 ? sp_iqgroupsize 列出指定组的成员。

8.2 查看数据库文件

怎样才能看到所有的DBspace的物理文件名?

用以下命令:Select * from sysqifile

8.3 Multiplex多机系统管理

包含对 Multiplex 功能相关问题进行故障排除的信息。

8.3.1 主数据库空间的计数在写入和查询服务器上不同

8.3.1.1 可能的原因

Sybase Central 可能无法在查询服务器上执行 CREATE DBSPACE 命令,这将导致从查询服务器得到的主数据库空间计数与写入服务器上的计数不同。尝试启动发生 CREATE DBSPACE 失败的查询服务器时,将返回错误:

Query Server dbspace count differs from Write Server

这种情况下,在写入服务器上执行 sp_iqmpxvalidate 将返回类似下面的消息: ERROR: Main dbspace counts for server UXIQIP393, write server mismatch in SYS.SYSIQFILE

如果在查询服务器上共享原始磁盘设备的文件系统权限有错误,或者路径名未解析为写入服务器在其中创建数据库空间的相同设备,则CREATE DBSPACE 也可能在查询服务器上失败。

8.3.1.2 操作以下操作可以解决该问题:

使用 Sybase Central 删除查询服务器,并将它再次添加到 Multiplex,或在写入服务器上交互使用存储过程 sp_iqmpxaliasdbspace 以创建查询服务器的必要数据库空间定义,然后同步该查询服务器。

8.3.2 Multiplex 同步“Not enough space”错误

Multiplex 同步可能失败,并在代理日志文件中记录“Not enough space” 错误:

java.io.IOException: Not enough space

此错误表示内存不足,而不是物理磁盘空间不足或数据库空间不足。

8.3.3 备份和恢复 Multiplex

注意:用backup备份数据库不支持裸设备。 本节介绍以下内容:

有关 Multiplex 服务器和数据库的备份和恢复的说明。

适用于 Multiplex 环境中的备份和恢复操作的特殊限制。 除通常备份和恢复数据的原因外,在未出现问题时也可以使用恢复操作在不同的系统中重新创建 Multiplex。

Multiplex 备份列表按照“备份类型”(第 551 页)中的说明备份 IQ 存储。另外,还应在每个查询服务器上备份 IQ 本地存储。IQ 级和系统级恢复的最后一个步骤是使查询服务器与传播更改同步。您可能希望保留 server.dbrlog.NNN 文件(存储在写入服务器的某个目录中,在 UNIX 中位于 /repDirs/logfiles 下,在 Windows 中位于\\repDirs\\logfiles 下)。

更新备份列表将数据库中添加的所有数据库空间(无论位于 SYSTEM、IQ_SYSTEM_MAIN 还是 IQ_SYSTEM_TEMP 中)添加到系统备份规范中是至关重要的。如果数据库空间的添加发生在几个月后或组织中某些人员调整之后,则可能会错过此步骤。要确保备份您所需的所有文件,请使用系统级备份脚本。在该脚本中,启动备份之前,会将从 SYSFILE(用于系统数据库空间)和 SYSIQFILE(用于 IQ 数据库空间)中的所选内容与系统备份规范中已知的数据库空间列表相比较。原始设备和符号链接如果根据建议将符号链接用于原始设备名称,一定要确保系统备份实用程序遵循符号链接并备份该设备。

在每次数据库备份后,您可能需要截断事务日志,如《Sybase IQ 性能和调优指南》中所述。 ? 恢复 Multiplex

要恢复 Multiplex,必须首先恢复目录存储和 IQ 存储,然后恢复查询服务器上的所有 IQ 本地存储。

1 与技术支持人员确认是否需要进行恢复操作。如果在查询服务器上打开数据库时遇到困难,请尝试先进行同步操作。

2 确认每个服务器的数据库主目录是否仍然存在。如果不存在,则创建这些目录或从文件系统备份将其恢复:

3 使用 Sybase Central 中的 Stop Multiplex 命令关闭 Multiplex 中的每个服务器(写入服务器和查询服务器)。注意 如果 ODBC 配置中启用了自动启动,与服务器位于同一计算机

中的用户将能够自动启动服务器,您需要在恢复数据库时防止这种情况发生。

4 停止所有服务器后,验证数据库是否已成功关闭。如果看到具有Multiplex 中某个服务器的服务器名(在启动参数中)的 asiqsrv12 进程处于活动状态,则应停止该进程。要在 UNIX 系统中进行验证,应使用 ps 命令。例如: % ps -ef | grep asiqsrv12

fiona 434 1 1 May 19 ?? 0:05 start_asiq -n myhost_myserver -c 32MB -x tcpip(port=1234) mpxdb.db

fiona 4751 442 1 16:42:14 pts/5 0:00 grep start_asiq

要在 Windows 系统中进行验证,应使用“任务管理器” 。在“进程”选项卡上查找 asiqsrv12.exe,或在系统任务栏中找到 IQ Server图标,然后通过右键单击并选择“关闭将其停止。

5 移动调试和重新配置 Multiplex 所需的文件。 ? 生成 .iqmsg 文件的文件系统副本。 ? 在每个服务器上,保留 dbname.iqtmp 数据库空间文件用于重新配置 Multiplex。如果 IQ 临时存储已损坏,可使用 -iqnotemp 开关启动服务器以删除并重新创建临时存储数据库空间。有关详细信息,请参见《Sybase IQ 发行公告》。将以下文件从写入服务器中删除:

/.db .log

不过,如果某个查询服务器已损坏,则应将其删除并在RESTORE 之后重新添加该服务器,但不要对其进行同步。

6 使用写入服务器的服务器名从写入服务器目录启动实用程序数据库: % start_asiq -n thoreau_Server01 -c 32MB -x tcpip(port=1234)

如果要将数据库恢复至不同的主目录或与创建备份时不同的计算机,则必须使用 Multiplex 覆盖开关 (-iqmpx_ov) 启动实用程序数据库 7 连接到实用程序数据库 (utility_db)。

% dbisql –c \

8 运行 RESTORE 命令。移动数据库(恢复至不同计算机)需要使用RENAME 子句。有关详细信息,请参见《Sybase IQ 参考手册》。 9 关闭写入服务器。

10 确保临时数据库空间与以前一样存在于原始设备中或作为长度正确的文件存在。请参见“备份 IQ 存储和目录存储”(第 551 页)。有关在没有 IQ 临时存储的情况下启动的信息,请参见《Sybase IQ 发行公告》。

11 启动写入服务器,如果要恢复至同一位置,则对 Multiplex 进行同步。

12 如果要恢复至新位置,则必须使用 Interactive SQL (而不是 SybaseCentral)连接到写入服务器,并在启动 Multiplex 后删除查询服务器。此操作会将指向查询服务器的绝对路径从其在系统表中的原有位置中删除。(如果不知道查询服务器的名称,可在 Sybase Central 中打开 Multiplex 容器以列出这些名称。请忽略这种情况下出现的所有警告。)要删除每个查询服务器,应针对每个查询服务器在 dbisql 或 dbisqlc中运行 sp_iqmpxdropqueryserver 存储过程。例如,要删除名为iqmpx_qs 的查询服务器,应输入:sp_iqmpxdropqueryserver ('iqmpx_qs') 如果希望数据库成为 Multiplex,可以创建新的查询服务器。

8.3.4 更换写入服务器

? ? ? ?

要更换 Multiplex 的写入服务器,应指定一个查询服务器作为新的写入服务器 在对该查询服务器进行转换时,必须更改其使用的服务器名

新的写服务器的服务器名必须不同于 Multiplex 中已定义的任何查询服务器 可以使用(并且最好使用)原写入服务器的名称

? 如果写入服务器发生的故障使其 SYSTEM 数据库空间和事务日志文件无法恢复,可使

用过程“更换没有 SYSTEM 数据库空间和/或事务日志文件的写入服务器” ? 如果原写入服务器的 SYSTEM 数据库空间和事务日志文件可用,则可以按如下方法使

用“使用原有文件更换写入服务器”

8.3.4.1 使用原有文件更换写服务器

1、 使用 Sybase Central或者脚本方式 停止 Multiplex 中的所有服务器。 2、 使用 FTP 或其它系统工具将写入服务器的 SYSTEM 数据库空间文

件(dbname.db 通常是唯一一个)复制到新写入服务器的目录中。必须将 dbname.db 复制到将要升级的查询服务器目录。该文件不能复制到任何其它目录。如果写入服务器的数据库/日志的名称与查询服务器的数据库/日志不同,则在复制时必须对该名称进行更改。 3、 删除新写入服务器的目录中的事务日志文件 (dbname.log),将旧写服务器目录中的事

务日志文件 (dbname.log) 复制到新写入服务器。

4、 使用 dblog 工具可确保为新写入服务器设置正确的日志文件路径。如果使用事务日志

镜像,则还应检查新写入服务器的镜像设置。

5、 按如下方法以单节点模式 (-iqmpx_sn 1) 启动将成为写入服务器的查询服务器:

start_asiq @params.cfg -n -iqmpx_sn 1 -iqmpx_ov 1 -x 'tcpip{port=}'

6、以 DBA 的身份连接到服务器并运行以下存储过程:

sp_iqmpxreplacewriteserver('new-write-server') 7、停止服务器,然后使用新写入服务器名重新启动服务器。

start_asiq @params.cfg -n -iqmpx_sn 1 -iqmpx_ov 1 -x 'tcpip{port=}'

8、以 DBA 的身份进行连接并使用以下命令删除旧查询服务器的数据库空间定义:

sp_iqmpxdropserverdbspaces('') 9、停止服务器。

10、启动 Sybase Central,然后启动写入服务器并对所有查询服务器进行同步。如果不存在任何查询服务器,则无需同步。

11、如果使用 Sybase Central 创建的管理脚本,请重新创建这些脚本。

8.3.4.2 更换没有 SYSTEM 数据库空间和/或事务日志文件的写入服务器

如果发生灾难性故障的写入服务器没有 SYSTEM 数据库空间且无法恢复事务日志文件,则需要进行强制恢复。按如下方法更换写入服务器: 1、停止 Multiplex 中的所有服务器

2、选择最近实现同步的查询服务器(“DBA”.IQ_MPX_STATUS.catalog_version 中的值最大查询服务器)作为新的写入服务器。此操作将保留尽可能多的数据。使用强制恢复和删除泄漏开关以单节点模式启动此查询服务器,命令如下:

start_asiq @params.cfg -n -x 'tcpip{port=}' -iqfrec

-iqdroplks -iqmpx_sn 1 -iqmpx_ov 1

3、以 DBA 的身份连接到服务器并运行以下存储过程:

sp_iqmpxreplacewriteserver('new-write-server') 4、通过运行以下命令恢复 IQ 存储中的可用空间:

sp_iqcheckdb('allocation database resetclocks')

5、停止服务器

6、如果希望针对新写入服务器或其日志文件启用日志镜像,可使用dblog 实用程序。 7、使用新写入服务器的名称重新启动服务器:

start_asiq @params.cfg -n -x

'tcpip{port=}' -iqmpx_sn 1 -iqmpx_ov 1

8、以 DBA 的身份进行连接并使用以下命令删除旧查询服务器的数据库空间定义:

sp_iqmpxdropserverdbspaces('') 9、停止服务器,启动 Sybase Central,并对所有查询服务器进行同步。如果不存在任何查询服务器,则无需同步。

10、如果使用 Sybase Central 创建的管理脚本,请重新创建这些脚本。

8.4 系统表

系统表是存储系统信息、用户表、索引、字段等之间的关系。

8.4.1 DUMMY 系统表

所有没有 FROM 子句的查询都隐含使用 DUMMY 系统表;例如,SELECT NOW();。

这些查询由 Adaptive Server Anywhere(目录引擎)运行,而不是由 Sybase IQ 运行。

如下例所示,该示例从数据库中获取当前用户 ID 和当前日期。 SELECT USER, today(*) FROM SYS.DUMMY

8.4.2 IQ_MPX_INFO 系统表

此表中的每一行都包含 Multiplex 中的特定服务器的信息。该表对每个服 务器仅包含一行。

8.4.3 Sysobjects系统表

存储系统对象,包括表、视图等。查询方法举例: Select * from sysobjects where type=’U’ (查询所有的用户表)

8.4.4 SYSTABLE 系统表

SYSTABLE 的每一行描述数据库中的一个表或视图

8.4.5 SYSCOLUMN 系统表

每个表或视图中的每一列在 SYSCOLUMN 中都有一行描述

8.4.6 SYSFKCOL 系统表

SYSFKCOL 中的每一行均描述了该关系的外表中的外部列与主表中的主 列之间的关联。

8.4.7 SYSFOREIGNKEY 系统表

外键是外表与主表二者之间的关系。每个外键均由 SYSFOREIGNKEY 中的一行以及 SYSFKCOL 中的一行或多行定义。SYSFOREIGNKEY 包含有关外键的常规信息,而 SYSFKCOL 则标识外键中的列,并使外键中的每个列与主表的主键中的列关联。

8.4.8 SYSINDEX 系统表

数据库中的每个索引均由 SYSINDEX 中的一行描述。

8.5 恢复数据库

要恢复数据库,请使用以下语法: RESTORE DATABASE 'db_file'

FROM 'archive_device' [ FROM 'archive_device' ]... ... [ RENAME dbspace_name TO 'new_dbspace_path' ]... ... [ CATALOG ONLY ]

必须指定 db_file 并至少指定一个 archive_device

对于 db_file,需要为数据库(创建时缺省带有后缀 .db)指定目录存储文件的位置。可以指定完整路径名,也可以指定相对于数据库创建目录的路径名。 举例:

RESTORE DATABASE 'asiquser.db' FROM 'c:\\\\asiq\\\\backup1' FROM 'c:\\\\asiq\\\\backup2'

如果是要恢复为新的数据库,则如下语法: RESTORE DATABASE 'c:\\\\newdir\\\\asiqnew.db' FROM 'c:\\\\asiq\\\\backup1' FROM 'c:\\\\asiq\\\\backup2'

8.6 系统字符集问题

修改现有数据库中的字符集归类将使该数据库的索引失效,而且此操作也是不允许的,所以如果一定要执行字符集的更改,必须重建数据库。可以先将当前数据库的数据进行备份,重建后执行数据恢复。

8.7 数据库权限

警告!切勿从 Multiplex 数据库中删除 DBA 用户。否则会导致数据库无效。

8.7.1 添加新用户

call sp_iqaddlogin (‘userid’, ‘password’, [ number_of_connections ] [ ,password_expiration ] ) 各个参数的解释如下:

userid :用户的登录名。登录名必须符合标识符规则。

password :用户的口令。口令必须符合 Adaptive Server Anywhere 的口令

规则,即它们必须是有效标识符。

number_of_connections :用户的最大并发数据库连接数。缺省值为 0:

Sybase IQ 不强制使用最大连接数。

password_expiration :口令有效期(以天为单位)。必须是从 0 到 32767

的值。缺省值是 0:口令未过期。 不能为用户 DBA 设置口令有效期。

使用 sp_iqaddlogin 创建并设置为在一天后过期的用户 ID/口令在第二天全 天有效,而在随后的一天无效。换句话说,今天创建并设置为在 n 天后 过期的登录在日期变为第 (n+1) 天时将不再可用。 例如:call sp_iqaddlogin(‘test1’ , ‘123456’ ,’50’,’32767’);

此例创建了一个名为test1,密码为123456,连接数50个,失效期为32767天以后。 授权:

grant connect, resource to test1;

如上,一般授权只需要有上述两个权限即可执行数据库连接和创建新的数据库对象,例如表、视图、索引或过程等,但不能调用系统存储过程进行管理工作。

查询一些用户执行情况;

Select * from user_login_info_table;

Select * from iq_system_login_info_table; Sp_iqlistlockedusers;

8.7.2 授予对表、视图、存储过程的权限

可以对个别表和视图指派一组权限。用户可被授予这些权限组合来定义他们对表或视图的访问权限。

可以授予的权限:ALTER、REFERENCES、DELETE、INSERT 和 UPDATE ALL 权限可授予所有上述权限

例子:(【WITH GRANT OPTION】表示可以向下一级授权)

例 1:GRANT delete、select、insert ON sample_table to test1 【WITH GRANT OPTION】 例 2:GRANT UPDATE (column_1, column_2) ON sample_table TO test1 【WITH GRANT OPTION】 例3:GRANT EXECUTE ON my_procedure TO test1 (授予存储过程的执行权限)

8.7.3 撤消用户权限

REVOKE EXECUTE ON my_procedure FROM test1 REVOKE DELETE ON sample_table FROM test1

8.7.4 删除 Sybase IQ 用户帐户

用存储过程sp_iqdroplogin 进行删除: 语法 1: call sp_iqdroplogin (‘userid’) 语法 2: sp_iqdroplogin ‘userid’ 语法 3: sp_iqdroplogin userid

语法 4: sp_iqdroplogin (‘userid’) 权限需要: DBA 授权。

用法:userid 要删除的用户的用户 ID。

8.7.5 数据库连接问题

检查数据库连接:sp_iqconnection

删除连接: drop connection 1 –后面的1指的是连接的代号,即ConnHandle

8.7.6 管理组

当授予或撤消组对表、视图和过程的权限时,组的所有成员都将继承这些更改。DBA、RESOURCE 和 GROUP 权限不会被继承:这些权限必须要逐个地授予需要它们的每个用户 ID。

8.7.6.1 创建组

GRANT CONNECT TO personnel IDENTIFIED BY group_password 创建了一个名为personnel 的密码为group_password的组。

8.7.6.2 组权限

给组授予权限的方法与给任何其它用户 ID 授予权限的方法完全相同。组成员(包括其它组及其成员)会继承针对表、视图和过程的权限。数据库管理员需要注意:组权限是比较复杂的。

注意:DBA、RESOURCE 和 GROUP 权限不能被组的成员继承。即使 personnel用户 ID 被授予 RESOURCE 权限, personnel 的成员也没有 RESOURCE权限。 数据库对象的所有权与单个用户 ID 相关联,不由组成员继承。

8.7.6.3 特殊组

SYS组

SYS 组是数据库的系统表和视图的所有者,它们包含了有关数据库结构的完整说明(包括所

有数据库对象和所有用户 ID)。 PUBLIC组

在创建数据库时,会自动创建 PUBLIC 组,它拥有对数据库的CONNECT 权限以及对系统表的 SELECT 权限。PUBLIC 组是 SYS 组的成员,并拥有对某些系统表和视图的读取访问权限,因此数据库的任何用户都可以了解有关数据库架构的信息。任何新用户 ID 都会自动成为 PUBLIC 组的成员,并继承由 DBA 专门授予该组的任何权限。如果需要,还可以撤消用户在 PUBLIC 中的成员资格。

8.7.7 资源管理

Sybase IQ 提供一组 DBA 可用于控制资源的数据库选项。这些选项被称为资源调控器。 可以使用 SET OPTION 语句来设置数据库选项,所用语法如下:

SET [ TEMPORARY ] OPTION

... [userid.| PUBLIC.]option-name = [ option-value ] 通常用于数据库初始参数调优上。

CURSOR_WINDOW_ROWS 定义缓冲区中的游标行数。

? LOAD_MEMORY_MB 设置后续操作可以使用的堆内存量的上限。

? MAIN_CACHE_MEMORY_MB 设置主 IQ 存储高速缓存大小。(建议使用服务器选项 -iqmc 设

置主高速缓存大小。)

? MAX_CARTESIAN_RESULT 限制包含笛卡尔连接的查询结果的行数。

? MAX_IQ_THREADS_PER_CONNECTION 设置用于 IQ 操作的连接的可用处理线程数。 ? TEMP_CACHE_MEMORY_MB 设置 IQ 临时存储的高速缓存大小。(建议使用服务器选项 -iqtc

设置临时高速缓存大小。)

? QUERY_TEMP_SPACE_LIMIT 限制可用于任何一个查询的临时数据库空间量。

? QUERY_ROWS_RETURNED_LIMIT 告诉查询优化程序拒绝可能消耗过多资源的查询。如果优化

程序估计查询结果集将超出此选项的值,优化程序将拒绝该查询并返回错误消息。以下数据库选项会影响引擎,但对 Sybase IQ 的影响有限:

? JAVA_HEAP_SIZE 针对每个连接设置分配给 Java 应用程序的那部分内存的最大值(以字节为

单位)。

? MAX_CURSOR_COUNT 限制某个连接的游标数量。

? MAX_STATEMENT_COUNT 限制某个连接的已准备好的语句的数量。

数据库选项设置不能通过组结构继承。

8.8 系统日志清理 8.8.1 单机系统日志清理

IQ数据库经过一定的时间后,数据库日志文件和消息文件会变得相当大,此时必须要清空日志文件,但这个操作很危险,需要非常小心,因为一旦操作失误,会倒掉IQ数据库,造成不可逆转的后果,一定要按照下面文件中的步骤来作:

1、先以iq用户身份停止iq服务: stop_asiq

2、数据库日志清空期间,需确保其它连接数据库的进程已经停止,建议方法是修改iq 的监听端口,即修改启动配置参数文件:params.cfg。

3、修改IQ启动配置文件params.cfg,在末尾处加上-m的参数。 4、重新启动iq

5、IQ数据库启动成功后,立即关闭IQ数据库。 7、修改数据库配置文件*.cfg,去掉-m的参数。 8、重新启动iq。

9、查看数据库相应的*.log文件大小。

8.8.2 SybaseIQ multiplex 日志清理

从写入服务器备份数据库(如果尚未执行此操作)。 在写入服务器上设置 DELETE_OLD_LOGS 选项:

SET OPTION Public.Delete_Old_Logs=’On’

停止写入服务器的 dbremote,并以 -x 命令行开关重新启动它。(为此,请创建

start_dbremote.bat 脚本的特殊版本,它位于写入服务器的数据库目录中。)这将在写入服务器上截断日志。例如: cd \\Server01\\mpxdb\\cmd /c start dbremote -q -v -x -o

\\d:\\Server01\\mpxdb\\mpxdb;

links=tcpip{port=1704;host=FIONA-PC}\

在写入服务器上清除 DELETE_OLD_LOGS 选项:

SET OPTION Public.Delete_Old_Logs=’off’

注意 无论写入服务器日志最后截断发生于什么时间,查询服务器事务日志始终会在同步期间发生截断。

8.9 IQ数据仓库清理消息文件*.iqmsg

IQ数据库经过一定的时间后,消息文件会变得相当大,如果不限制将会占据非常大的磁盘空间,导致读写数据缓慢,此时必须要清空消息文件,需要非常小心,因为一旦操作失误,也会倒掉IQ数据库,造成不可逆转的后果,一定要按照下面文件中的步骤来作: 1、用iq用户先停iq服务

2、清空消息文件:用iq用户登陆操作系统,进入消息文件所在目录, 敲入命令 echo '' > *.iqmsg (注意: 将*换成实际的文件名) 3、用iq用户重启iq

4、*.iqmsg默认是不限制其大小的,因此在安装完数据库后,可通过在查询器运行命令来限制其大小(M):

set option public.IQMSG_LENGTH_MB=1024; commit;

5、用set命令通过查询器查看对于的IQMSG_LENGTH_MB选项是否正确设置。

8.10 数据库锁 8.10.1 锁定用户

利用sp_iqlocklogin 过程可以锁定某个用户 方式1:sp_iqlocklogin 'rose', 'lock'

方式2:call sp_iqlocklogin ('rose', 'lock')

8.10.2 解锁用户

sp_iqlocklogin rose, 'unlock'

或者:call sp_iqlocklogin (‘rose’, 'unlock')

8.10.3 锁表查看

利用sp_iqlocks 过程进行控制

语法:sp_iqlocks ([ connection,] [[ owner.]table_name] max_locks,][sort_order])

调用示例:

call sp_iqlocks() ;

9 存储过程

9.1 存储过程的语法规则

返回结果集:

execute immediate with result set on @sqlString;

9.2 输出存储过程中print消息;

最近遇到一个问题,用户希望使用Sybase Open Client E-SQL/C调用IQ中的存储过程,并且在E-SQL/C应用中能够显示出存储过程中用print语句打印出的消息,以便于调试。这种使用E-SQL/C的方式,就好像是把IQ Server当成是一个ASE Server一样。 那如何做到这样的支持呢?本文通过一个例子说明实现方法。 1. 编写示例存储过程

create procedure sp_test1 as begin

declare @execString char(100)

select @execString = 'execute select 1' print '[%1!]',@execString

select @execString = 'execute select 2' print '[%1!]',@execString

select @execString = 'execute select 3' print '[%1!]',@execString end

说明:上面的存储过程很简单,不过说明问题已经总够了。 2. 编写E-SQL/C示例程序demo2.cp

/*下面是程序的源码*/

#include #include \/* Declare the SQLCA. */

EXEC SQL INCLUDE SQLCA;

void error_handler(); void warning_handler(); void get_proc_print_info(); int main(int argc, char *argv[]) {

EXEC SQL BEGIN DECLARE SECTION; char username[30]; char password[30];

EXEC SQL END DECLARE SECTION;

EXEC SQL WHENEVER SQLERROR CALL error_handler();

EXEC SQL WHENEVER SQLWARNING CALL warning_handler(); EXEC SQL WHENEVER NOT FOUND CONTINUE;

strcpy(username, USER);

strcpy(password, PASSWORD);

EXEC SQL CONNECT :username IDENTIFIED BY :password; EXEC SQL EXEC sp_test1 ; get_proc_print_info();

EXEC SQL DISCONNECT DEFAULT;

return(STDEXIT); }

void get_proc_print_info() {

exec sql begin declare section; int num_msgs; int condcnt;

exec sql include sqlca;

exec sql end declare section; /*

** 通过下面的代码可以得到存储过程中print语句输出消息. */

exec sql get diagnostics :num_msgs = number;

for (condcnt=1; condcnt <= num_msgs; condcnt++) {

exec sql get diagnostics exception :condcnt :sqlca = sqlca_info;

printf(\ } } void

error_handler(void) {

fprintf(stderr, \if (sqlca.sqlerrm.sqlerrml) {

fprintf(stderr, \

fprintf(stderr, \}

return;

//exit(ERREXIT); } void

warning_handler(void) {

if (sqlca.sqlwarn[1] == 'W') {

fprintf(stderr,

\}

if (sqlca.sqlwarn[3] == 'W') {

fprintf(stderr,

\}

return; }

说明:

(1) 在调用存储过程,即 EXEC SQL EXEC sp_test1 之后,立即调用红色字体标识的函数get_proc_print_info();

(2) 在get_proc_print_info()函数中,使用 get diagnostics E-SQL/C命令获取Server返回的消

息(包括print语句的输出)

9.3 系统存储过程

略,参考文档《iq12.7文法参考手册.pdf》

9.4 Multiplex 系统过程

略,同6.2

10 常用的函数

10.1 日期和时间函数

date(‘2008-12-3’)

dateformat(getdate(),’yyyy-mm-dd’) ;

dateformat(getdate(),'yyyy-mm-dd hh:mm:ss.sss') now()

day(‘2009-12-30’) month(‘2009-12-30’) year(now()) hour(now())

DATEADD ( date-part, numeric-expression, date-expr ) DATEDIFF ( date-part, date-expr1, date-expr2 ) 查询今天是今年的第几个星期:

Select weeks('2009-1-1',now()) FROM dummy;

10.2 CONVERT数据类型转换函数

【作用】

数据库数据类型转换函数,常应用于日期与字符串之间的转换。

【语法】

CONVERT ( data-type, expression [ , format-style ] )

【参数说明】

1) data-type:将要转换的目标数据类型

2) expression:被转换的目标,通常为字段名称

3) format-style:转换的目标数据格式,常用于日期转换为字符串时,详细见下表: 只显示两位年号(yy) 显示4位年号(yyyy) -- 1 2 3 4 5 6 7 8 -- 10 11 12 13 14 0 or 100 101 102 103 104 105 106 107 108 9 ro 109 110 111 112 113 114 输出格式 mmm dd yyyy hh:nnAM (or PM) mm/dd/yy[yy] [yy]yy.mm.dd dd/mm/yy[yy] dd.mm.yy[yy] dd-mm-yy[yy] dd mmm yy[yy] mmm dd, yy[yy] hh:nn:ss mmm dd yyyy hh:nn:ss:sssAM (or PM) mm-dd-yy[yy] [yy]yy/mm/dd [yy]yymmdd dd mmm yyyy hh:nn:ss:sss hh:nn:ss (24 hour clock) 【使用例子】

1) 转换当前时间为字符串,格式为”yyyyMMdd”。

Convert(varchar(8), getdate(), 112) 结果:20091201

2) 如果要转换成其他格式,可以配合时间函数:

Convert(varchar(30),dateformat(getdate(),’yyyy—mm—dd hh:mm:ss.sss’)) 结果:2009—12—01 16:44:46.865

10.3 字符串函数

字符串插入:insertstr ( numeric-expr, string-expr1, string-expr2 ) 例如:

insertstr(3,'dddddddd','aaaaa'); 结果:dddaaaaaddddd

求字符串长度:

LEN(‘1234567890’) 结果:10

截掉字符串的首尾空格

Trim(‘ 1234567890 ’) 结果:1234567890

强制字符串连接(括号里面的不论什么类型都强制为string类型对待)

String( string1 [, string2, ..., string99 ] ) 如:string(‘aaa’,’bbb’,12345); 结果:aaabbb12345

子字符串函数

Substring ( string-expr, integer-expr [, integer-expr ] ) 例如:

substring('123456789',8,-6); 结果:345678

Substring(‘123456789’,3,4) 结果:3456

替换函数

REPLACE ( original-string, search-string, replace-string ) 例如:

Replace(‘12345ABCD789’,’ABCD’,6) 结果: 123456789

11 故障排除(添加中)

11.1 insert thrashing detected 或者

thrashingdetected

执行以下一项或多项操作可为查询提供执行所需的资源: ? ? ? ? ?

通过增大 HASH_THRASHING_PERCENT 的值来放宽分页限制。

增加临时高速缓存(仅限 DBA)的大小。请切记,增加临时高速缓 存的大小会减少主高速缓存的大小。

对于此语句,尝试确定 Sybase IQ 错误估计一个或多个散列大小的原 因并缓解该错误估计所产生的后果。

Hash find

? 减少数据库选项 HASH_PINNABLE_CACHE_PERCENT 的值。

11.2 ASA Error -1009134: Insufficient buffers for sort.

这个错误的意思是需要增加排序的buffer空间; 检查一下内容:

1、set option public.query_temp_space_limit=0; //是否设置为0

2、大型查询语句中是否有order by的字段,如果有要建hg索引,否则很消耗内存的 3、修改iq启动的cfg文件,一般默认是params.cfg文件,将里面的iqmt和iqtc的数值加大。

4、检查iq高速缓存的分区数量是否恰当。用命令SET OPTION \改变高速缓存的分区数量。具体的分区数量有cpu个数决定(默认为8个cpu一个分区)

5、如果上面的都无效,有可能是由于服务器的内存不够,或者是由于数据库正在执行垃圾处理等清理工作(反映在一天只在某个特定时间出现这种情况)。这样是没办法从数据库层面调整了,可以尝试用增加内存等方式解决。

11.3 Multiplex出现other version 数值过大

这个是最常见的问题了。

11.4 删除数据库中损坏的表

由于某种原因,IQ数据库中的表出现损坏不能访问,并且可能使用drop table语句也不能把它删除。对于这样的表,当我们访问它时IQ会报如下错误:

ASA Error -1009039: main Bufman: Incorrect page header read; buffer={btype=14,nlb=16,blk=992,pbn=992,npb=16,uid=562,txn=1829,sp=0,flgs=0xc08}

page={btype=0,nlb=0,npb=0,ctr=0,cta=0,pbn=0,txn=0,sp=0,ver=0,pb=0,pus=0}. -- (s_buf.cxx 1140)

Msg: 21, Level: 14, State: 0 Line: 0 当发生这样的问题,我们打算删除损坏的表时该如何操作呢?下面介绍一下具体的方法和步骤(适用于IQ 12.6和IQ 12.7): (1) 重启服务器

start_asiq -n bad_db_server -x 'tcpip{port=xxx}' -gm 1 -gd dba bad_db.db 在这个命令行中,-gm 1仅仅允许一个用户做连接,-gd只允许DBA访问。当强制删除对象时,必须禁止其他用户连接。

说明:bad_db_server即出现损坏的IQ Server,其名称为.cfg文件中-n参数指定的引擎名

bad_db.db即出现损坏IQ数据库的catalog db名称 (2) 打开临时选项FORCE_DROP为ON:

set temporary option FORCE_DROP = 'ON'

(3) 删除所有不一致对象

使用DROP TABLE损坏的表。在重新启动服务器之前不要执行任何其他的DDL或者DML命令。

(4) 重新启动服务器

可以用-iqdroplks选项重新启动服务器,以恢复泄露的空间并把分配映射图

(allocation map)修改到正确状态。

start_asiq -n bad_db_server -x 'tcpip{port=xxx}' -iqdroplks bad_db bad_db.db 您需要指定两次数据库名称,前者是-iqdroplks选项使用的,后者指定您要启动的数据库。

(5) 运行sp_iqcheckdb

sp_iqcheckdb 'allocation database'。

这个步骤用计算出来的分配映射图重新设置数据库分配映射表。 如果上面的存储过程执行没有错误出现,它将显示“Freelist Updated”信息,表明已经完成泄露空(leaked space)间的恢复

(6) 发出一个checkpoint 即执行checkpoint语句

(7) 使用通用方式停止服务器

(8) 使用正常方式启动服务器,启动后即可进行正常操作。

11.5 使用强制模式恢复数据库

有时由于IQ Server异常Crash或者使用kill -9被终止之后,再次启动时有可能会报错不能启动。这时,我们可以使用IQ的强制恢复模式启动IQ数据库。在使用这种方法之前注意如下事项:

(1) 确认IQ数据库最近是否进行过备份,备份是否完好

(2) 在操作之前和重要步骤之后都要备份.db和.log文件,以防不测! 下面是这种方法的操作步骤:

(1) 用OS的cp命令备份.db 和 .log文件到其他的文件系统 (2) 使用如下方式启动IQ数据库

start_asiq -gm 1 -gd DBA @mp2.cfg -iqfrec mp2 mp2.db

(3) 使用stop_asiq停止IQ Server,然后备份.db和.log文件 (4) 使用如下方式再次启动IQ数据库

start_asiq -gm 1 -gd DBA @mp2.cfg -iqdroplks mp2 mp2.db (5) 执行sp_iqcheckdb 'allocation database'

如果执行完后显示\Updated\消息表示dbcc检查成功。如果发现错误,那么返回\和\

(6) 使用stop_asiq停止IQ,然后备份.db和.log (7) 以正常方式启动

start_asiq @mp2.cfg mp2.db

11.6 删除损坏的数据库空间

1. 说明

如果存放用户数据的dbspace发生损坏,那么IQ在启动时可以把这个损坏的dbspace标识为Offline状态,IQ Server仍然能够启动(如果IQ_SYSTEM_MAIN发生损坏,IQ 将不能启动)。在启动之后,其它完好的dbspaces仍然可以被用户访问。 如果损坏的dbspace不能修复、需要重建的话,那么需要先删除它。如果损坏的dbspace上有用户数据,那么需要把存放在这个dbspace中的所有对象删除之后才能删除它。 删除损坏dbspace中的表不能采用通常的方法,因为dbspace已损坏不能简单的执行drop table语句。下面将介绍删除的步骤(切记不是万不得已的话千万不要这样做!) 2. 删除步骤 (1) 重启服务器 例如:

start_asiq -gm 1 -gd dba @mp2.cfg mp2.db

在这个命令行中,-gm 1仅仅允许一个用户做连接,-gd只允许DBA访问。当强制删除对象时,必须禁止其他用户连接。 (2) 打开临时选项FORCE_DROP为ON:

set temporary option FORCE_DROP = 'ON'

(3) 强制删除表(假设损坏的dbspace是MP2_MAIN_CURR)

使用DROP TABLE强制删除损坏的表。在重新启动服务器之前不要执行任何其他的DDL或者DML命令!

查看MP2_MAIN_CURR的表可以使用:

sp_iqdbspaceinfo MP2_MAIN_CURR --表多的时候很慢 或者

select creator,tname from SYSCATALOG where dbspacename = 'MP2_MAIN_CURR' and tabletype='TABLE';

为了生成删除所有表的语句,可以使用如下语句:

select 'drop table ' || '\';' from SYSCATALOG where dbspacename = 'iq_main' and tabletype='TABLE';

(4) 重新启动服务器

例如: start_asiq -gm 1 -gd dba @mp2.cfg mp2.db (5) 运行sp_iqcheckdb

sp_iqcheckdb 'dropleaks dbspace MP2_MAIN_CURR' (6) 发出一个checkpoint 即执行checkpoint语句

(7) 使用正常方式停止服务器

(8) 使用正常方式启动服务器,启动后即可进行正常操作。

(9) 执行 select DBSpaceName, OkToDrop from sp_iqdbspace('MP2_MAIN_CURR') 如果OkToDrop显示为Y,则可以执行如下命令删除dbspace drop dbspace MP2_MAIN_CURR

checkpoint

(10) 重新创建CAS_MAIN_CURR

11.7 删除重复记录

下面的查询可以得到消除重复记录后的结果集

select * from test1 where rowid(test1) not in (select rowid(a) from test1 a, test1 b where rowid(a)>rowid(b) and a.id = b.id and a.name = b.name and a.age = b.age )

下面的语句可以删除表中重复的记录

delete from test1 where rowid(test1) in (select rowid(a) from test1 a, test1 b where rowid(a)>rowid(b) and a.id = b.id and a.name = b.name and a.age = b.age ); commit;

11.8 一个实现IQ结果集分页SQL查询的调优

SQL调优问题:用户的一个应用为了实现IQ数据结果集的分页,写了一个查询,用来对一个有4千多万记录的表中返回一百六十多万记录的结果集进行分页(每页100条记录)。取一页数据大约20秒左右,用户觉得太慢了。

1. 模拟问题

(1) 机器环境

用于模拟问题的机器配置如下:

Linux 4core/8G的虚拟机,CPU主频2.5GHZ IQ 版本 15.2 ESD#1

IQ CFG配置: -iqmc=1024 -iqtc=1024 (2) 数据库

采用的是TPCHDB,尺寸10GB。使用表lineitem。 lineitem表总记录数: 59986052

(3) 问题查询

drop view if exists LINEITEM_VIEW; create view LINEITEM_VIEW as select rowid(lineitem) as idd , *

from lineitem where 1=1 and l_linestatus = 'F';

SELECT * FROM ( SELECT RANK() OVER (ORDER BY idd ) rowid, * from LINEITEM_VIEW ) AS TMP WHERE TMP.rowid>0 AND TMP.rowid<=100;

本文来源:https://www.bwwdw.com/article/d9rp.html

Top