ALTIBASE 维护手册

aidata 贡献于2013-05-02

作者 aidata  创建于2012-03-31 20:22:00   修改者aidata  修改于2012-03-31 20:22:00字数109589

文档摘要:ALTIBASE 数据库完美结合了DRDBMS 和 MMDBMS的特性,并提出了一个新概念---Hybrid DBMS,为需要满足高速处理大量数据的用户提供了最有效的解决方案。 ALTIBASE 提供高性能、容错能力和事务管理的方便性,特别是在通信、网上银行、证券交易、实时应用和嵌入式系统领域。
关键词:

ALTIBASE维护手册 ALTIBASE维护手册 For Version 4.3.9 天津南大通用数据技术有限公司 目录 ALTIBASE维护手册 第一部分 ALTIBASE安装 6 1.1 AIX下的ALTIBASE安装 6 1.1.1 系统需求 6 1.1.2 安装过程 9 1.1.3 创建数据库 11 1.2 HP-UX下的ALTIBASE安装 12 1.2.1 系统需求 12 1.2.2 安装过程 14 1.2.3 创建数据库 17 1.3 部署多套数据库 17 1.4 升级 18 1.5 目录结构说明 19 第二部分 ALTIBASE维护 22 2.1 启动和停止 22 2.1.1 启动过程 22 2.1.2 启动阶段 23 2.1.3 停止过程 24 2.1.4 停止方式 24 2.1.5 Server脚本 25 2.2 参数配置说明 25 2.3 系统表说明 33 2.4 性能视图 34 2.5 日常监控 36 2.5.1 进程监控 36 2.5.2 系统资源 36 2.5.3 Session 42 2.5.4 Statement 43 2.5.5 Lock 43 2.5.6 Long Term Transaction 44 2.5.7 Logfile Space & Count 46 2.5.8 复制 46 2.5.9 常用的altimon.sh 47 2.5.10 常用监控视图 47 ALTIBASE维护手册 2.5.11 常用管理视图 53 2.5.12 权限管理和密码修改 83 2.6 执行计划 84 2.6.1 打开执行计划 84 2.6.2 计划类型 84 2.6.3 格式说明 85 2.6.4 SQL优化 92 2.7 TRC日志 95 2.8 权限管理 95 第三部分 ALTIBASE常用命令和工具 97 3.1 iSQL 97 3.1.1 iSQL概述 97 3.1.2 iSQL语法 97 3.1.3 iSQL内建命令 98 3.1.4 配置iSQL 101 3.1.5 环境变量 102 3.2 iLoader 103 3.2.1 iloader概述 103 3.2.2 iloader语法 103 3.2.3 使用iLoader 106 3.2.4 交互方式 108 3.2.5 修改格式文件 109 3.2.6 常见问题 113 3.3 aexport 115 3.3.1 概述 115 3.3.2 语法 116 3.3.3 执行过程 116 3.3.4 注意事项 118 3.3.5 aexport.properties 118 3.4 Admin Center 119 3.4.1 安装方法 120 3.4.2 注意事项 120 3.5 altiProfile 120 3.6 altierr 120 ALTIBASE维护手册 3.7 dump_stack.sh 121 第四部分 ALTIMON监控工具 122 4.1 ALTIMON简介 122 4.1.1 Monitoring Script (altimon.sh) 122 4.1.2 ALTIBASE Process 125 4.1.3 Replication 125 4.1.4 Log file 126 4.1.5 ALTIBASE性能视图 127 4.1.6 ALTIBASE ALTIMON监控日志说明 128 4.2 在运维系统中实时监控ALTIBASE的方法 130 4.3 ALTIBASE应用直接监控建议 130 4.3.1 ALTIBASE HANG 监控 131 4.3.2 ALTIBASE DOWN 监控 132 4.3.3 ALTIBASE 内存空间监控 132 4.3.4 ALTIBASE 磁盘空间监控 132 4.3.5 ALTIBASE LOCK 监控SQL脚本(并不建议进行监控) 133 4.3.6 ALTIBASE REPLICATION 133 4.3.7 ALTIBASE 连接会话信息 133 4.3.8 ALTIBASE Table 内存使用监控 134 4.3.9 ALTIBASE Checkpoint 监控信息 134 4.3.10 ALTIBASE SQL 脚本使用方法 134 第五部分 ALTIBASE复制 135 5.1 复制原理 135 5.2 复制方式 136 5.3 双机复制方案 137 5.4 常用操作 137 5.4.1 使用注意事项 137 5.4.2 创建、删除 138 5.4.3 HA回切 139 5.4.4 数据全同步 139 5.4.5 增加删除复制表 140 5.4.6 修改复制表结构 141 5.4.7 ALTIBASE版本更换、密码更换 142 ALTIBASE维护手册 第六部分 ALTIBASE备份恢复 144 6.1 物理备份和恢复 144 6.1.1 BACKUP 144 6.1.2 RECOVERY 144 6.1.3 归档模式转换 145 6.1.4 目录结构说明 145 6.1.5 介质恢复 146 6.1.6 说明 147 6.2 逻辑备份和恢复 148 6.2.1 iloader用法: 148 6.2.2 aexport用法: 148 第六部分 Q&A 150 第一部分 ALTIBASE安装 1.1 AIX下的ALTIBASE安装 1.1.1 系统需求 1.1.1.1 操作系统 ALTIBASE在IBM主机上的OS PATCH版本最低要求为AIX 5307,原因为AIX 5306 上仍然遗留由文件系统BUG。 确认方法:#oslevel -r 注:ALTIBASE 4.3.9版本在AIX 5.3上有非常多的大型案例,而在AIX 6下由于相关案例较少,不建议使用AIX 6 版本。 1.1.1.2 系统要求 l 创建用户 创建用于ALTIBASE安装和日常登录、维护的操作系统用户,如ALTIBASE,建议采用smitty工具创建 ALTIBASE维护手册 l posix_aio 功能开启 设置方法 #smit Device -> Asynchronous I/O -> Posix Asynchronous I/O -> Configure Defined Asynchronous I/O posix_aio0 Defined 改为 Available . 确认方法 lsdev -C |grep aio aio0 Available Asynchronous I/O (Legacy) posix_aio0 Available Posix Asynchronous I/O l 内核参数修改 设置方法 方法一:使用 ‘smit’ 工具 方法二:编辑/etc/security/limits文件, 设置default(或者ALTIBASE user): data, rss, fsize为-1 ( unlimited) 确认方法,以ALTIBASE user执行 $ ulimit -a file(blocks) unlimited data(kbytes) unlimited memory(kbytes) unlimited l OS物理内存划分设置 设置方法 vmo -p -o maxclient%=80 -o maxperm%=80 -o minperm%=10 -o lru_file_repage=0 此参数需要根据内存数据库及应用的主机资源使用情况进行调整. l 需要安装 VC 6.0 以上 C++ 编译库 ALTIBASE 数据库使用 xlC_r 的部分编译库(libhm.a),所以需要安装xlC_r 编译库。 网卡配置 ALTIBASE维护手册 1.1.1.3 文件系统 需要保证下表所有目录的所属用户为ALTIBASE,并具有完全操作权限。 分类 目录 大小 说明 软件安装目录 /home/altibase 10G 除安装包以外,还有监控日志等 日志文件目录 /alti_logs 100G   数据文件目录 /alti_dbs0 MEM_MAX_DB_SIZE *1.4倍冗余率 与数据量大小相当 数据文件目录 /alti_dbs1 MEM_MAX_DB_SIZE *1.4倍冗余率 与数据量大小相当 归档日志目录 /alti_archive 50G*天数*1.5倍冗余率 以往经验来看,平均30分钟 checkpoint 一次删除100个日志文件,即 1天平均产生约5000个日志文件,ALTIBASE 日志文件大小为10M ,则需要 50G的空间 热备文件目录 /alti_backup MEM_MAX_DB_SIZE *天数*1.1倍冗余率 在线备份时备份1份数据文件 1.1.1.4 网络环境 ALTIBASE 双机复制是基于TCP/IP网络实现,所以需要单独配置ALTIBASE双机复制光线网卡。即应用和数据库通信的网卡和主库和备库之间复制用的网卡是独立的。 应用服务器、主库服务器、备库服务器需要在一个网段上,而且以千兆网连接一个交换机。 针对双机复制专用网卡的网络参数优化 /usr/sbin/no -p -o tcp_sendspace=1048576 /usr/sbin/no -p -o tcp_recvspace=1048576 /usr/sbin/no -p -o rfc1323=1 上面的修改是针对全局进行的设置,全局设置无法应用到具体的网络接口上。 ALTIBASE维护手册 还需要针对具体的网络接口进行设置,可以使用下面的命令来进行设置: chdev -l en0 -a tcp_sendspace=1048576 -a rfc1323=1 -a tcp_recvspace=1048576 建议使用smitty命令进行修改,具体的命令如下: smitty chinet 检查设置的结果: no -L 检查设置结果 ifconfig -a检查设置结果 1.1.2 安装过程 1.1.2.1 设置.profile $ cat .profile # For Altibase export ALTIBASE_HOME=$HOME/altibase_home export PATH= $ALTIBASE_HOME/bin:$PATH export LD_LIBRARY_PATH=$ALTIBASE_HOME/lib:$LD_LIBRARY_PATH export LD_LIBRARY_PATH_64=$ALTIBASE_HOME/lib:$LD_LIBRARY_PATH_64 export AIXTHREAD_MNRATIO=1:1 export AIXTHREAD_SCOPE=S export MALLOCMULTIHEAP=1 export AIXTHREAD_MUTEX_DEBUG=OFF export AIXTHREAD_RWLOCK_DEBUG=OFF export AIXTHREAD_COND_DEBUG=OFF export SPINLOOPTIME=1000 export YIELDLOOPTIME=50 export MALLOCMULTIHEAP=1 export AIXTHREAD_MUTEX_FAST=ON export TERM=xterm set -o vi alias ll='ls -alt' alias findword='find . *|xargs grep' alias atp='vi $ALTIBASE_HOME/conf/altibase.properties' alias att='tail -f $ALTIBASE_HOME/trc/altibase_boot.log' 1.1.2.2 解压安装包 产品包下载地址:http://data.altibase.com/pkg.html http://data.altibase.com/download_back/altibase/altibase4/4.3.9patch/4.3.9.156/AIX/altibase-IBM_AIX_5.3-64bit-4.3.9.156-release-xlC_ ALTIBASE维护手册 r.tgz 创建目录: mkdir altibase_4.3.9.156 ln -s altibase-4.3.9.156 altibase_home mv *.tgz altibase_home 解压安装包 cd altibase_home gzip -cd *.tgz | tar -xvf - 1.1.2.3 修改altibase.properties DB_NAME = mydb #数据库名称 MEM_DB_DIR = /altibase_dbs0 # 内存表数据文件的存储目录,ping-pong checkpoint MEM_DB_DIR = /altibase_dbs1 #存储两份 DEFAULT_DISK_DB_DIR = /altibase/dbs0 #磁盘表数据文件的存储目录 LOGANCHOR_DIR = /altibase_logs #loganchor的存储目录,相当于oracle的 LOGANCHOR_DIR = /altibase_logs # control file,存储3份 LOGANCHOR_DIR = /altibase_logs # LOG_DIR       =  /altibase_logs   #logfile的存储目录 MEM_MAX_DB_SIZE = 40G #内存数据库的最大存储大小 SYS_DATA_TBS_INIT_SIZE = 1M #( default : 100M ) 磁盘表空间 SYS_TEMP_TBS_INIT_SIZE = 1M SYS_UNDO_TBS_INIT_SIZE = 1M USER_DATA_TBS_INIT_SIZE = 1M USER_TEMP_TBS_INIT_SIZE = 1M BUFFER_POOL_SIZE = 64 ( default : 16384 ) #磁盘表用的缓冲区大小 BUFFER_CHECK_POINT_INTERVAL_IN_FLUSH = 6000 #关于 disk table的option PORT_NO = 20300 #数据库端口 IPC_CHANNEL_COUNT = 5 # IPC 方式连接个数 CM_DISCONN_HIGHWATER_MARK = 10(default 3) # ALTIBASE维护手册 网络不稳定时数据库内部自动重试次数 AUTO_COMMIT = 0 #( default : 1 ) 手动提交 PREPARE_LOG_FILE_COUNT   = 25 #预打开的日志个数 REPLICATION_PORT_NO          = 30300 #复制端口号 REPLICATION_MAX_LOGFILE      = 2000 #异常时,自动放弃复制的日志个数极限,建议设置磁盘空间的 70-80%,即100G 空间就设置7000-8000个 REPLICATION_UPDATE_REPLACE   = 1 #数据冲突时,以传送过来的为基准 REPLICATION_PREFETCH_LOGFILE_COUNT = 10 #传送复制时预打开的日志个数 REPLICATION_SYNC_TUPLE_COUNT = 20000000 #replication sync 时,每个线程传送的个数 SELECT_HEADER_DISPLAY = 1 QUERY_TIMEOUT = 1000 FETCH_TIMEOUT = 360 DATABASE_IO_TYPE  = 1 # 0: Buffered I/O, 1:Direct I/O MULTIPLEXING_THREAD_COUNT = x #cpu core 个数小于 16个,不用特意设置,默认就是core 数 #cpu core 个数大于 16个,就设置为 8-16之间,具体判断。 MIN_LOG_RECORD_SIZE_FOR_COMPRESS = 128 MULTIPLEXING_MANAGER_INTERVAL = 1000 #默认为10000,根据情况设置为1000 或 10000 或100000。 MULTIPLEXING_MAX_ELAPSE_TIME = 10 MULTIPLEXING_POLL_TIMEOUT = 50000 QP_MSGLOG_FLAG = 2 altibase.properties 的部分内容可以通过 alter system or alter session 命令语修改,但重起数据库时,重新读 altibase.properties的内容,并反映到系统表。 1.1.2.4 应用license $ALTIBASE_HOME/conf/license文件包含了license信息,该license保证了数据库在一段时间内的使用时效,如果license文件不存在或者已经过期,ALTIBASE将不能正常启动,您可以向我们的技术支持(altibase@g-data.com.cn)提出申请来获得一个license 当您得到了一个新的license,你可以将该文件复制到你的$ALTIBASE_HOME/conf/目录下 ALTIBASE维护手册 $cp license $ALTIBASE_HOME/conf/. 注意:license文件没有扩展名 1.1.3 创建数据库 当ALTIBASE参数设置完成,使用CREATE DATABASE命令或者server脚本建立一个数据库,一旦数据库被创建,数据库的元表和数据字典等将会自动被创建 数据库的大小在建立过程中以一个参数的形式进行初始化,如果需要更多的空间,数据库将会自动进行扩展。 $isql -u sys -p manager -sysdba iSQL(sysdba)>startup process; iSQL(sysdba)>create database mydb initsize=10M noarchivelog; iSQL(sysdba)>startup service; 或者使用server脚本进行数据库的创建 $server create ² 注意:数据库名称mydb须和altibase.properties中DB_NAME参数设置一致,如有变更,采用server脚本创建的时候需要修改server脚本对应部分 1.2 HP-UX下的ALTIBASE安装 1.2.1 系统需求 1.2.1.1 操作系统 ALTIBASE 在HP主机上的OS及PATCH 要求为HP-UX11.31 及最新补丁集。 HP-UX11.31 版本比 HP-UX11.23版本在多线程应用的内存调用、CPU 调度等方面有很大的改进,对于ALTIBASE 约有1倍的性能影响。 # swlist -l patch | grep pthread # PHCO_38050 1.0 pthread library cumulative patch 要求PHCO_38050 以上 ALTIBASE维护手册 1.2.1.2 系统要求 l 创建用户 创建用于ALTIBASE安装和日常登录、维护的操作系统拥护,如ALTIBASE,建议采用sam工具创建 l HP-UX Kernal 参数修改 修改下列参数: shmmax = physical memory size shmmni 500 or more. shmseg 200 or more semmap semmni + 1 semmni 1000 semmns 4096 semmnu = semmni semume = semmni max_thread_proc 600 or more maxusers 64 or more maxdxiz 1G ; For 32bit application, it will be applied maxdsiz_64bit > Maximum DB size ; 可设置为物理内存大小 maxdsiz_64bit参数修改完成后重启主机。 + 设置方法:使用 ‘sam’ 工具 ->Kernel Configuration ->t - Tunables 确认方法:kctune | grep shm 等确认 l C++编译库环境 需要安装 aCC C++ 编译库 ALTIBASE 数据库使用aCC C++编译库,所以需要安装aCC C++编译库。 1.2.1.3 文件系统 需要保证下表所有目录的所属用户为altibase,并具有完全操作权限。 ALTIBASE维护手册 分类 目录例子 大小 说明 软件安装目录 /altibase 20G 除安装包以外,还有监控日志等 日志文件目录 /alti_logs 100G   数据文件目录 /alti_dbs0 MEM_MAX_DB_SIZE *1.4倍冗余率 与数据量大小相当 数据文件目录 /alti_dbs1 MEM_MAX_DB_SIZE *1.4倍冗余率 与数据量大小相当 归档日志目录 /alti_archive 50G*天数*1.5倍冗余率 以往经验来看,平均30分钟 checkpoint 一次删除100个日志文件,即 1天平均产生约5000个日志文件,ALTIBASE 日志文件大小为10M ,则需要 50G的空间 热备文件目录 /alti_backup MEM_MAX_DB_SIZE *天数*1.1倍冗余率 在线备份时备份1份数据文件 数据文件目录需要以 direct I/O 方式 mount。 设置方法: #mount -o mincache=direct,convosync=direct /dev/alti_dbs0 /alti_dbs0 /altibase_log 目录不能以direct I/O方式 mount。 1.2.1.4 网络环境 ALTIBASE 双机复制是基于TCP/IP网络实现,所以需要单独配置ALTIBASE双机复制光线网卡。即应用和数据库通信的网卡和主库和备库之间复制用的网卡是独立的。 应用服务器、主库服务器、备库服务器需要在一个网段上,而且以千兆网连接一个交换机。 ALTIBASE维护手册 1.2.2 安装过程 1.2.2.1 设置.profile $ cat .profile # For Altibase export ALTIBASE_HOME=$HOME/altibase_home export PATH= $ALTIBASE_HOME/bin:$PATH export LD_LIBRARY_PATH=$ALTIBASE_HOME/lib:$LD_LIBRARY_PATH export LD_LIBRARY_PATH_64=$ALTIBASE_HOME/lib:$LD_LIBRARY_PATH_64 export PTHREAD_SHARED_MUTEX_OLDSPIN=1 export PTHREAD_DISABLE_HANDOFF=ON export PTHREAD_FORCE_SCOPE_SYSTEM=1 export PERF_ENABLE=1 export _M_ARENA_OPTS=1:8 export TERM=xterm set -o vi alias ll='ls -al' alias findword='find . *|xargs grep' alias atp='vi $ALTIBASE_HOME/conf/altibase.properties' alias att='tail -f $ALTIBASE_HOME/trc/altibase_boot.log' 1.2.2.2 解压安装包 产品包下载地址:http://data.altibase.com/pkg.html http://data.altibase.com/download_back/altibase/altibase4/4.3.9patch/4.3.9.157/HP/altibase-IA64_HP_HPUX_11.31-64bit-4.3.9.157-release-aCC.tgz 创建目录: mkdir altibase_4.3.9.157 ln -s altibase-4.3.9.157 altibase_home mv *.tgz altibase_home 解压安装包 cd altibase_home gzip -cd *.tgz | tar -xvf - 1.2.2.3 修改altibase.properties DB_NAME = mydb #数据库名称 MEM_DB_DIR = /altibase_dbs0 # 内存表数据文件的存储目录,ping-pong checkpoint MEM_DB_DIR = /altibase_dbs1 #存储两份 ALTIBASE维护手册 DEFAULT_DISK_DB_DIR = /altibase/dbs0 #磁盘表数据文件的存储目录 LOGANCHOR_DIR = /altibase_logs #loganchor的存储目录,相当于oracle的 LOGANCHOR_DIR = /altibase_logs # control file,存储3份 LOGANCHOR_DIR = /altibase_logs # LOG_DIR       =  /altibase_logs   #logfile的存储目录 MEM_MAX_DB_SIZE = 40G #内存数据库的最大存储大小 SYS_DATA_TBS_INIT_SIZE = 1M #( default : 100M ) 磁盘表空间 SYS_TEMP_TBS_INIT_SIZE = 1M SYS_UNDO_TBS_INIT_SIZE = 1M USER_DATA_TBS_INIT_SIZE = 1M USER_TEMP_TBS_INIT_SIZE = 1M BUFFER_POOL_SIZE = 64 ( default : 16384 ) #磁盘表用的缓冲区大小 BUFFER_CHECK_POINT_INTERVAL_IN_FLUSH = 6000 #关于 disk table的option PORT_NO = 20300 #数据库端口 IPC_CHANNEL_COUNT = 5 # IPC 方式连接个数 CM_DISCONN_HIGHWATER_MARK = 10(default 3) #网络不稳定时数据库内部自动重试次数 AUTO_COMMIT = 0 #( default : 1 ) 手动提交 PREPARE_LOG_FILE_COUNT   = 25 #预打开的日志个数 REPLICATION_PORT_NO          = 30300 #复制端口号 REPLICATION_MAX_LOGFILE      = 2000 #异常时,自动放弃复制的日志个数极限,建议设置磁盘空间的 70-80%,即100G 空间就设置7000-8000个 REPLICATION_UPDATE_REPLACE   = 1 #数据冲突时,以传送过来的为基准 REPLICATION_PREFETCH_LOGFILE_COUNT = 10 #传送复制时预打开的日志个数 REPLICATION_SYNC_TUPLE_COUNT = 20000000 #replication sync 时,每个线程传送的个数 SELECT_HEADER_DISPLAY = 1 QUERY_TIMEOUT = 1000 FETCH_TIMEOUT = 360 DATABASE_IO_TYPE  = 1 # 0: Buffered I/O, 1:Direct I/O MULTIPLEXING_THREAD_COUNT = x #cpu core 个数小于 16个,不用特意设置,默认就是core 数 #cpu core 个数大于 16个,就设置为 8-16之间,具体判断。 MIN_LOG_RECORD_SIZE_FOR_COMPRESS = 128 MULTIPLEXING_MANAGER_INTERVAL = 1000 #默认为10000,根据情况设置为1000 或 10000 或100000。 MULTIPLEXING_MAX_ELAPSE_TIME = 10 MULTIPLEXING_POLL_TIMEOUT = 50000 QP_MSGLOG_FLAG = 2 altibase.properties 的部分内容可以通过 alter system or alter session 命令语修改,但重起数据库时,重新读 altibase.properties的内容,并反映到系统表。 ALTIBASE维护手册 1.2.2.4 应用license $ALTIBASE_HOME/conf/license文件包含了license信息,该license保证了数据库在一段时间内的使用时效,如果license文件不存在或者已经过期,ALTIBASE将不能正常启动,您可以向我们的技术支持(altibase@g-data.com.cn)提出申请来获得一个license 当您得到了一个新的license,你可以将该文件复制到你的$ALTIBASE_HOME/conf/目录下 $cp license $ALTIBASE_HOME/conf/. 注意:license文件没有扩展名 1.2.3 创建数据库 当ALTIBASE参数设置完成,使用CREATE DATABASE命令或者server脚本建立一个数据库,一旦数据库被创建,数据库的元表和数据字典等将会自动被创建 数据库的大小在建立过程中以一个参数的形式进行初始化,如果需要更多的空间,数据库将会自动进行扩展。 $isql -u sys -p manager -sysdba iSQL(sysdba)>startup process; iSQL(sysdba)>create database mydb initsize=10M noarchivelog; iSQL(sysdba)>startup service; 或者使用server脚本进行数据库的创建 $server create ² 注意:数据库名称mydb须和altibase.properties中DB_NAME参数设置一致,如有变更,采用server脚本创建的时候需要修改server脚本对应部分 1.3 部署多套数据库 1. 创建多个操作系统用户, 如 altibase,alti1,alti2,alti3,alti4 alti_i,alti_ii,alti_iii,alti_iv 用户是安装并启动数据库的用户, ALTIBASE 用户是为了方便连接4个库而建立的用户。 2. 确认 alti_i,alti_ii,alti_iii,alti_iv 用户的 ulimit -a ALTIBASE维护手册 确认每个用户的$HOME, 建议为: /altibase/altibase /altibase/alti_i /altibase/alti_ii /altibase/alti_iii /altibase/alti_iv 3. 重复1.1AIX或1.2HP-UX下的ALTIBASE安装的安装过程,设置.profile,解压安装包等, 修改 altibase.properties 时,以下参数需要不同的设置。如: MEM_DB_DIR = /altibase_dbs0/alti_i MEM_DB_DIR = /altibase_dbs1/alti_i LOGANCHOR_DIR = /altibase_logs/alti_i LOGANCHOR_DIR = /altibase_logs/alti_i LOGANCHOR_DIR = /altibase_logs/alti_i LOG_DIR       =  /altibase_logs/alti_i   PORT_NO = 20301 REPLICATION_PORT_NO          = 30301 注意:关闭 altibase 用户的 20300 端口数据库,或干脆不创建。 4. altibase 用户的 $HOME 下创建 bin 目录 $ whoami altibase $ mkdir bin $ cd bin $ cp $ALTIBASE_HOME/bin/is is1 # 编辑 is1 ,把20300 端口修改为 20301 $ cat is1 #!/bin/sh trap "" TSTP ${ALTIBASE_HOME}/bin/isql -s 127.0.0.1 -u sys -p manager -port 20301 $* 同样的办法在 altibase 用户的 $HOME/bin 目录下创建 is2, is3, is4,使得在 altibase 用户也能通过 is1-is4 访问 4个库。 1.4 升级 ALTIBASE升级一般按照如下流程进行: ALTIBASE维护手册 1. 确认原数据库的版本号 shell> altibase -v version 4.3.9.127 IA64_HP_HPUX_11.31-64bit-4.3.9.127-release-aCC (ia64-hp-hpux11.31) Jul 30 2008 14:55:20, binary db version 4.11.1, meta version 4.10.1, cm protocol version 4.5.1, replication protocol version 4.7.1 2. 确认连接 ALTIBASE的客户端IP地址 iSQL> select comm_name from v$session; 或 shell> netstat -a | grep 20300 3. 正常关闭复制 Active server: iSQL> select rep_gap from v$repgap; iSQL> alter replication rep1 stop; Standby server: iSQL> select rep_gap from v$repgap; iSQL> alter replication rep1 stop; 4. 正常关库 shell> server stop 5. 备份原数据库的 altibase.properties 以及 License shell> rm altibase_home 6. 安装新版本 shell> mkdir altibase_4.3.9.?; shell> ln -s altibase_4.3.9.? altibase_home shell> cd altibase_home shell> gzip -cd altibase_newpackage.tgz | tar -xvf - 7. 将license和properties文件复制到新的目录下 shell> cp altibase_4.3.9.127/conf/license altibase_home/conf/ 重新设定 altibase.properties 8. 启动 ALTIBASE shell> server start ALTIBASE维护手册 9. 启动复制 Active server: iSQL> alter replication rep1 start; Standby server: iSQL> alter replication rep1 start; 1.5 目录结构说明 安装后的ALTIBASE_HOME目录结构及说明如下: Ø admin ALTIBASE数据库管理员需要的一些日常管理脚本 Ø arch_logs 归档日志缺省存放目录,可在$ALTIBASE_HOME/conf/altibase.properties配置文件中通过配置参数ARCHIVE_DIR来修改 Ø audit audit工具配置文件audit.cfg存放在audit目录下 Ø bin 包含所有ALTIBASE的可执行程序及脚本, Ø conf 配置文件存放目录,主要包含以下几个文件 license:ALTIBASE许可信息文件 altibase.properties:ALTIBASE数据库配置文件 aexport.properties:aexport工具的配置文件 glogin.sql:需要自行创建,isql工具登陆后会依次执行该文件中内容 syspassword:sys用户口令加密文件 Ø dbs 数据文件缺省存放目录,可在$ALTIBASE_HOME/conf/altibase.properties配置文件中通过配置参数MEM_DB_DIR来修改 ALTIBASE采用Ping-Pong检查点机制,数据文件为两份,命名方式类似mydb-0-0(mydb为数据库名称,第一个0为Ping-Pong编号,只有0、1两个值,后一个0是文件编号,随内存库数据量的增加扩展),单个文件最大 ALTIBASE维护手册 1G, Ø include ALTIBASE的头文件存放目录 Ø install 包含一个altibase_env.mk文件,指定了一些环境参数,创建ALTIBASE应用程序时必须用到该文件 Ø lib ALTIBASE库文件存放目录 Ø logs 日志文件及控制文件缺省存放目录,可在$ALTIBASE_HOME/conf/altibase.properties中通过配置参数LOG_DIR和LOGANCHOR_DIR来修改 Ø msg ALTIBASE错误信息文件存放目录 Ø sample ALTIBASE示例程序存放目录 Ø trc ALTIBASE跟踪日志存放目录 第二部分 ALTIBASE维护 2.1 启动和停止 2.1.1 启动过程 一般来说有两个方法启动数据库 ALTIBASE维护手册 比较简单的方式是通过server脚本来启动数据库,使用ALTIBASE用户执行下述命令。 $server start 另外一种方法是以sysdba身份使用isql工具进行启动,server脚本的启动实际也是调用这种方式,下面显示如何使用iSQL来启动数据库的过程 $ isql -u sys -p manager -sysdba ----------------------------------------------------------------- Altibase Client Query utility. Release Version 4.3.9.150 Copyright 2000, ALTIBASE Corporation or its subsidiaries. All Rights Reserved. ----------------------------------------------------------------- ISQL_CONNECTION = TCP, SERVER = 127.0.0.1, PORT_NO = 20300 iSQL(sysdba)>startup Trying connect to database server. Connected with database server. TRANSITION TO PHASE : PROCESS Expired at 2009-09-04. TRANSITION TO PHASE : CONTROL TRANSITION TO PHASE : META [SM] Recovery Phase - 1 : Preparing Database [SM] Recovery Phase - 2 : Loading Database : Dynamic Memory Version => Loading Type-2 [SM] Recovery Phase - 3 : Skipping Recovery & Starting Threads... Refining Disk Table [SM] Refine Memory Table : ............................................................ [SUCCESS] [SM] Rebuilding Indices [Total Count:72] ****................................................................................................................................................ [SUCCESS] TRANSITION TO PHASE : SERVICE No IPC Initialize : Disabled --- STARTUP Process SUCCESS --- Command execute success. 2.1.2 启动阶段 ALTIBASE的启动分为四个阶段,可通过sysdba身份连接isql工具后采用startup命令加对应参数的方式将数据库启动到对应阶段 ALTIBASE维护手册 iSQL(sysdba)>STARTUP [PROCESS | CONTROL | META | SERVICE]; 2.1.2.1 Process 在此阶段可以进行数据库的创建,修改ALTIBASE部分参数等操作,如 $ isql -sysdba iSQL(sysdba)> startup process Trying connect to database server. Connected with database server. TRANSITION TO PHASE : PROCESS iSQL(sysdba)> create database mydb initsize=10M noarchivelog; 2.1.2.2 Control 在此阶段ALTIBASE完成数据文件的加载,为数据recovery作准备,并且归档模式的变更需要在此阶段完成,如 $ isql -sysdba iSQL(sysdba)> startup control Trying connect to database server. Connected with database server. TRANSITION TO PHASE : PROCESS TRANSITION TO PHASE : CONTROL iSQL(sysdba)> alter database archivelog; Alter success. iSQL(sysdba)> alter database noarchivelog; Alter success. 2.1.2.3 Meta 此阶段完成数据recovery,元表数据的上载,内存表数据、索引等的重建工作,如 iSQL(sysdba)> startup meta Database server is already running now TRANSITION TO PHASE : META [SM] Recovery Phase - 1 : Preparing Database [SM] Recovery Phase - 2 : Loading Database : Dynamic Memory Version => Loading Type-2 [SM] Recovery Phase - 3 : Skipping Recovery & Starting Threads... Refining Disk Table [SM] Refine Memory Table : ........................................................... [SUCCESS] [SM] Rebuilding Indices [Total Count:71] ****************.............................................................................................................................................. [SUCCESS] Command execute success. ALTIBASE维护手册 2.1.2.4 Service 数据库服务启动到此阶段方可对外提供服务,用户可以通过客户端连接数据库服务。 2.1.3 停止过程 和启动类似,ALTIBASE的停止也有两种方式。 使用server脚本:#server stop 以sysdba身份使用isql工具进行停止 $ isql -u sys -p manager -sysdba ----------------------------------------------------------------- Altibase Client Query utility. Release Version 4.3.9.150 Copyright 2000, ALTIBASE Corporation or its subsidiaries. All Rights Reserved. ----------------------------------------------------------------- ISQL_CONNECTION = TCP, SERVER = 127.0.0.1, PORT_NO = 20300 iSQL(sysdba)> shutdown normal Ok..Shutdown Proceeding.... TRANSITION TO PHASE : Shutdown Altibase shutdown normal success. 2.1.4 停止方式 ALTIBASE停止服务可以采用三种不同的强制级别,可通过sysdba身份连接isql工具后采用shutdown命令加对应参数的方式将数据库以不同的方式执行停止 iSQL(sysdba)>SHUTDOWN [NORMAL | IMMEDIATE | ABORT]; 2.1.4.1 Shutdown Normal 正常停止,数据库会等待所有的客户端连接关闭,然后执行如下步骤: l 关闭用户会话请求线程 l 关闭服务线程 l 关闭存储管理 l 终止数据库服务 ALTIBASE维护手册 2.1.4.2 Shutdown Immediate 以immediate方式停止数据库服务,在终止服务前,将会强制断掉所有连接,未提交的事务将会会滚。 2.1.4.3 Shutdown Abort 此方式将会强制kill掉ALTIBASE进程 2.1.5 Server脚本 日常维护可以通过server脚本快速的执行数据库的启动/停止等操作,该命令默认位置$ALTIBASE_HOME/bin/server,必须使用ALTIBASE用户运行,语法: server { start | stop | kill | status | create | restart } l server start : 启动 ALTIBASE l server stop : 正常结束 ALTIBASE l server kill : 强行结束 ALTIBASE l server status : 表信息 l server restart : 重起 ALTIBASE l server create : 创建数据库 2.2 参数配置说明 在ALTIBASE isql 中执行以下sql 可以查看所有的ALTIBASE 参数及其值。 Select name , value1 from V$tab; 参数分类 参数名 说明(默认值) 数据库 组成参数 BUFFER_POOL_MAX_SIZE 缓冲池最大值(131072page, 4GB) BUFFER_POOL_SIZE 缓冲池大小(16384page, 512MB) BUFFER_CHECK_POINT_INTERVAL_IN_FLUSH DRDB checkpoint 时的 flush 次数(60次) EXPAND_CHUNK_PAGE_COUNT 数据库扩张单位(128page, 4MB) MEM_DB_DIR MMDB 数据文件路径(?/dbs) DEFAULT_DISK_DB_DIR DRDB 数据文件路径(?/dbs) ALTIBASE维护手册 DB_NAME 数据库名(mydb) INSERT_HIGH_LIMIT 每页使用最大率 (90) INSERT_LOW_LIMIT 每页使用最小值(40) LOGANCHOR_DIR 日志控制文件路径(?/logs) LOG_DIR 日志文件路径(?/logs) LOG_FILE_SIZE 日志文件大小(10MB) MAX_CLIENT 客户端个数最大值(1000) MIN_PAGES_ON_DB_FREE_LIST 数据库可使用页的最小个数 (16) MIN_PAGES_ON_TABLE_FREE_LIST 表可使用页的最小个数 (1) MEM_MAX_DB_SIZE MMDB 可扩展的最大容量(4GB) PERS_PAGE_CHUNK_COUNT 分配永久数据页的个数 (3200page) SHM_DB_KEY 共享内存领域设置 (0) STARTUP_SHM_CHUNK_SIZE 共享内存块最大值 (1GB) SYS_DATA_TBS_EXTENT_SIZE DATA TABLESPACE 文件 extent 大小(256KB) SYS_DATA_TBS_INIT_SIZE DATA TABLESPACE 文件初始大小(100MB) SYS_DATA_TBS_MAX_SIZE DATA TABLESPACE 文件最大值(2GB) SYS_DATA_TBS_NEXT_SIZE DATA TABLESPACE 文件分配大小(1MB) SYS_DATA_TBS_DW_FILE_SIZE DW缓冲使用的文件大小 (system001.dbf , 10MB) SYS_UNDO_TBS_EXTENT_SIZE UNDO TABLESPACE文件 extent 大小(256KB) SYS_UNDO_TBS_INIT_SIZE UNDO TABLESPACE文件初始大小(100MB) SYS_UNDO_TBS_MAX_SIZE UNDO TABLESPACE文件最大值(2GB) SYS_UNDO_TBS_NEXT_SIZE UNDO TABLESPACE文件分配大小(1MB) ALTIBASE维护手册 SYS_TEMP_TBS_EXTENT_SIZE TEMP TABLESPACE文件 extent 大小(256KB) SYS_TEMP_TBS_INIT_SIZE TEMP TABLESPACE文件初始大小(100MB) SYS_TEMP_TBS_MAX_SIZE TEMP TABLESPACE文件最大值(2GB) SYS_TEMP_TBS_NEXT_SIZE TEMP TABLESPACE文件分配大小(1MB) TEMP_PAGE_CHUNK_COUNT 临时数据页每次分配的个数 (128page) USER_DATA_TBS_EXTENT_SIZE 用户 TABLESPACE 文件 extent 大小(256KB) USER_DATA_TBS_INIT_SIZE 用户 TABLESPACE 文件初始大小 (100MB) USER_DATA_TBS_MAX_SIZE 用户 TABLESPACE 文件最大值 (2GB) USER_DATA_TBS_NEXT_SIZE 用户 TABLESPACE 文件分配大小(1MB) USER_TEMP_TBS_EXTENT_SIZE 用户临时 TABLESPACE文件 extent 大小(256KB) USER_TEMP_TBS_INIT_SIZE 用户临时 TABLESPACE文件初始大小 (100MB) USER_TEMP_TBS_MAX_SIZE 用户临时 TABLESPACE文件最大值 (2GB) USER_TEMP_TBS_NEXT_SIZE 用户临时 TABLESPACE文件分配大小(1MB) VARIABLE_COLUMN_IN_ROW_SIZE 内存表 VARCHAR 类型的基本 in row size (32) 性能参数 AGER_WAIT_MAXIMUM ager sleep time 等待最大值(100000) AGER_WAIT_MINIMUM ager sleep time 等待最小值(100) BUFFER_FLUSH_INTERVAL_IN_SEC flush 线程的 flush 周期(10) BUFFER_FLUSH_PAGE_PCT_FOR_FLUSH_THREAD Flush 线程刷新时的页个数 (10) ALTIBASE维护手册 BUFFER_FLUSH_PAGE_PCT_FOR_VICTIM 普通事务线程查找 victim 过程中,刷新的页个数(10) DATABASE_IO_TYPE 磁盘 I/O 类型 (0) DDL_LOCK_TIMEOUT DDL 执行时,等待其他事务解锁的时间(0) FREE_FRAME_FILL_PCT 每次返回 free page的个数(10) FREE_FRAME_LIMIT_PCT 整个 pool 中 free page 的比率(10) GC_WAIT_MINIMUM disk garbage collecting 最小等待时间 (20) GC_WAIT_MAXIMUM disk garbage collecting 最大等待时间 (10000000) GC_MAX_UNDO_PAGE_CNT 每次能处理的 undo page 最大个数 (2) INDEX_BUILD_THREAD_COUNT index rebuilding 时的线程个数 (cpu * 2) INSPECTION_LARGE_HEAP_THRESHOLD 记录分配大量内存的 call stack 日志 (0) LOG_FILE_GROUP_COUNT 设定日志集合个数 (1) LFG_GROUP_COMMIT_UPDATE_TX_COUNT 日志集合提交线程个数 (80) LFG_GROUP_COMMIT_INTERVAL_USEC 日志集合 I/O 发生时间 (1000) LFG_GROUP_COMMIT_RETRY_USEC 日志集合 I/O 发生确认周期 (100) MAX_FIND_FREE_PAGE_SEC 查找 Free page 时,等待时间(300) NORMALFORM_MAXIMUM 条件语句规范化时的规范式( Normal Form ) 节点最大个数 (128) OPTIMIZER_MODE 语句优化模式(0)* 0 : cost_based optimization 1 : rule_based optimization PARALLEL_LOAD_FACTOR 数据库重起时 database refining 或 index rebuilding ALTIBASE维护手册 的线程个数 (cpu *2) REFINE_PAGE_COUNT 各Refine 线程处理的页个数 (50) MULTIPLEXING_THREAD_COUNT SHARED 服务线程个数 (cpu数) MULTIPLEXING_MANAGER_INTERVAL 服务线程工作周期 (10000) MULTIPLEXING_MAX_ELAPSE_TIME 所有服务线程的 Elapsed Time 大于此设定值,则生成 DEDICATED 服务线程 (100) IPC_MULTIPLEXING IPC 通信连接的服务线程类型 (0) TABLE_LOCK_ENABLE Lock level 控制参数 (1)* 连接会话参数 CM_BUF_SIZE 客户端服务器端通信时所分配的每个会话的通信buffer 大小 (64KB) CM_DISCONN_DETECT_TIME Session 管理线程工作周期 (3sec) CM_DISCONN_HIGHWATER_MARK 检查客户端非正常结束的次数 (3) IPC_CHANNEL_COUNT IPC 通信的通道最大个数 (0) IPC_CHANNEL_RETRY_COUNT IPC operation 结束后不会马上进入到 sleep 状态,而是 retry 几次 (0) MAX_LISTEN 使用 TCP/IP 或 UNIX DOMAIN 时的 listen queue大小(128Byte) NLS_USE Language Set(US7ASCII) PORT_NO 数据库连接端口号(20300) PSM_FILE_OPEN_LIMIT 每个会话能打开的 Stored Procedure 句丙个数 (16) XA_HEURISTIC_COMPLETE 强制结束为 PREPARE 状态(IN_DOUBT 状态)的 global transaction (0) XA_INDOUBT_TX_TIMEOUT 强制结束 global transaction的时间基准 (60) FETCH_TIMEOUT Fetch 超时(60) IDLE_TIMEOUT 连接超时(0) QUERY_TIMEOUT 查询超时(600) ALTIBASE维护手册 AUTO_COMMIT 自动提交模式 (1) ISOLATION_LEVEL 隔离级别(0) TRANSACTION_TABLE_SIZE 同时执行的事务个数(1024) 备份恢复参数 ARCHIVE_DIR 归档日志文件路径 (?/arch_logs) ARCHIVE_FULL_ACTION 确认归档日志备份空间 (0) ARCHIVE_THREAD_AUTOSTART 归档线程是否自动重起 (1) CHECK_POINT_ENABLED Checkpoint 有效性 (1) CHECK_POINT_INTERVAL_IN_LOG 周期发生Checkpoint 的条件-日志个数 (100) CHECK_POINT_INTERVAL_IN_SEC 周期发生Checkpoint 的条件- 事件(6000s) LOGGING_LEVEL 不同 SQL的跟踪日志级别(2) OPEN_LOG_FILE_COUNT 启动时打开的日志文件 (10) PREPARE_LOG_FILE_COUNT 预先打开的日志文件个数(5) TRANSACTION_DURABILITY_LEVEL 原子性级别(3) 复制参数 REPLICATION_CONNECT_TIMEOUT 复制连接超时 (10) REPLICATION_CONNECT_RECEIVE_TIMEOUT 复制接收线程超时 (60) REPLICATION_HBT_DETECT_HIGHWATER_MARK 判断为故障的连接次数(10) REPLICATION_HBT_DETECT_TIME HeartBeat 线程监控次数 (3) REPLICATION_KEEP_ALIVE_CNT KEEP_ALIVE 传送周期 (600) REPLICAITON_LOCK_TIMEOUT 加锁的等待时间 (5) REPLICATION_PORT_NO 复制端口号(0) REPLICATION_PREFETCH_LOGFILE_COUNT 预先打开的日志个数(0) REPLICATION_PROPAGATIO 是否使用复制 propagation (0) ALTIBASE维护手册 N REPLICATION_RECEIVE_TIMEOUT 返回信息的等待时间 (300) REPLICATION_SENDER_AUTO_START 复制传送线程自动启动与否 (1) REPLICATION_SENDER_SLEEP_TIMEOUT 故障时复制传送线程 sleep 的时间(10) REPLICATION_SYNC_MODE 复制同步模式(0) REPLICATION_SYNC_MAX_LIMIT 判断复制传送线程模式的基准 (50000) REPLICATION_SYNC_LOCK_TIMEOUT 复制全同步过程中,等待锁的时间 (30) REPLICATION_SYNC_TUPLE_COUNT Parallel sync 时,传送线程每次读取的日志个数 (30000) REPLICATION_TIMESTAMP_RESOLUTION 时间戳 Conflict resolution 方法 (0) REPLICATION_UPDATE_REPLACE update复制冲突解决方法(0) 日志信息参数 ALL_MSG_FLUSH 日志刷新模式 (1) QP_MSGLOG_COUNT 语句处理模块跟踪日志最大个数 (10) QP_MSGLOG_DIR 语句处理模块跟踪日志文件路径 (?/trc) QP_MSGLOG_FILE 语句处理模块跟踪日志文件名(altibase_qp.log) QP_MSGLOG_ SIZE 语句处理模块跟踪日志文件大小(10MB) RP_MSGLOG_COUNT 复制模块跟踪日志最大个数 (10) RP_MSGLOG_DIR 复制模块跟踪日志文件路径(?/trc) RP_MSGLOG_FILE 复制模块跟踪日志名(altibase_rp.log) RP_MSGLOG_SIZE 复制模块跟踪日志大小(10MB) SERVER_MSGLOG_COUNT 数据库跟踪日志最大个数(10) SERVER_MSGLOG_DIR 数据库跟踪日志文件路径(?/trc) ALTIBASE维护手册 SERVER_MSGLOG_COUNT 数据库跟踪日志最大个数(10) SERVER_MSGLOG_DIR 数据库跟踪日志文件路径(?/trc) SERVER_MSGLOG_FILE 数据库跟踪日志名(altibase_boot.log) SERVER_MSGLOG_SIZE 数据库跟踪日志文件大小(10MB) SM_MSGLOG_COUNT 存储管理模块跟踪日志最大个数 (10) SM_MSGLOG_DIR 存储管理模块跟踪日志文件路径 (?/trc) SM_MSGLOG_FILE 存储管理模块跟踪日志文件名(altibase_sm.log) SM_MSGLOG_SIZE 存储管理模块跟踪日志文件大小(10M) TRCLOG_DETAIL_PREDICATE altibase_boot.log 文件记录详细日志 (0) TRCLOG_SET_HBT_LOG HeartBeat 线程周期记录所有Host (0) TRCLOG_SET_INSERT_SM_LOG 复制接收服务器记录 insertXLog 时发生的 error message (0) TRCLOG_SET_LOCK_TIME Lock 设定时间 (0) TRC_DIR 跟踪日志文件路径 (?/trc) 其他参数 ADMIN_MODE 启动管理模式(0) DEFAULT_DATE_FORMAT 日期类型字段的数据默认形式(DD-MON-RRRR) EXEC_DDL_DISABLE 设置DDL 执行的与否(0) QUERY_STACK_SIZE 执行语句时计算/比较操作所需的内部 stack 大小 (128) SELECT_HEADER_DISPLAY 设定 iSQL 上是否只显示字段名,还是表名字段名一起显示 (0) 更详细的说明请参考Altibase Starting 英文技术手册 2.3 系统表说明 在ALTIBASE isql 中执行以下sql 可以查看所有的系统表以及用户、表。 Select * from tab; 系统表 表名 说明 ALTIBASE维护手册 分类 基本系统表 SYS_COLUMNS_ 表的列信息 SYS_CONSTRAINTS_ 表的约束条件信息 SYS_CONSTRAINT_COLUMNS_ 作为约束条件的列信息 SYS_DATABASE_ 数据库信息 SYS_GRANT_OBJECT_ 对象权限信息 SYS_GRANT_SYSTEM_ 系统权限信息 SYS_INDEX_COLUMNS_ 索引信息 SYS_DIRECTORIES_ 存储过程中控制文件的目录信息 SYS_INDEX_COLUMNS_ 索引的所有字段信息 SYS_INDICES_ 表的索引信息 SYS_PRIVILEGES_ 数据库权限信息 SYS_TABLES_ 表信息 SYS_TBS_USERS_ 表空间用户信息 SYS_USERS_ 用户信息 复制相关系统表 SYS_REPLICATIONS_ 复制信息 SYS_REPL_HOSTS_ 远程服务器信息 SYS_REPL_ITEMS_ 复制表的信息 存储过程相关系统表 SYS_PROCEDURES_ 存储过程和存储函数信息 SYS_PROC_PARAS_ 存储过程和存储函数的变量信息 SYS_PROC_PARSE_ 存储过程和存储函数的分析信息 SYS_PROC_RELATED_ 存储过程和存储函数访问的表信息 视图相关系统表 SYS_VIEWS_ 视图对象信息 SYS_VIEW_PARSE_ 视图对象分析信息 SYS_VIEW_RELATED_ 视图访问的对象信息 触发器相关系统表 SYS_TRIGGERS_ 触发器系统信息 SYS_TRIGGER_DML_TABLES_ 触发器访问的表信息 SYS_TRIGGER_STRINGS_ 触发器语句信息 SYS_TRIGGER_UPDATE_COLUMNS_ 触发器更新的字段信息 ALTIBASE维护手册 别名相关系统表 SYS_SYNONYMS_ 对象别名信息 更详细的说明请参考ALTIBASE Admin 英文技术手册 2.4 性能视图 在ALTIBASE isql 中执行以下sql 可以查看所有的ALTIBASE 性能视图。 Select * from V$tab; 视图名 说明 V$ALLCOLUMN 动态系统试图的字段信息 V$ARCHIVE 归档相关信息和备份信息 V$BUFFPAGEINFO 数据库缓冲的页信息 V$BUFFPOOL_STAT 数据库缓冲 hit ratio以及相关统计信息 V$DATABASE 内存数据库空间的内部信息 V$DATAFILES 表空间使用的数据文件信息 V$DB_FREEPAGELISTS 数据库可使用的页信息 V$DISKGC 磁盘空间回收 (disk garbage collection) 信息 V$DISKTBL_INFO 磁盘表信息 V$FLUSHINFO 刷新缓冲信息 V$INDEX 数据库索引信息 V$INSTANCE ALTIBASE 多阶段启动信息 V$LATCH 缓冲池的缓冲控制块(BCB) latch 统计信息 V$LFG 日志集合有关统计信息 V$LOCK 数据库所有表的锁信息 V$LOCK_STATEMENT Lock 和 statement 信息 V$LOCK_WAIT 事务之间等待的信息 V$LOG 日志控制信息 V$MEMGC 内存垃圾回收 (memory garbage collect) 信息 V$MEMSTAT ALTIBASE 进程使用的内存统计信息 V$MEMTBL_INFO 内存表状态信息 V$MUTEX 并发控制有关的 mutex 统计信息 V$PLANTEXT SQL 执行计划内容信息 V$PROCTEXT 存储过程内容信息 ALTIBASE维护手册 V$PROPERTY ALTIBASE 内部参数信息 V$REPEXEC ALTIBASE 内部参数信息 V$REPGAP 事务当前日志文件和传送到复制目标数据库的日志文件的差距信息 V$REPRECEIVER 复制的接收数据库信息 V$REPRECEIVER_TRANSTBL 复制的接收数据库的事务表信息 V$REPSENDER 复制的传送数据库信息 V$REPSENDER_TRANSTBL 复制的传送数据库的事务表信息 V$REPSYNC SYNC 中的表信息 V$SEGMENT 断状态、类型、分配的范围个数 V$SEQ 序列相关信息 V$SERVICE_THREAD 服务线程信息 V$SESSION ALTIBASE内部生成的对应客户端的会话信息 V$SESSIONMGR 会话统计信息 V$SESSTAT 会话状态信息 V$SQLTEXT 系统上执行的 SQL 内容信息 V$STABLE_MEM_DATAFILES 内存表数据文件信息 V$STATEMENT 会话的所有表达式信息 V$TABLE 所有性能视图的行和列信息 V$TABLESPACES 表空间信息 V$TRACELOG 内部模块跟踪日志信息 V$TRANSACTION 内部事务信息 V$TRANSACTION_MGR 内部事务管理信息 V$UNDO_BUFF_STAT Undo table space的缓冲池统计信息 V$UNDO_TBS 磁盘数据库Undo空间信息 V$VERSION ALTIBASE 版本信息 更详细的说明请参考ALTIBASE Admin 英文技术手册 2.5 日常监控 2.5.1 进程监控 可以通过以下三种方式确认进程状态: ALTIBASE维护手册 命令 说明 ps -ef | grep “altibase -p” 通过OS的ps命令语确认 ALTIBASE 进程是否存 在。ALTIBASE数据库只有一个进程,是一个多线程架构。 isql 通过ALTIBASE的iSQL工具,确认ALTIBASE进程是否存在。 netstat -an | grep 20300 通过OS的netstat命令语,确认 ALTIBASE数据库 的服务端口 (20300)是否在 listen 状态。 2.5.2 系统资源 2.5.2.1 CPU Ø CPU 用量确认 使用top, glance, nmon tool等工具进行确认 使用ps 确认进程的 CPU 用量 通过prstat -L 确认相应线程的 CPU Usage 通过pstack确认各个线程的 call stack并进行推断 通过truss确认 CPU Load Process ,进而统计 system call的值 Ø Full Table Scan, Long running SQL 通过查询v$memgc,v$diskgc,v$transaction,v$statement 视图,确认 SQL 通过V$statmenet 的 total_time确认 Long Running Query 通过altiProfile得到统计值 Ø 判断DirectExecute 的频度. 通过v$sesstat, v$sysstat的统计值(prepare count, execute count)推断 通过v$statement 推断 Ø 确认是否每次做 Prepare 通过v$sesstat, v$sysstat的统计值(prepare count, execute count)推断 可以通过 truss Direct Protocol确认 ALTIBASE维护手册 Ø 确认是否每次做Connect, Disconnect 通过v$sysstat的统计值(logon 信息)推断 netstat -an 端口信息确认 Ø 确认频繁调用的SQL 通过altiProfile工具得到统计值 通过v$sesstat, v$sysstat的统计值 execute count, execute_failure)推断 Ø 确认Checkpoint 量是否较大,或者I/O性能较慢影响了Checkpoint的性能 比较CPU Overload时间与Checkpoint 信息 Ø 复制的 Conflict 信息写日志频繁、 CPU使用率较高 确认 Conflict 信息写入周期 Ø 内存不足引发内存Paging(交换页),使得CPU Usage较高 通过vmstat确认 Paging 信息 2.5.2.2 DISK Ø 磁盘空间监控 监控文件系统,一般dbs目录达到70%,logs目录达到80%左右进行告警,防止磁盘满的问题 ALTIBASE的 REDO logfile不是循环方式,而是顺序增加,所以有long time query或复制出现问题的时候即使发生CHECKPOINT 也无法删除 logfile,所以存储logfile的目录有可能发生disk full。 复制参数REPLICATION_MAX_LOGFILE = 6000,即一旦日志文件超过6000个就发生 replication giveup,防止复制问题时的disk full。 Ø Disk 状态确认 通过sar工具确认 I/O 状态 通过glance, nmon Utility确认 I/O Usage. 通过iostat 确认 Device的 I/O Usage 通过I/O 性能测试程序测定Disk 的性能 ALTIBASE维护手册 Ø 由于内存CheckPoint导致 I/O Usage较高 比较I/O用量统计与CheckPoint的频率 $ALTIBASE_HOME/conf/altibase_sm.log 上记录check point 信息,如最近几次的Checkpoint的时间点、每次写入磁盘的文件容量、耗时等。 通过ALTIBASE参数修改,调整 Bulk I/O量,触发checkpoint 的参数为CHECK_POINT_INTERVAL_IN_SEC (时间周期) , CHECK_POINT_INTERVAL_IN_LOG (日志个数周期) ,在 $ALTIBASE_HOME/conf/altibase.properties里设置。 分离Logs、DBS的I/O 考虑调整Durability Level (3-2) 避免业务繁忙时发生Checkpoint Ø 内存不足,发生 Paging导致 DISK 用量较高 §查看Real Memory 用量 §确认vmstat中 fr, de, sr的值 §lotsfree, desfree, minfree Ø 由于没有进行File I/O 分散导致 Disk Bottleneck §通过iostat察看各DiskI/O 使用情况 §确认Volumn Group §AIX:lspv , lsvg lslv §HP:pvdisplay, vgdisplay , lvdisplay §通过iosnoop.d确认进行I/O操作的进程文件 Ø File Cache 使用不当导致 I/O较高 AIX: vmo -L ( maxperm, minperm, numperm), vmstat -v, svmon -P 考量Direct I/O的使用情况,并进行测试. 考虑Storage的 Cache Effect $ALTIBASE_HOME/conf/altibase.properties 的PREPARE_LOG_FILE_COUNT设置可以预打开日志文件 ALTIBASE维护手册 ,提高写日志的速度 Ø File Extend导致 I/O Usage较高 通过altibase_sm.log确认Extend信息 2.5.2.3 MEMORY Ø 内存表空间 内存表空间最大值$ALTIBASE_HOME/conf/altibase.properties的MEM_MAX_DB_SIZE指定MAX值 目前使用大小通过动态视图进行查询:select Alloc_Size from v$memstat where name ='Storage_Memory_Manager' 内存表空间达到MAX值的90% 以上告警,数据库本身是不能自动告警的。 Ø ALTIBASE进程大小 通过vmstat确认 free memory 利用top, glance, nmon等工具 不设置MAX值,但作为内存数据库,不能大于物理内存大小 如果服务器只用于内存数据库,则ALTIBASE 进程大小达到操作系统整个内存的80% 则最好告警,因为操作系统本身也需要一定的内存。 Ø 针对单表的容量监控 SELECT A.TABLE_OID TABLE_OID, C.USER_NAME||'.'||B.TABLE_NAME TABLE_NAME, A.MEM_SLOT_SIZE SLOT_SIZE, FIXED_ALLOC_MEM+VAR_ALLOC_MEM ALLOC_BYTE, FIXED_USED_MEM+VAR_USED_MEM USED_BYTE, ROUND( (FIXED_USED_MEM+VAR_USED_MEM)/(FIXED_ALLOC_MEM+VAR_ALLOC_MEM)*100,2) EFFICIENCY FROM V$MEMTBL_INFO A , SYSTEM_.SYS_TABLES_ B, SYSTEM_.SYS_USERS_ C WHERE A.TABLE_OID = B.TABLE_OID AND B.USER_ID = C.USER_ID AND C.USER_ID != 1 AND B.TABLE_TYPE = 'T' ORDER BY TABLE_NAME; ALTIBASE维护手册 Ø OS 内存相关参数 Limitation导致 Memory Allocation Error HP:maxdsiz, maxdsiz64 AIX:ulimit -a 确认data size Ø Swap不足导致内存Allocate Error HP: Early Swap Reservation AIX:Deferred 方式, 发生 Paging时分配 swap页 Ø ALTIBASE Process VSZ 增加导致 通过V$memstat 确认内存使用较多的模块, 比较当前值与 MAX值 Prepare模块占用内存较大时,可以考虑减少 Statement个数或 QP_MEMORY_CHUNK_SIZE大小 Max与当前值差异较大, 存在Execute或 Prepare领域扩大的痕迹则有可能运行过个别特殊的SQL 如果发现Transaction_Oid_List一直在增加,则应该是由 Long Running Query引起的内存增加问题 由于Multi ARENA的内存Leak问题 Ø 由于File Cache用量过高,导致整体的内存使用量过高 AIX: vmo -L ( maxperm, minperm, numperm), vmstat -v, svmon -P 考量Direct I/O的使用, 并进行测试. Ø 由于Shared Memory的使用导致内存的使用量较高 ipcs -ma Ø 由于内存不足导致应用性能下降 vmstat, 通过监控工具确认内存不足 确认vmstat中 paging相关信息 通过vmbypid.d确认各个进程的 Paging信息 Ø 发生 Leak导致系统内存资源枯竭 ALTIBASE维护手册 对内存使用量 VSZ的进程进行监控分析 确认VSZ持续增加的进程 通过purify, source review 确认发生 Leak的部分 2.5.2.4 NETWORK Ø Network确认 netstat -in / -an / -rn / -s 使用tcpdump确认Packet 通过测试ftp文件传送测定network的性能 通过Monitoring Utility确认Network bandwidth Ø Client 连接经常断开 确认altibase_boot.log中Timeout 信息 确认是否存在于DB Server间的 network问题 如果发生在特定Application部分,则很可能是Application 的问题 Thread的 Connection handling是否有问题? Statement 状态转换是否正确 特定OS下,使用pstack等工具直接Attach线程时有可能导致异常 Ø ALTIBASE 连接不上. 确认默认的连接客户端是否正常 通过ulimit -a, 确认Kernel的open files 通过lsof, netstat -a确认ALTIBASE的连接数 IPC连接不可用时,确认IPC 连接session和IPC_CHANNEL_COUNT属性 数据源没有问题的情况下,通过pstack确认发生问题的部分 通过truss isql确认问题 ?/trc 文件异常时,连接不上 ALTIBASE维护手册 Ø 发现很多fin_wait_2 状态的socket 只接收到FIN Segment的ack,停留在等待 FIN Segment的状态 考量tcp_fin_wait_2_timeout, tcp_keepalive_interval, tcp_keepidle等 Ø Dead Connection没有关闭 Client: 设定CONNECT_TIMEOUT 属性值 调整OS的keepalive probe值 Ø 停留在time_wait 状态的socket较多 考虑调整tcp_time_wait_interval等 Parameter connect, disconnect确认 Ø 停留在close_wait状态的socket较多 确认是Application socket还是ALTIBASE socket 如果是ALTIBASE 的 socket则表示ALTIBASE已经接收Fin Segment,但还没有close. 因为对方socket处在没有接收到 close的状态,所以进行fin_wait_2确认 由于调整了keepalive,虽然可以调整时间,但是有可能导致ALTIBASE异常 2.5.3 Session Ø 更多内容请参考v$session系统视图的说明 Ø 5.3.1 确认session连接IP及数量 select comm_name, count(comm_name) from v$session group by comm_name; Ø 5.3.2 强行断开特定 ssession ALTIBASE可以以 session 为单位,强行断开 只能在 -sysdba 权限执行 $isql -u sys -p manager -sysdba - iSQL> alter database DB_NAME session close ; ALTIBASE维护手册 2.5.4 Statement Ø 更过内容请参考v$statement系统视图的说明 Ø 查询执行时间最长的10个sql select session_id, execute_flag,execute_time/1000||' ms' exec_msec, fetch_time/1000||' ms' fetch_msec, rpad(substr(query,1,80),80,' ') qry from v$statement order by execute_time desc, execute_flag desc limit 10; 2.5.5 Lock Ø 更多内容请参考v$lock,v$lock_statement,v$lock_wait等系统视图的说明 Ø 查询锁关联的session,query,client等信息 select c.table_name, b.session_id as sid, b.id as stmt_id, b.tx_id, b.lock_desc || '(' || b.lock_cnt || ')' as 'LOCK', a.comm_name || ',' || a.client_pid as sid, b.query from v$session a , v$lock_statement b , system_.sys_tables_ c where a.id = b.session_id and b.table_oid = c.table_oid; Ø 确认事务间是否有等锁: select * from v$lock_wait; Ø 死锁监控机制 ALTIBASE 获得锁之前检查循环结构,将发生死锁的事务自动推出,并报错A deadlock situation has been detected,所以不发生死锁。 ALTIBASE维护手册 2.5.6 Long Term Transaction 2.5.6.1 定义 是长时间不提交的事务。 在 Non-Autocommit 模式下DML (INSERT/ UPDATE/ DELETE) 需要明示提交,只有SELECT是自动默认提交。 2.5.6.2 常见的 Long Term Transaction: 1. Non-Autocommit 模式下,isql 或 Admin Center 窗口中执行 DML(除 select)以后长时间不提交。 2. BULK UPDATE/ DELETE/INSERT BULK 操作不是我们一般说的批量操作,而是通过一个语句对于表进行几百万以上的一次性的变更操作。 如 UPDATE / DELETE / INERT INTO SELECT 等。 3. iloader iloder in 的时候一般不写或写-array -commit ,所以条条提交或 array * commit 提交,不是Long Term Transaction。 但 iloader out 很大表的时候,是一个Long Term Transaction ,如果正好out 的表被其他事务频繁访问,对系统有影响。 2.5.6.3 对系统的影响 1. CPU Long Term Transaction 长期占用shared service thread,从而其他应用只能生成并使用 dedicated service thread, 会导致整个数据库的性能并且CPU contention(竞争、调度等)也会加剧。 2. 内存 Garbage Collector 不能即使回收 dirty page,导致内存(V$MEMSTAT 的Transaction_OID_List 项)不断增加。 即使强行杀掉此 session 也需要一定的时间和内存空间,这与 oracle的回滚段被撑大一样的道理。即这种问题 oracle也有,但因为是磁盘数据库,所以不敏感。 ALTIBASE维护手册 3. 磁盘空间 Long term transaction长时间存在时,生成的所有日志文件都是active 状态,所以即使发生check point也不会被删除,日志文件目录 free 空间会越来越少。 4. 复制 REPLICATION_RECEIVE_TIMEOUT = 300秒内不能传送完Long Term Transaction 相关日志,则一直重复传送和传送失败。 加大REPLICATION_RECEIVE_TIMEOUT后,复制重新传送时系统压力会比较大。 2.5.6.4 注意事项 1. 强调一定要即使 commit,或进入isql 后第一个作 commit on; 2. BULK UPDATE/ DELETE/INSERT 时加 limit 条件。(应用中很少有这样的语句,都是人为操作) update test set c2=1 where c1=’A’ limit 10000; 3. 备库上执行iloader,不要影响主库。 2.5.6.5 解决方法 1. 等!耐心等!一定要耐心等!千万不要杀掉session或重起数据库,rollback 和 redo的费用是非常昂贵的。但 iloader 是可以杀掉的。 2. 如果这个Long term transaction已经结束了,但是复制积压时 在ALTIBASE 主库上执行: alter system set REPLICATION_RECEIVE_TIMEOUT=7200;(2个小时内应该差不多能传送完) alter replication rep_ibs_rating stop; alter replication rep_ibs_rating start; 故障解除后修改回300秒。 ALTIBASE维护手册 2.5.7 Logfile Space & Count - $HOME/altimon/altimon.log 中 LOG_DIR Free Space: [ 95052 ]Mbytes ß 存储logfile 的目录的剩余空间 2007/02/12 14:36:35 LOG File Count : 22 ß logfile的个数 - ALTIBASE的 REDO logfile不是循环方式,而是顺序增加,所以有long time query或复制出现问题的时候即使发生CHECKPOINT 也无法删除 logfile,所以存储logfile的目录有可能发生disk full。 - REPLICATION_MAX_LOGFILE = 7000,即一旦日志文件超过7000个就发生 replication giveup。 - 产生100个logfile的时候将发生CHECKPOINT, CHECKPOINT时候将删除已反映到 dbs的logfile 文件。 2.5.8 复制 常用复制状态监控sql,更多内容请参见复制章节 Ø 复制表信息: select LOCAL_USER_NAME, REPLICATION_NAME, REMOTE_TABLE_NAME from system_.SYS_REPL_ITEMS_ order by REPLICATION_NAME desc, REMOTE_TABLE_NAME asc; Ø 复制启动信息: select a.REP_NAME , a. SENDER_IP, a.PEER_IP,a. PEER_PORT, decode(b.IS_STARTED,1,'Running',0,'Not Running') from V$REPSENDER a, SYSTEM_.SYS_REPLICATIONS_ b where a.REP_NAME=b.REPLICATION_NAME; Ø 复制传送速度信息: select sysdate, ALTIBASE维护手册 rep_name, gap_sn rep_gap, gap_byte rep_gap_byte2, decode(gap_sn,0,0,gap_byte) rep_gap_byte from ( select b.rep_name rep_name, b.rep_gap gap_sn, (c.cur_write_lf_no - b.read_file_no) * d.logfile_size + (c.cur_write_lf_offset - b.read_offset) gap_byte from v$repgap b, v$lfg c, v$database d where c.lfg_id = b.read_lfg_id); 2.5.9 常用的altimon.sh 参考ALTIBASE监控指南_LMX_V1.0.doc 2.5.10 常用监控视图 $ALTIBASE_HOME/admin/adminview.sql脚本包含日常管理视图的创建语句,执行 $is -f $ALTIBASE_HOME/admin/adminview.sql 在数据库中创建管理视图。 2.5.10.1 ADM_SESSION /** 数据库的会话信息 ID:Session ID CONN_INFO:连接session的信息,包括连接方式,IP地址等信息 ACTIVE:活动状态 OPEN_STMT :此session打开的statement个数 CURRENT_STMT:正在执行的statement ID CLIENT_PID:客户端进程的PID PROTOCOL:连接PROTOCOL COMMIT_MODE:commit模式,是否自动提交 **/ CREATE OR REPLACE VIEW ADM_SESSION AS SELECT ID, REPLACE2(REPLACE2(COMM_NAME,'SOCKET-',NULL),'-SERVER',NULL) CONN_INFO, DECODE(ACTIVE_FLAG,1,'ACTIVE','INACTIVE') ACTIVE, OPENED_STMT_COUNT OPEN_STMT, CURRENT_STMT_ID CURRENT_STMT, CLIENT_PID,DECODE(PROTOCOL_SESSION, 1397051990,'HANDSHAKE FOR SYSDBA DISPATCH', 1094995278, 'HANDSHAKE FOR USERS DISPATCH', ALTIBASE维护手册 1129270862, 'CONNECT', 1145652046, 'DISCONNECT', 1229870668, 'INVALID', 1280460613, 'TIMEOUT', 1163022162, 'ERROR', 1347568976, 'PREPARE', 1163412803, 'EXECUTE', 1162103122, 'EXECDIRECT', 1179927368, 'FETCH', 1179796805, 'FREE', 1229931858, 'I/O ERROR', 1161905998, 'EAGAIN ERROR', 1480672077, 'XA COMMANDS', 1094929998, 'ACKNOWLEDGE', 1195725908, 'GET','UNKNOWN') PROTOCOL, DECODE(AUTOCOMMIT_FLAG,0,'Non AutoCommit','AutoCommit') COMMIT_MODE FROM V$SESSION; 2.5.10.2 ADM_TABLE /** 数据库用户表信息 TBS_NAME:表空间名 TABLE_NAME :表明 ALLOCSIZE:表占用的内存空间 TABLE_ID:表ID REPL_COUNT:复制数量 **/ CREATE OR REPLACE VIEW ADM_TABLE AS SELECT /* for Memory Tables */ 'SYS_TBS_MEMORY' TBS_NAME, B.USER_NAME||'.'||A.TABLE_NAME TABLE_NAME, (C.FIXED_ALLOC_MEM+C.VAR_ALLOC_MEM) ALLOCSIZE, TABLE_ID, REPLICATION_COUNT REPL_COUNT FROM SYSTEM_.SYS_TABLES_ A, SYSTEM_.SYS_USERS_ B, V$MEMTBL_INFO C WHERE A.USER_ID = B.USER_ID AND A.TABLE_OID = C.TABLE_OID AND A.TBS_ID=0 AND A.USER_ID != 1 AND A.TABLE_TYPE='T' UNION ALL SELECT /* for Disk Tables */ C.NAME TBS_NAME, B.USER_NAME||'.'||A.TABLE_NAME TABLE_NAME, C.A_EXTENT_PAGE_COUNT*C.PAGE_SIZE*D.EXTENT_TOTAL_COUNT ALLOCSIZE, TABLE_ID, REPLICATION_COUNT REPL_COUNT FROM SYSTEM_.SYS_TABLES_ A, SYSTEM_.SYS_USERS_ B, V$TABLESPACES C, V$SEGMENT D ALTIBASE维护手册 WHERE A.USER_ID = B.USER_ID AND A.TBS_ID = C.ID AND D.TABLE_OID = A.TABLE_OID AND D.SEGMENT_TYPE='TABLE' AND A.TBS_ID != 0 AND A.USER_ID != 1; 2.5.10.3 ADM_CONSTRAINT /** 数据库约束条件信息 TABLE_NAME:表名 CONSTRAINT_NAME:约束条件名 CON_TYPE:约束条件类型 INDEX_NAME:约束条件为索引时的索引名称 REFERENCE_TABLE:约束条件为外键时参照的表名 REFERENCE_INDEX:约束条件为外键时参照的索引名 **/ CREATE OR REPLACE VIEW ADM_CONSTRAINT AS SELECT C.USER_NAME||'.'||B.TABLE_NAME TABLE_NAME, A.CONSTRAINT_NAME, DECODE(A.CONSTRAINT_TYPE,0,'FOREIGNKEY', 1,'NOTNULL', 2,'UNIQUE', 3,'PRIMARYKEY', 4,'NULL', 5,'TIMESTAMP','UNKNOWN') CON_TYPE, D.INDEX_NAME, (SELECT TABLE_NAME FROM SYSTEM_.SYS_TABLES_ IT WHERE IT.TABLE_ID = A.REFERENCED_TABLE_ID) REFERENCE_TABLE, (SELECT INDEX_NAME FROM SYSTEM_.SYS_INDICES_ II WHERE II.INDEX_ID = A.REFERENCED_INDEX_ID) REFERENCE_INDEX FROM SYSTEM_.SYS_CONSTRAINTS_ A LEFT OUTER JOIN SYSTEM_.SYS_INDICES_ D ON A.INDEX_ID = D.INDEX_ID , SYSTEM_.SYS_TABLES_ B, SYSTEM_.SYS_USERS_ C WHERE A.TABLE_ID = B.TABLE_ID AND A.USER_ID = C.USER_ID ORDER BY TABLE_NAME ,CON_TYPE; 2.5.10.4 ADM_INDEX /** 数据库索引对象信息 INDEX_ID:索引ID TABLE_NAME:表名 TBS:索引的表空间名 UNIQUENESS:是否唯一索引 COLUMN_COUNT :字段个数 **/ CREATE OR REPLACE VIEW ADM_INDEX AS SELECT A.INDEX_ID, ALTIBASE维护手册 C.USER_NAME||'.'||B.TABLE_NAME TABLE_NAME, A.INDEX_NAME INDEX_NAME, NVL(D.NAME,'MEMORY') TBS, DECODE(IS_UNIQUE,'T','UNIQUE','NONUIQUE') UNIQUENESS, A.COLUMN_CNT COLUMN_COUNT FROM SYSTEM_.SYS_INDICES_ A LEFT OUTER JOIN V$TABLESPACES D ON A.TBS_ID = D.ID , SYSTEM_.SYS_TABLES_ B, SYSTEM_.SYS_USERS_ C WHERE A.TABLE_ID = B.TABLE_ID AND A.USER_ID = C.USER_ID AND C.USER_ID != 1 ORDER BY TABLE_NAME, INDEX_NAME ; 2.5.10.5 ADM_INDEX_COLUMN /** 索引的字段信息 TABLE_NAME:表名 INDEX_NAME:索引名 COLUMN_NAME:列名 COLUMN_ORDER:索引的排序方式(ASC/DESC) **/ CREATE OR REPLACE VIEW ADM_INDEX_COLUMN AS SELECT D.USER_NAME||'.'||C.TABLE_NAME TABLE_NAME, B.INDEX_NAME, E.COLUMN_NAME, DECODE(SORT_ORDER,'A','ASC','D','DESC') COLUMN_ORDER FROM SYSTEM_.SYS_INDEX_COLUMNS_ A, SYSTEM_.SYS_INDICES_ B, SYSTEM_.SYS_TABLES_ C, SYSTEM_.SYS_USERS_ D, SYSTEM_.SYS_COLUMNS_ E WHERE A.INDEX_ID = B.INDEX_ID AND A.TABLE_ID = C.TABLE_ID AND A.USER_ID = D.USER_ID AND A.COLUMN_ID = E.COLUMN_ID AND D.USER_ID != 1 ORDER BY TABLE_NAME, INDEX_NAME, INDEX_COL_ORDER; 2.5.10.6 ADM_VIEW /** 数据库视图对象信息 VIEW_NAME:视图名称 VIEW_ID:视图ID STATUS:视图状态 **/ CREATE OR REPLACE VIEW ADM_VIEW AS SELECT C.USER_NAME||'.'||B.TABLE_NAME VIEW_NAME, A.VIEW_ID, DECODE(A.STATUS,0,'VALID','INVALID') STATUS FROM SYSTEM_.SYS_VIEWS_ A, SYSTEM_.SYS_TABLES_ B, ALTIBASE维护手册 SYSTEM_.SYS_USERS_ C WHERE A.VIEW_ID = B.TABLE_ID AND A.USER_ID=C.USER_ID ORDER BY VIEW_NAME; 2.5.10.7 ADM_SEQUENCE /** 数据库序列对象信息 SEQ_NAME:序列名称 CURRENT_SEQ:当前序列号 START_SEQ :开始序列号 INCREMENT_SEQ:序列增加量 CACHE_SIZE:缓冲大小 MAX_SEQ:最大值 MIN_SEQ:最小值 IS_CYCLE:是否循环 **/ CREATE OR REPLACE VIEW ADM_SEQUENCE AS SELECT C.USER_NAME||'.'||B.TABLE_NAME SEQ_NAME, A.CURRENT_SEQ, A.START_SEQ, A.INCREMENT_SEQ, A.CACHE_SIZE, A.MAX_SEQ, A.MIN_SEQ, A.IS_CYCLE FROM V$SEQ A, SYSTEM_.SYS_TABLES_ B, SYSTEM_.SYS_USERS_ C WHERE A.SEQ_OID = B.TABLE_OID AND B.USER_ID = C.USER_ID AND B.USER_ID != 1 ORDER BY SEQ_NAME; 2.5.10.8 ADM_USER_SYS_PRIV /** 用户权限信息 USER_ID:用户ID USER_NAME:用户名 DEFAULT_TBS_ID:默认表空间ID DEFAULT_TBS_NAME:默认表空间名称 GRANTOR:权限赋予者 PRIV_NAME:权限名称 **/ CREATE OR REPLACE VIEW ADM_USER_SYS_PRIV AS SELECT Y.USER_ID, Y.USER_NAME, Y.DEFAULT_TBS_ID DEFAULT_TBS_ID, DECODE(Y.DEFAULT_TBS_ID, 0, 'SYS_TBS_MEMORY', (SELECT NAME FROM V$TABLESPACES WHERE ID = ALTIBASE维护手册 Y.DEFAULT_TBS_ID)) DEFAULT_TBS, (SELECT USER_NAME FROM SYSTEM_.SYS_USERS_ WHERE USER_ID = X.GRANTOR_ID) GRANTOR, (SELECT PRIV_NAME FROM SYSTEM_.SYS_PRIVILEGES_ WHERE PRIV_ID = X.PRIV_ID) PRIV_NAME FROM SYSTEM_.SYS_GRANT_SYSTEM_ X INNER JOIN SYSTEM_.SYS_USERS_ Y ON X.GRANTEE_ID = Y.USER_ID WHERE Y.USER_ID != 1 ORDER BY Y.USER_ID; 2.5.10.9 ADM_MEMTBL /** 内存表信息 TABLE_OID:表对象ID TABLE_NAME:表名 SLOT_SIZE:SLOT大小 ALLOC_BYTE:表分配到的内存空间 USED_BYTE:表示极使用内存空间 EFFICIENCY:使用率 **/ CREATE OR REPLACE VIEW ADM_MEMTBL AS SELECT A.TABLE_OID TABLE_OID, C.USER_NAME||'.'||B.TABLE_NAME TABLE_NAME, A.MEM_SLOT_SIZE SLOT_SIZE, FIXED_ALLOC_MEM+VAR_ALLOC_MEM ALLOC_BYTE, FIXED_USED_MEM+VAR_USED_MEM USED_BYTE, ROUND( (FIXED_USED_MEM+VAR_USED_MEM)/(FIXED_ALLOC_MEM+VAR_ALLOC_MEM)*100,2) EFFICIENCY FROM V$MEMTBL_INFO A ,SYSTEM_.SYS_TABLES_ B, SYSTEM_.SYS_USERS_ C WHERE A.TABLE_OID = B.TABLE_OID AND B.USER_ID = C.USER_ID AND C.USER_ID != 1 AND B.TABLE_TYPE = 'T' ORDER BY TABLE_NAME; 2.5.10.10 ADM_REPLICATION /** 数据库复制对象信息 REPLICATION_NAME:复制名称 XSN:复制序列号 REP_GAP:复制gap SENDER_STAT:Sender状态 RECEIVER_STAT:Receiver状态 ALTIBASE维护手册 **/ CREATE OR REPLACE VIEW ADM_REPLICATION AS SELECT A.REPLICATION_NAME, A.XSN, NVL(TO_CHAR(E.REP_GAP), 'N/A') AS REP_GAP, D.HOST_IP || ' (' || D.PORT_NO || '):' || DECODE(B.STATUS, 0, 'STOP', 1, 'RUN', 2, 'RETRY', 'STOP') AS SENDER_STAT, DECODE(C.REP_NAME, NULL, 'OFF', 'ON') AS RECEIVER_STAT FROM SYSTEM_.SYS_REPL_HOSTS_ D, SYSTEM_.SYS_REPLICATIONS_ A LEFT OUTER JOIN V$REPSENDER B ON A.REPLICATION_NAME = B.REP_NAME LEFT OUTER JOIN V$REPRECEIVER C ON A.REPLICATION_NAME = C.REP_NAME LEFT OUTER JOIN ( SELECT REP_NAME, MAX(REP_GAP) AS REP_GAP FROM V$REPGAP GROUP BY REP_NAME) E ON A.REPLICATION_NAME = E.REP_NAME WHERE A.REPLICATION_NAME = D.REPLICATION_NAME AND A.LAST_USED_HOST_NO = D.HOST_NO ORDER BY A.REPLICATION_NAME; 2.5.11 常用管理视图 2.5.11.1 会话:连接数据库的会话信息 <1>脚本 CREATE OR REPLACE VIEW ADM_SESSION AS SELECT ID, REPLACE2(REPLACE2(COMM_NAME,'SOCKET-',NULL),'-SERVER',NULL) CONN_INFO, DECODE(ACTIVE_FLAG,1,'ACTIVE','INACTIVE') ACTIVE, OPENED_STMT_COUNT OPEN_STMT, CURRENT_STMT_ID CURRENT_STMT, CLIENT_PID,DECODE(PROTOCOL_SESSION, 1397051990,'HANDSHAKE FOR SYSDBA DISPATCH', 1094995278, 'HANDSHAKE FOR USERS DISPATCH', 1129270862, 'CONNECT', 1145652046, 'DISCONNECT', 1229870668, 'INVALID', 1280460613, 'TIMEOUT', ALTIBASE维护手册 1163022162, 'ERROR', 1347568976, 'PREPARE', 1163412803, 'EXECUTE', 1162103122, 'EXECDIRECT', 1179927368, 'FETCH', 1179796805, 'FREE', 1229931858, 'I/O ERROR', 1161905998, 'EAGAIN ERROR', 1480672077, 'XA COMMANDS', 1094929998, 'ACKNOWLEDGE', 1195725908, 'GET','UNKNOWN') PROTOCOL, DECODE(AUTOCOMMIT_FLAG,0,'Non AutoCommit','AutoCommit') COMMIT_MODE FROM V$SESSION; <2>输出字段注释: ID : Session ID CONN_INFO : 连接 session 的信息(TCP/IPC/UNIX Domain连接方式: IP 地址) ACTIVE : Action 状态 OPEN_STMT : 此 session 打开的 Statement 个数 CURRENT_STMT : 正在执行的 Statement ID PROTOCOL : 连接 Protocol COMMIT_MODE : Commit 方式 <3>输出举例: iSQL> ID -------------- CONN_INFO ------------------------------------------------------------------------------------------------------------------------------------ ACTIVE OPEN_STMT CURRENT_STMT CLIENT_PID --------------------------------------------------------------------- ALTIBASE维护手册 PROTOCOL COMMIT_MODE -------------------------------------------------- 20 INET : 127.0.0.1 ACTIVE 1 0 25589 EXECDIRECT AutoCommit 1 row selected. 2.5.11.2 会话:察看会话的通信连接信息 <1>脚本 iSQL> select comm_name from v$session; <3>输出举例: SOCKET-INET-SERVER : 192.168.254.73 SOCKET-INET-SERVER : 127.0.0.1 SOCKET-INET-SERVER : 192.168.254.73 SOCKET-IPC-SERVER : Local Host SOCKET-IPC-SERVER : Local Host SOCKET-INET-SERVER : 192.168.254.73 6 rows selected. 2.5.11.3 会话:按照用户统计会话 每个用户的执行语句数量和状态 <1>脚本 iSQL> select b.DB_USERNAME,a.state,count(*) from v$statement a ,v$session b where a.session_id=b.id group by b.DB_USERNAME,a.state; <2>输出字段注释: STATE The statement status: 0: Initialization status where the statement is assigned 1: Statement is prepared 2: Statement is preparing to fetch ALTIBASE维护手册 3: Statement is performing fetch <3>输出举例: DB_USERNAME STATE COUNT --------------------------------------------- IBILLAPP 0 118 IBILLAPP 1 3063 IBILLAPP 3 5 SYS 3 474 SYS 0 2 5 rows selected. 2.5.11.4 会话:通过会话查询产生锁的应用进程信息 <1>每个session的加锁语句数量 iSQL> select SESSION_ID,count(*) from V$LOCK_STATEMENT group by session_id; SESSION_ID COUNT --------------------------------------------- 4996 1 10668 1 26131 8 26132 1 26134 8 26133 1 26137 8 26150 1 8 rows selected. <2>察看一个session 是由哪个进程产生的 iSQL> select CLIENT_PID from v$session where id=26131; ALTIBASE维护手册 CLIENT_PID ----------------------- 258666 1 row selected. iSQL> select CLIENT_PID from v$session where id=26134; CLIENT_PID ----------------------- 364756 1 row selected. iSQL> select CLIENT_PID from v$session where id=26137; CLIENT_PID ----------------------- 414710 1 row selected. <3>通过进程号察看进程信息表 ocs_bill1:ibillapp:/home/paapp>ps -ef|grep 258666 ibillapp 258666 1 0 Jul 21 - 35:00 /pkg21/bin/billing_deal12 -c /pkg21/cfg/billing_deal12.cfg ibillapp 291780 397812 0 10:33:06 pts/2 0:00 grep 258666 ocs_bill1:ibillapp:/home/paapp>ps -ef|grep 364756 ibillapp 364756 1 0 Jul 21 - 41:01 /pkg21/bin/billing_deal13 -c /pkg21/cfg/billing_deal13.cfg ibillapp 381502 397812 0 10:33:39 pts/2 0:00 grep 364756 ocs_bill1:ibillapp:/home/paapp>ps -ef|grep 414710 ibillapp 279060 397812 0 10:34:56 pts/2 0:00 grep 414710 ibillapp 414710 1 0 Jul 21 - 32:20 /pkg21/bin/billing_deal10 -c /pkg21/cfg/billing_deal10.cfg 2.5.11.5 看一看哪个session在对这个表进行操作 iSQL> select b.id,a.state,a.query from v$statement a ,v$session b where a.session_id=b.id and query like '%user_bill_plan%'; ID STATE ------------------------------------ QUERY ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ALTIBASE维护手册 9062 0 insert into user_bill_plan values('13251482198','G0243','0','G0243',to_date('20090101000000','YYYYMMDDHH24MISS'),to_date('20500101000000','YYYYMMDDHH24MISS'),'CQ','PRODUC',50,0,to_date('20090101000000','YYYYMMDDHH24MISS')) 9122 3 select b.id,a.state,a.query from v$statement a ,v$session b where a.session_id=b.id and query like '%user_bill_plan%' 2 rows selected. 2.5.11.6 锁:会话的锁信息 <1>脚本 CREATE VIEW ADM_LOCK AS SELECT B.SESSION_ID || '(' || A.COMM_NAME || ')' as SID, A.CLIENT_PID, B.TX_ID, A.DB_USERNAME || '.' ||C.TABLE_NAME as TABLENAME, B.LOCK_DESC || '(' || B.IS_GRANT || ')' as LOCK_S , B.QUERY FROM V$SESSION A , V$LOCK_STATEMENT B , SYSTEM_.SYS_TABLES_ C WHERE A.ID = B.SESSION_ID AND B.TABLE_OID = C.TABLE_OID; <2>输出字段注释: SID : Session ID(连接IP 等信息) CLIENT_PID : 客户端进程号 TX_ID : Transaction ID ALTIBASE维护手册 TABLENAME: 被锁的表名 LOCK_S: 锁的类型 QUERY : 加锁的语句 <3>输出举例: iSQL> 2.5.11.7 锁:查看每张表上的加锁语句数量 <1>脚本 iSQL> select table_oid,count(*) from v$lock_statement group by table_oid; <3>输出举例: TABLE_OID COUNT --------------------------------------------- 11849048 1 10955840 61 9888616 56 3 rows selected. 2.5.11.8 锁:看表上的锁信息 < 1>脚本 select c.user_name, a.table_name, b.lock_desc, b.lock_cnt, b.trans_id from SYSTEM_.SYS_TABLES_ a,v$lock b,SYSTEM_.SYS_USERS_ c where a.table_oid=b.table_oid; <2>输出举例 USER_NAME -------------------------------------------- TABLE_NAME LOCK_DESC ------------------------------------------------------------------------------- LOCK_CNT TRANS_ID ------------------------------------ ALTIBASE维护手册 No rows selected. 2.5.11.9 查询约束条件对应关系 <1>脚本 CREATE OR REPLACE VIEW ADM_CONSTRAINT AS SELECT C.USER_NAME||'.'||B.TABLE_NAME TABLE_NAME, A.CONSTRAINT_NAME, DECODE(A.CONSTRAINT_TYPE,0,'FOREIGNKEY', 1,'NOTNULL', 2,'UNIQUE', 3,'PRIMARYKEY', 4,'NULL', 5,'TIMESTAMP','UNKNOWN') CON_TYPE, D.INDEX_NAME, (SELECT TABLE_NAME FROM SYSTEM_.SYS_TABLES_ IT WHERE IT.TABLE_ID = A.REFERENCED_TABLE_ID) REFERENCE_TABLE, (SELECT INDEX_NAME FROM SYSTEM_.SYS_INDICES_ II WHERE II.INDEX_ID = A.REFERENCED_INDEX_ID) REFERENCE_INDEX FROM SYSTEM_.SYS_CONSTRAINTS_ A LEFT OUTER JOIN SYSTEM_.SYS_INDICES_ D ON A.INDEX_ID = D.INDEX_ID , SYSTEM_.SYS_TABLES_ B, SYSTEM_.SYS_USERS_ C WHERE A.TABLE_ID = B.TABLE_ID AND A.USER_ID = C.USER_ID ORDER BY TABLE_NAME ,CON_TYPE; <2>输出字段注释: TABLE_NAME : 表名 CONSTRAINT_NAME : 约束条件名 CON_TYPE : 约束条件类型 INDEX_NAME : 此约束条件为索引时,显示索引名 REFERENCE_TABLE : 约束条件为外键时,参照的表名 REFERENCE_INDEX : 约束条件为外键时,参照的索引名 ALTIBASE维护手册 <3>输出举例: OCS.TB_BIL_ACCT_BALANCE __SYS_CON_NOT_NULL_ID_1112 NOTNULL OCS.TB_BIL_ACCT_BALANCE __SYS_CON_NOT_NULL_ID_1111 NOTNULL OCS.TB_BIL_ACCT_BALANCE __SYS_CON_NOT_NULL_ID_1110 NOTNULL OCS.TB_BIL_ACCT_BALANCE __SYS_CON_NOT_NULL_ID_1113 NOTNULL OCS.TB_BIL_ACCT_BALANCE __SYS_CON_NOT_NULL_ID_1106 NOTNULL OCS.TB_BIL_ACCT_BALANCE __SYS_CON_NOT_NULL_ID_1107 NOTNULL OCS.TB_BIL_ACCT_BALANCE __SYS_CON_NOT_NULL_ID_1108 NOTNULL OCS.TB_BIL_ACCT_BALANCE __SYS_CON_NOT_NULL_ID_1109 NOTNULL SYS.CMCU_VOICE_SESSION_STORE __SYS_CON_NOT_NULL_ID_54 NOTNULL SYS.CMCU_VOICE_SESSION_STORE __SYS_CON_PRIMARY_ID_55 PRIMARYKEY __SYS_IDX_ID_127 SYS.IF_SERV __SYS_CON_NOT_NULL_ID_51 NOTNULL ALTIBASE维护手册 SYS.IF_SERV __SYS_CON_NOT_NULL_ID_46 NOTNULL SYS.IF_SERV __SYS_CON_NOT_NULL_ID_43 NOTNULL SYS.IF_SERV __SYS_CON_NOT_NULL_ID_44 NOTNULL SYS.IF_SERV __SYS_CON_NOT_NULL_ID_45 NOTNULL SYS.IF_SERV __SYS_CON_NOT_NULL_ID_47 NOTNULL SYS.IF_SERV __SYS_CON_NOT_NULL_ID_52 NOTNULL SYS.IF_SERV __SYS_CON_NOT_NULL_ID_48 NOTNULL SYS.IF_SERV __SYS_CON_NOT_NULL_ID_49 NOTNULL SYS.IF_SERV __SYS_CON_NOT_NULL_ID_50 NOTNULL SYS.IF_SERV __SYS_CON_PRIMARY_ID_53 PRIMARYKEY __SYS_IDX_ID_126 SYS.REP_TEST __SYS_CON_NOT_NULL_ID_595 NOTNULL SYS.REP_TEST __SYS_CON_PRIMARY_ID_596 PRIMARYKEY ALTIBASE维护手册 __SYS_IDX_ID_239 SYS.TB_TEST1 __SYS_CON_PRIMARY_ID_42 PRIMARYKEY __SYS_IDX_ID_122 24 rows selected. 2.5.11.10 索引信息 <1>脚本 CREATE OR REPLACE VIEW ADM_INDEX AS SELECT A.INDEX_ID, C.USER_NAME||'.'||B.TABLE_NAME TABLE_NAME, A.INDEX_NAME INDEX_NAME, NVL(D.NAME,'MEMORY') TBS, DECODE(IS_UNIQUE,'T','UNIQUE','NONUIQUE') UNIQUENESS, A.COLUMN_CNT COLUMN_COUNT FROM SYSTEM_.SYS_INDICES_ A LEFT OUTER JOIN V$TABLESPACES D ON A.TBS_ID = D.ID, SYSTEM_.SYS_TABLES_ B, SYSTEM_.SYS_USERS_ C WHERE A.TABLE_ID = B.TABLE_ID AND A.USER_ID = C.USER_ID AND C.USER_ID != 1 ORDER BY TABLE_NAME, INDEX_NAME ; <2>输出字段注释: INDEX_ID : Index ID TABLE_NAME : 表名 TBS : 索引的表空间名 UNIQUENESS : 是否为唯一索引 COLUMN_COUNT : 字段个数 <3>输出举例: ALTIBASE维护手册 127 SYS.CMCU_VOICE_SESSION_STORE __SYS_IDX_ID_127 MEMORY UNIQUE 1 124 SYS.IF_SERV IF_SERV_IDX1 MEMORY NONUIQUE 2 125 SYS.IF_SERV IF_SERV_IDX2 MEMORY NONUIQUE 3 126 SYS.IF_SERV __SYS_IDX_ID_126 MEMORY UNIQUE 1 239 SYS.REP_TEST __SYS_IDX_ID_239 MEMORY UNIQUE 1 123 SYS.TB_TEST1 TB_TEST1_IDX MEMORY NONUIQUE 2 122 SYS.TB_TEST1 __SYS_IDX_ID_122 MEMORY UNIQUE 1 7 rows selected. 2.5.11.11 索引的各个字段名 <1>脚本 CREATE OR REPLACE VIEW ADM_INDEX_COLUMN AS SELECT D.USER_NAME||'.'||C.TABLE_NAME TABLE_NAME, B.INDEX_NAME, ALTIBASE维护手册 E.COLUMN_NAME, DECODE(SORT_ORDER,'A','ASC','D','DESC') COLUMN_ORDER FROM SYSTEM_.SYS_INDEX_COLUMNS_ A, SYSTEM_.SYS_INDICES_ B, SYSTEM_.SYS_TABLES_ C, SYSTEM_.SYS_USERS_ D, SYSTEM_.SYS_COLUMNS_ E WHERE A.INDEX_ID = B.INDEX_ID AND A.TABLE_ID = C.TABLE_ID AND A.USER_ID = D.USER_ID AND A.COLUMN_ID = E.COLUMN_ID AND D.USER_ID != 1 ORDER BY TABLE_NAME, INDEX_NAME, INDEX_COL_ORDER; <2>输出字段注释: TABLE_NAME : 表名 INDEX_NAME : 索引名 COLUMN_NAME : 字段名 COLUMN_ORDER : 索引的 Ordering 顺序(ASC/DESC) <3>输出举例: SYS.CMCU_VOICE_SESSION_STORE __SYS_IDX_ID_127 OCP_STR_SESSION_ID ASC SYS.IF_SERV IF_SERV_IDX1 ACC_NBR ASC SYS.IF_SERV IF_SERV_IDX1 AREA_CODE ASC SYS.IF_SERV IF_SERV_IDX2 STATE ASC SYS.IF_SERV IF_SERV_IDX2 EFF_DATE ASC ALTIBASE维护手册 SYS.IF_SERV IF_SERV_IDX2 EXP_DATE ASC SYS.IF_SERV __SYS_IDX_ID_126 SERV_ID ASC SYS.REP_TEST __SYS_IDX_ID_239 A ASC SYS.TB_TEST1 TB_TEST1_IDX C3 DESC SYS.TB_TEST1 TB_TEST1_IDX C1 ASC SYS.TB_TEST1 __SYS_IDX_ID_122 C1 ASC 11 rows selected. 2.5.11.12 视图信息 <1>脚本 CREATE OR REPLACE VIEW ADM_VIEW AS SELECT C.USER_NAME||'.'||B.TABLE_NAME VIEW_NAME, A.VIEW_ID, DECODE(A.STATUS,0,'VALID','INVALID') STATUS FROM SYSTEM_.SYS_VIEWS_ A, SYSTEM_.SYS_TABLES_ B, SYSTEM_.SYS_USERS_ C WHERE A.VIEW_ID = B.TABLE_ID AND A.USER_ID=C.USER_ID ORDER BY VIEW_NAME; <2>输出字段注释: VIEW_NAME : 视图名 VIEW_ID : View Object ID STATUS : 视图状态 ALTIBASE维护手册 <3>输出举例: 2.5.11.13 序列信息 <1>脚本 CREATE OR REPLACE VIEW ADM_SEQUENCE AS SELECT C.USER_NAME||'.'||B.TABLE_NAME SEQ_NAME, A.CURRENT_SEQ, A.START_SEQ, A.INCREMENT_SEQ, A.CACHE_SIZE, A.MAX_SEQ, A.MIN_SEQ, A.IS_CYCLE FROM V$SEQ A, SYSTEM_.SYS_TABLES_ B, SYSTEM_.SYS_USERS_ C WHERE A.SEQ_OID = B.TABLE_OID AND B.USER_ID = C.USER_ID AND B.USER_ID != 1 ORDER BY SEQ_NAME; <2>输出字段注释: SEQ_NAME : 序列名 CURRENT_SEQ : 当前序列号 START_SEQ : 序列的起始号 INCREMENT_SEQ : 序列的增加量 CACHE_SIZE : 缓冲大小 MAX_SEQ : 最大值 MIN_SEQ : 最小值 IS_CYCLE : 是否循环 <3>输出举例: ALTIBASE维护手册 SYS.SEQ1 30 30 2 20 9223372036854775806 0 NO 1 row selected. 2.5.11.14 数据库用户的权限 <1>脚本 CREATE OR REPLACE VIEW ADM_USER_SYS_PRIV AS SELECT Y.USER_ID, Y.USER_NAME, Y.DEFAULT_TBS_ID DEFAULT_TBS_ID, DECODE(Y.DEFAULT_TBS_ID, 0, 'SYS_TBS_MEMORY', (SELECT NAME FROM V$TABLESPACES WHERE ID = Y.DEFAULT_TBS_ID)) DEFAULT_TBS, (SELECT USER_NAME FROM SYSTEM_.SYS_USERS_ WHERE USER_ID = X.GRANTOR_ID) GRANTOR, (SELECT PRIV_NAME FROM SYSTEM_.SYS_PRIVILEGES_ WHERE PRIV_ID = X.PRIV_ID) PRIV_NAME FROM SYSTEM_.SYS_GRANT_SYSTEM_ X INNER JOIN SYSTEM_.SYS_USERS_ Y ON X.GRANTEE_ID = Y.USER_ID WHERE Y.USER_ID != 1 ORDER BY Y.USER_ID; <2>输出字段注释: USER_ID : User id USER_NAME : 用户名 DEFAULT_TBS_ID : 默认表空间 ID DEFAULT_TBS_NAME : 默认表空间名 GRANTOR : 权限赋予者 PRIV_NAME : 权限名 ALTIBASE维护手册 <3>输出举例: 2 SYS 0 SYS_TBS_MEMORY SYSTEM_ CREATE_PROCEDURE 2 SYS 0 SYS_TBS_MEMORY SYSTEM_ CREATE_SEQUENCE 2 SYS 0 SYS_TBS_MEMORY SYSTEM_ CREATE_SESSION 2 SYS 0 SYS_TBS_MEMORY SYSTEM_ CREATE_TABLE 2 SYS 0 SYS_TBS_MEMORY SYSTEM_ CREATE_VIEW 2 SYS 0 SYS_TBS_MEMORY SYSTEM_ CREATE_TRIGGER 2 SYS 0 SYS_TBS_MEMORY SYSTEM_ CREATE_SYNONYM 66 OCS 0 SYS_TBS_MEMORY SYS CREATE_PROCEDURE 66 OCS 0 SYS_TBS_MEMORY ALTIBASE维护手册 SYS CREATE_SEQUENCE 66 OCS 0 SYS_TBS_MEMORY SYS CREATE_SESSION 66 OCS 0 SYS_TBS_MEMORY SYS CREATE_TABLE 66 OCS 0 SYS_TBS_MEMORY SYS CREATE_VIEW 66 OCS 0 SYS_TBS_MEMORY SYS CREATE_TRIGGER 66 OCS 0 SYS_TBS_MEMORY SYS CREATE_SYNONYM 14 rows selected. 2.5.11.15 内存表信息 <1>脚本 CREATE OR REPLACE VIEW ADM_MEMTBL AS SELECT A.TABLE_OID TABLE_OID, C.USER_NAME||'.'||B.TABLE_NAME TABLE_NAME, A.MEM_SLOT_SIZE SLOT_SIZE, FIXED_ALLOC_MEM+VAR_ALLOC_MEM ALLOC_BYTE, FIXED_USED_MEM+VAR_USED_MEM USED_BYTE, ROUND( (FIXED_USED_MEM+VAR_USED_MEM)/(FIXED_ALLOC_MEM+VAR_ALLOC_MEM)*100,2) EFFICIENCY ALTIBASE维护手册 FROM V$MEMTBL_INFO A ,SYSTEM_.SYS_TABLES_ B, SYSTEM_.SYS_USERS_ C WHERE A.TABLE_OID = B.TABLE_OID AND B.USER_ID = C.USER_ID AND C.USER_ID != 1 AND B.TABLE_TYPE = 'T' ORDER BY TABLE_NAME; <2>输出字段注释: TABLE_OID : Table Object ID TABLE_NAME : 表名 SLOT_SIZE : Slot 大小 ALLOC_BYTE : 表分配到的内存空间 USED_BYTE : 实际使用内存空间 EFFICIENCY : 使用率 <3>输出举例: 1215793960 OCS.TB_BIL_ACCT_BALANCE 96 32768 9600 29.3 1215805256 SYS.CMCU_VOICE_SESSION_STORE 6384 32768 0 0 1215802432 SYS.IF_SERV 184 32768 0 0 10139464 SYS.KIM_TEST 56 32768 112 0.34 4494896 SYS.REP_TEST 32 32768 224 0.68 1215799608 SYS.TB_TEST1 ALTIBASE维护手册 120 32768 0 0 6 rows selected. 2.5.11.16 内存使用信息 iSQL> select name, alloc_size, max_total_size from v$memstat order by 3 desc; NAME                                      ALLOC_SIZE           MAX_TOTAL_SIZE       ---------------------------------------------------------------------- Storage_Memory_Manager           31259455984          31259455984 Index_Memory                              10471698632          10471698632 Query_Prepare                             1398411688           5156725288 Transaction_OID_List                   1835456              2207365272 Storage_Memory_Ager                  840                  914910376 OS_Independent                           823578976            830436016 Query_Execute                             209726472            702409872 Storage_Memory_Manager:实际数据的大小,受MAX_DB_SIZE 限制。 Index_Memory:索引大小。 Query_Prepare:业务繁忙时,有很多query 被执行,所以max 达到了5G。 Transaction_OID_List:业务繁忙时,发生了很多版本化,即存储 Garbage Collector的 OID,所以max 达到了2G。 Storage_Memory_Ager:用于Memory Garbage Collection ,业务繁忙时这个内存也增加。 OS_Independent:以下模块占的内存不是很大,而且alloc_size 和max_total_size 差别不大。 2.5.11.17 复制信息 <1>脚本 CREATE OR REPLACE VIEW ADM_REPLICATION AS SELECT A.REPLICATION_NAME, A.XSN, NVL(TO_CHAR(E.REP_GAP), 'N/A') AS REPGAP, ALTIBASE维护手册 D.HOST_IP || ' (' || D.PORT_NO || '):' || CASE2(TO_CHAR(B.PEER_PORT) = '', 'OFF', 'ON') AS REMOTE_REPL, CASE2(TO_CHAR(C.PEER_PORT) = '', 'OFF', 'ON') AS RECEIVER_STAT FROM ( SELECT REP_NAME, MAX(REP_GAP) AS REP_GAP FROM V$REPGAP GROUP BY REP_NAME ) E, SYSTEM_.SYS_REPL_HOSTS_ D , SYSTEM_.SYS_REPLICATIONS_ A LEFT OUTER JOIN V$REPSENDER B ON A.REPLICATION_NAME = B.REP_NAME LEFT OUTER JOIN V$REPRECEIVER C ON A.REPLICATION_NAME = C.REP_NAME WHERE D.REPLICATION_NAME = A.REPLICATION_NAME AND A.REPLICATION_NAME = E.REP_NAME ORDER BY A.REPLICATION_NAME; <2>输出字段注释: REPLICATION_NAME : 复制名 XSN : Replication Sequence No REPGAP : Replication Gap REMOTE_REPL : Replication 状态信息 RECEIVER_STAT : Receiver 状态 <3>输出举例: REPLICATION_NAME XSN ------------------------------------------------------------------ REPGAP -------------------------------------------------------------------- REMOTE_REPL RECEIVER_STAT --------------------------------------------------------------------------------------- ALTIBASE维护手册 No rows selected. 2.5.11.18 复制:端口-发送数量-接受数量 iSQL> select port,max_sender_count,max_receiver_count from v$repexec; PORT MAX_SENDER_COUNT MAX_RECEIVER_COUNT ---------------------------------------------------- 21300 32 1024 1 row selected. 2.5.11.19 复制:积压数量-最后log file的号-复制名称 iSQL> select rep_gap,rep_last_sn,trim(rep_name) rep_name from v$repgap; REP_GAP REP_LAST_SN --------------------------------------------- REP_NAME --------------------------------------------- No rows selected. 2.5.11.20 复制:复制名称-复制的表 iSQL> select rep_name,sync_table from v$repsync; REP_NAME --------------------------------------------- SYNC_TABLE --------------------------------------------- No rows selected. 2.5.11.21 复制:复制名称-IP-PORT-对侧IP-对侧端口-使用事务数-插入成功数-插入失败数-修改成功数-修改失败数-删除成功数-删除失败数 iSQL>select rep_name,my_ip,my_port,peer_ip,peer_port,apply_XSN, insert_success_count,insert_failure_count, update_success_count,update_failure_count, delete_success_count,delete_failure_count from v$repreceiver; REP_NAME --------------------------------------------- MY_IP MY_PORT ------------------------------------------------------------------- ALTIBASE维护手册 PEER_IP PEER_PORT ------------------------------------------------------------------- APPLY_XSN INSERT_SUCCESS_COUNT INSERT_FAILURE_COUNT ------------------------------------------------------------------- UPDATE_SUCCESS_COUNT UPDATE_FAILURE_COUNT DELETE_SUCCESS_COUNT ------------------------------------------------------------------- DELETE_FAILURE_COUNT ----------------------- No rows selected. 2.5.11.22 复制:复制名称-启动复制的标志-复制sender的状态 iSQL> select rep_name, decode(start_flag,0,'Normal',1,'Quick',2,'Sync',3,'Sync_only'), net_error_flag, decode(status,0,'Stop',1,'Run',2,'Retry') from v$repsender; REP_NAME DECODE(START_FLAG,0,'Normal',1,'Quick',2 ---------------------------------------------------------------------------------------- NET_ERROR_FLAG DECODE(STATUS,0,'Stop',1,'Run',2,'Retry' ------------------------------------------------------------------ REP1 Normal 0 Run 1 row selected. start_flag NORMAL: 0 QUICK: 1 SYNC: 2 SYNC_ONLY:3 ALTIBASE维护手册 status 0: STOP 1: RUN 2: RETRY 2.5.11.23 复制:复制名称-是否启动-复制表的数量-冲突解决方式 iSQL> select replication_name, decode(is_started,0,'复制暂停',1,'复制启动'), item_count, conflict_resolution from system_.sys_replications_; REPLICATION_NAME DECODE(IS_STARTED,0,'复制暂停',1,'复制启 --------------------------------------------------------------------------------------- ITEM_COUNT||'张表建立了复制' CONFLICT_RESOLUTION ----------------------------------------------------------- REP1 复制启动 1张表建立了复制 0 1 row selected. IS_STARTED 复制启动状态 0: is suspended //复制暂停 1: is working //复制启动 冲突解决策略: 0: Default 1: Acts as a Master server 2: Acts as a Slave server ALTIBASE维护手册 2.5.11.24 复制:复制名称-表编号-本地用户名-本地表名-远程用户名-远程表名 iSQL> select replication_name,table_oid,local_user_name,local_table_name, remote_user_name,remote_table_name from system_.sys_repl_items_; REPLICATION_NAME TABLE_OID ------------------------------------------------------------------ LOCAL_USER_NAME -------------------------------------------- LOCAL_TABLE_NAME -------------------------------------------- REMOTE_USER_NAME -------------------------------------------- REMOTE_TABLE_NAME -------------------------------------------- No rows selected. 2.5.11.25 语句执行统计信息 <1>脚本 CREATE OR REPLACE VIEW ADM_QUERY AS SELECT SYSDATE DATE, MEM_CURSOR_INDEX_SCAN, MEM_CURSOR_FULL_SCAN, EXECUTE_TIME / 1000 EXECUTE_TIME, EXECUTE_TIME * (MEM_CURSOR_INDEX_SCAN / 1000) INDEX_SCAN_TIME, RPAD(SUBSTR(QUERY,1,280),280,' ') QRY FROM V$STATEMENT ORDER BY 5 DESC LIMIT 11; <2>输出字段注释: DATE : 系统时间 MEM_CURSOR_INDEX_SCAN: INDEX SCAN 次数 ALTIBASE维护手册 MEM_CURSOR_FULL_SCAN : FULL SCAN 次数 EXECUTE_TIME: 执行时间 INDEX_SCAN_TIME : 索引扫描时间 QRY : 语句 <3>输出举例: 2009/09/11 00:28:08 0 0 0.132 0 SELECT SYSDATE DATE, MEM_CURSOR_INDEX_SCAN, MEM_CURSOR_FULL_SCAN, EXECUTE_TIME / 1000 EXECUTE_TIME, EXECUTE_TIME * (MEM_CURSOR_INDEX_SCAN / 1000) INDEX_SCAN_TIME, RPAD(SUBSTR(QUERY,1,280),280,' ') QRY FROM V$STATEMENT ORDER BY 5 DESC LIMIT 11 2009/09/11 00:28:08 0 0 0 0 2 rows selected. 2.5.11.26 各用户的对象信息 <1>脚本 CREATE OR REPLACE VIEW ADM_OBJECTS AS SELECT Y.USER_NAME, X.TABLE_NAME, DECODE(X.TABLE_TYPE, 'T', 'TABLE', 'V', 'VIEW', 'S', 'SEQUENCE') OBJECT_TYPE FROM SYSTEM_.SYS_TABLES_ X INNER JOIN SYSTEM_.SYS_USERS_ Y ON X.USER_ID = Y.USER_ID ALTIBASE维护手册 WHERE Y.USER_ID > 1 UNION ALL SELECT Y.USER_NAME, X.PROC_NAME , 'PSM' FROM SYSTEM_.SYS_PROCEDURES_ X INNER JOIN SYSTEM_.SYS_USERS_ Y ON X.USER_ID = Y.USER_ID WHERE Y.USER_ID > 1 UNION ALL SELECT Y.USER_NAME, X.SYNONYM_NAME, 'SYNONYM' FROM SYSTEM_.SYS_SYNONYMS_ X INNER JOIN SYSTEM_.SYS_USERS_ Y ON X.USER_ID = Y.USER_ID WHERE Y.USER_ID > 1 ; <2>输出字段注释: USER_NAME : 用户名 TABLE_NAME : 表名 OBJECT_TYPE : 对象类型 <3>输出举例: SYS SEQ1 SEQUENCE SYS TB_TEST1 TABLE SYS IF_SERV TABLE ALTIBASE维护手册 SYS CMCU_VOICE_SESSION_STORE TABLE SYS REP_TEST TABLE SYS KIM_TEST TABLE OCS TB_BIL_ACCT_BALANCE TABLE 7 rows selected. 2.5.11.27 trigger 生成语句 <1>脚本 /** -- usage : -- exec GET_TRIGGER('SYS', 'TR_EX1'); **/ CREATE OR REPLACE PROCEDURE GET_TRIGGER ( A_USER_NAME IN VARCHAR(40) , A_TRIGGER_NAME IN VARCHAR(40) ) AS V_TRIGGER_OID BIGINT; V_SUBSTRING VARCHAR(100); CURSOR C1 IS SELECT SUBSTRING FROM SYSTEM_.SYS_TRIGGER_STRINGS_ WHERE TRIGGER_OID = V_TRIGGER_OID ORDER BY SEQNO ; BEGIN SELECT TRIGGER_OID INTO V_TRIGGER_OID FROM SYSTEM_.SYS_TRIGGERS_ ALTIBASE维护手册 WHERE USER_NAME = UPPER(A_USER_NAME) AND TRIGGER_NAME = UPPER(A_TRIGGER_NAME) LIMIT 1; SYSTEM_.PRINTLN('----------------------------------------'); OPEN C1; LOOP FETCH C1 INTO V_SUBSTRING; EXIT WHEN C1%NOTFOUND; IF SUBSTR(V_SUBSTRING, LENGTH(V_SUBSTRING), 1) = CHR(32) OR SUBSTR(V_SUBSTRING, LENGTH(V_SUBSTRING), 1) = CHR(13) OR SUBSTR(V_SUBSTRING, LENGTH(V_SUBSTRING), 1) = CHR(10) OR SUBSTR(V_SUBSTRING, LENGTH(V_SUBSTRING), 1) = CHR(9) THEN SYSTEM_.PRINTLN(V_SUBSTRING); ELSE SYSTEM_.PRINT(V_SUBSTRING); END IF; END LOOP; SYSTEM_.PRINTLN(';'||CHR(10)||'/'); SYSTEM_.PRINTLN('----------------------------------------'); CLOSE C1; EXCEPTION WHEN NO_DATA_FOUND THEN SYSTEM_.PRINTLN('CHECK INPUT. TRIGGER NOT FOUND.'||CHR(10)); RAISE; WHEN OTHERS THEN SYSTEM_.PRINTLN('-- UNKOWN ERROR --'||CHR(10)); RAISE; END; / ALTIBASE维护手册 2.5.11.28 列信息 -- 取得列信息的视图 -- 通过指定用户名、表名称来取得表的所有列的信息 CREATE OR REPLACE VIEW ADM_COLUMN AS SELECT U.USER_NAME USER_NAME, T.TABLE_NAME TABLE_NAME, C.COLUMN_NAME COLUMN_NAME, DECODE(C.DATA_TYPE, 1,'CHAR', 4,'INTEGER', 5,'SMALLINT', -5,'BIGINT', 12,'VARCHAR', 2,'NUMERIC', 6,'FLOAT', 7,'REAL', 8,'DOUBLE', 9,'DATE', 30,'BLOB', 20002,'NIBBLE','UNKNOWN') DATA_TYPE, C.PRECISION PRECISION, C.SCALE SCALE, C.IS_NULLABLE IS_NULLABLE FROM SYSTEM_.SYS_COLUMNS_ C, SYSTEM_.SYS_TABLES_ T, SYSTEM_.SYS_USERS_ U WHERE C.TABLE_ID = T.TABLE_ID AND T.USER_ID = U.USER_ID ORDER BY USER_NAME,TABLE_NAME; 2.5.12 权限管理和密码修改 2.5.12.1 只有可读权限的用户 生产库上务必创建只有 select 权限的数据库用户,给前台或平时一般查询使用。 create user selid identified by selpwd ; ALTIBASE维护手册 grant select any table to selid ; 2.5.12.2 sys密码修改 1. iSQL> alter user sys identified by new_passwd; 说明:密码第一个字母不能是数字。 2. sys用户密码修改: $ altipasswd 命令行修改密码 Previous Password : New Password : 3. 修改相应的脚本: 1) $ALTIBASE_HOME/bin/server 2) $ALTIBASE_HOME/bin/is 3) $ALTIBASE_HOME/bin/altimon.sh  2.6 执行计划 2.6.1 打开执行计划 启动执行计划以使得执行select操作时显示执行计划树 ALTER SESSION SET EXPLAIN PLAN = option Option [ on / only / off ] ON:执行select语句后显示查询结果及执行计划 ONLY:执行select语句后仅显示执行计划 OFF:执行select语句后仅显示查询结果 2.6.2 计划类型 显示结果:执行计划树结果的每个节点显示为一行,随节点的缩进,执行计划的等级逐渐降低 执行计划节点类型 一元非实体节点:包含一个或没有子计划,节点不存储中间数据 ALTIBASE维护手册 一元实体节点:包含一个或没有子计划,节点存储中间数据 二元非实体节点:包含两个子计划,每次处理一条记录,不存储中间数据 二元实体节点:包含两个子计划,存储中间数据 节点 非实体 实体 一个子计划 Basic SCAN SORT FILTER HASH PROJECT Group GROUPING GROUP-AGGREGATION AGGREGATION COUNT View VIEW MATERIALIZATION VIEW-SCAN Other HIERARCHICAL QUERY DISTINCT LIMIT-SORT 两个子计划 Join JOIN MERGE-JOIN LEFT-OUTER-JOIN FULL-OUTER-JOIN ANTI-OUTER-JOIN Set function BAG-UNION SET-INTERSECT SET-DIFFERENCE Other CONCATENATION 2.6.3 格式说明 2.6.3.1 SCAN 执行select查询时直接访问表的情况,没有子计划节点,格式: SCAN ( TABLE: table_name, FULL SCAN, ACCESS: acc_num,SELF_ID: node_id ) SCAN ( TABLE: table_name, INDEX: index_name, ACCESS:acc_num, SELF_ID: node_id ) ALTIBASE维护手册 table_name:查询的表名称 FULL SCAN:没有使用索引,全表扫描 index_name:使用的索引名称 acc_num:访问的记录数 node_id:此计划节点的ID号 2.6.3.2 FILTER 执行select查询时使用条件来过滤数据的信息,具有一个子计划节点,格式: FILTER Alter system set trclog_detail_predicate = 1;时将显示过滤条件的具体内容 2.6.3.3 RPOJECT PROJECT包含最后的查询返回结果,格式: PROJECT ( COLUMN_COUNT: col_count, TUPLE_SIZE:tuple_size ) col_count:查询结果的列的数量 tuple_size:查询结果的元组空间 2.6.3.4 GROUPING 执行select查询时对结果使用group by子句进行分组,格式 GROUPING 2.6.3.5 AGGREGATION 执行select查询时对分组的数据进行聚合的过程,格式 AGGREGATION ( ITEM_SIZE: item_size, GROUP_COUNT: group_count ) item_size:储存项目的空间 group_count:储存组的数量 2.6.3.6 COUNT 执行count(*)时的计划标示,格式 ALTIBASE维护手册 COUNT (TABLE: tbl_name, INDEX: index_name, ACCESS:acc_num, SELF_ID: node_id, REF_ID: ref_id ) COUNT (TABLE: tbl_name, FULL SCAN, ACCESS: acc_num,SELF_ID: node_id, REF_ID: ref_id ) table_name:查询的表名称 FULL SCAN:没有使用索引,全表扫描 index_name:使用的索引名称 acc_num:访问的记录数 node_id:此计划节点的ID号 ref_id:相关计划节点的ID号 2.6.3.7 VIEW 对视图进行查询,格式 VIEW ( ACCESS: acc_num, SELF_ID: self_id ) acc_num:访问的记录数 self_id:此计划节点的ID号 2.6.3.8 VIEW-SCAN 查询实体化视图,如果有子计划节点,必然是MATERIALIZATION,格式: VIEW-SCAN ( VIEW: view_name, ACCESS: acc_num,SELF_ID: self_id ) view_name:视图名称 acc_num:访问的记录数 self_id:此计划节点的ID号 2.6.3.9 HIERARCHICAL QUERY 分级查询,必然包含一个SCAN子计划,格式: HIER ( TABLE: table_name, FULL SCAN, ACCESS: acc_num,SELF_ID: node_id ) ALTIBASE维护手册 HIER ( TABLE: table_name, INDEX: index_name, ACCESS:acc_num, SELF_ID: node_id ) table_name:查询的表名称 FULL SCAN:没有使用索引,全表扫描 index_name:使用的索引名称 acc_num:访问的记录数 node_id:此计划节点的ID号 2.6.3.10 SORT 用在各种需要临时表保存临时数据的情况,格式与SCAN类似: SORT ( ITEM_SIZE: item_size, ITEM_COUNT: item_count,ACCESS: acc_num, SELF_ID: self_id, REF_ID: ref_id ) item_size:储存项目的空间大小 item_count:储存项目的数量 acc_num:访问的记录数量 self_id:此计划节点的ID号 ref_id:相关计划节点的ID号 2.6.3.11 HASH 条件连接、子查询等情况都可能用到HASH表进行搜索,格式: HASH ( ITEM_SIZE: item_size, ITEM_COUNT: item_count,BUCKET_COUNT: bucket_count, ACCESS: acc_num, SELF_ID:self_id, REF_ID: ref_id ) item_size:储存项目的空间大小 item_count:储存项目的数量 bucket_count:hash bucket的数量 acc_num:访问的记录数量 self_id:此计划节点的ID号 ALTIBASE维护手册 ref_id:相关计划节点的ID号 2.6.3.12 GROUP-AGGREGATION 以HASH表为基础的分组和联合查询,包含一个子计划节点,格式: GROUP-AGGREGATION ( ITEM_SIZE: item_size, GROUP_COUNT: group_count, BUCKET_COUNT: bucket_count, ACCESS: acc_num, SELF_ID: self_id, REF_ID: ref_id ) item_size:储存项目的空间 group_count:储存组的数量 bucket_count:Hash bucket的数量 acc_num:访问的记录数 self_id:此计划节点的ID号 ref_id:相关计划节点的ID号 2.6.3.13 MATERIALIZATION 需要建立临时表的视图查询,格式: MATERIALIZATION ( ITEN_SIZE: acc_num, ITEN_COUNT: self_id ) item_size:储存项目的空间大小 item_count:储存项目的数量 2.6.3.14 DISTINCT 以HASH表为基础对检索数据进行重复记录的排除,格式: DISTINCT ( ITEM_SIZE: item_size, ITEM_COUNT: item_count, BUCKET_COUNT: bucket_count, ACCESS: acc_num, SELF_ID: self_id, REF_ID: ref_id ) item_size:储存项目的空间大小 item_count:储存项目的数量 bucket_count:Hash bucket的数量 ALTIBASE维护手册 acc_num:访问的记录数俩 self_id:此计划节点的ID号 ref_id:相关计划节点的ID号 2.6.3.15 LIMIT-SORT 执行具有limit限制查询时的计划标示,格式: LIMIT-SORT ( ITEM_SIZE: item_size, ITEM_COUNT: item_count,STORE_COUNT: store_count, ACCESS: acc_num, SELF_ID:self_id, REF_ID: ref_id ) item_size:存储项目的空间 item_count:存储项目的数量 store_count:实际存储项目的数量 acc_num:访问到的记录数 self_id :此计划节点的ID号 ref_id:此计划节点相关的ID号 2.6.3.16 JOIN 执行几乎所有的连接操作计划,含有两个子计划节点,不记录临时结果,格式如下: JOIN 2.6.3.17 MERGE-JOIN 执行合并连接功能时的执行计划标示,格式如下: MERGE-JOIN 2.6.3.18 LEFT-OUTER-JOIN 执行左外连接时的执行计划标示,两个子计划节点,格式如下: LEFT-OUTER-JOIN ALTIBASE维护手册 2.6.3.19 FULL-OUTER-JOIN 执行全外连接时的执行计划标示,两个子计划节点,格式如下: FULL-OUTER-JOIN 2.6.3.20 ANTI-OUTER-JOIN 执行全外连接时,如果所有列都使用索引,将会出现此标示,并对应出现LEFT-OUTER-JOIN,格式如下: ANTI-OUTER-JOIN 2.6.3.21 BAG-UNION 用union或union all连接sql语句联合查询时将会出现此标示,格式如下 BAG-UNION 2.6.3.22 CONCATENATION 执行全外连接时,关联两个子计划将会出现此标示,格式如下: CONCATENATION 2.6.3.23 SET-INTERSECT 当select语句中使用INTERSECT运算时会出现此标示,格式如下: SET-INTERSECT ( ITEM_SIZE: item_size, ITEM_COUNT:item_count, BUCKET_COUNT: bucket_count, ACCESS: acc_num,SELF_ID: self_id, L_REF_ID: l_ref_id, R_REF_ID: r_ref_id ) item_size:存储项目的空间 item_count:存储项目的数量 bucket_coun:Hash bucket的数量 acc_num:访问到的记录数 self_id :此计划节点的ID号 l_ref_id:左相关节点的ID号. r_ref_id:右相关相节的ID号 ALTIBASE维护手册 2.6.3.24 SET-DIFFERENCE 当select语句中使用MINUX运算时会出现此标示,格式如下: SET-DIFFERENCE ( ITEM_SIZE: item_size, ITEM_COUNT:item_count, BUCKET_COUNT: bucket_count, ACCESS: acc_num,SELF_ID: self_id, L_REF_ID: l_ref_id, R_REF_ID: r_ref_id ) item_size:存储项目的空间 item_count:存储项目的数量 bucket_coun:Hash bucket的数量 acc_num:访问到的记录数 self_id :此计划节点的ID号 l_ref_id:左相关节点的ID号. r_ref_id:右相关相节的ID号 2.6.4 SQL优化 2.6.4.1 INDEX 1. INDEX 使用注意事项 Ø 并不是所有的情况下,使用索引访问都能加快速度。 Ø 索引的可选择性非常重要。当索引的可选择性比较高(具有相同值的行很少),而我们需要数据量又比较小的时候,索引才能极大的提高数据访问的速度。当索引的可选择性比较差的时候,而我们使用的数据量又比较大,此时,使用索引反而会使查询的速度变慢。 Ø 针对索引的列,需要匹配索引列的类型,也不能在其上使用计算、函数等操作,否则,会使索引失效。 Ø 索引的维护需要成本,会带来DML的效率降低。所以只有在需要的时候才能去创建索引。 Ø 当一个表上存在多个索引,只能使用这个表上的一个索引。 (具体使用哪一个索引由 ALTIBASE 优化器决定) ALTIBASE维护手册 2. INDEX SCAN Fail Ø 对索引的列进行计算或者使用了函数。 Ex) SELECT * FROM T1 WHERE C1 +1 > 0 SELECT * FROM T1 WHERE TO_CHAR(SOME_DATE) = ‘2007-01-01’ Ø 索引列的类型不匹配 Ex) SELECT * FROM T1 WHERE CHAR_COLUMN = 1 Cf) CHAR是 VARCHAR 类型的列。 Ø Composite Index中没有使用索引的引导列。 Ex) C1 + C2 是 Composite Index SELECT * FROM T1 WHERE C2 = :value Cf ) 把语句改成下面的方式,就可以使用 Composite Index SELECT * FROM T1 WHERE C1 = :value1 and C2 = :value2 Ø ALTIBASE Optimizer 判断全表扫描的成本比索引扫描的成本更低的时候,将不使用索引。 Ø NOT IN 子查询中的索引将失效 Ex) SELECT * FROM EMPLOYEE WHERE DNO NOT IN (SELECT DNO FROM DEPARTMENT WHERE DNO > 4); 3. INDEX SCAN ,Acess Count 依然很高 Ø 使用 Cardinality 不好的 Index 时发生 Ø 确认使用哪个 Index A+B+C 形式的组合 Index时,如果以 A, C 为条件,则 Access Count 有可能高. (因为只使用 A条件) 2.6.4.2 Join optimization 1. JOIN CONDITION 中 FULL SCAN 或 Index Access Count 较高时,需要考虑创建 Index 或变更 Index 顺序 2. Index 使用效率不高或无法使用导致 FULL SCAN时 3. ALTIBASE Optimizer 错误判断JOIN Method 时 ALTIBASE维护手册 4. 因过多表的 JOIN,生成和验证执行计划的时间较长时 5. 应该该 GROUPING - JOIN 的语句以 JOIN - GROUPING 顺序做成时 6. 数据类型问题 n 建议 Join Condition 里使用的数据类型保持一致 n 内部进行型转换时,无法使用 INDEX n 不得不使用的情况时确认 PLAN 并验证是否能使用 INDEX 7. 访问一次表 n Inline View , SubQuery 虽然提供 SQL 的易用性和便利性,但有一直访问同一张表的问题 n 尽量只写一次表名,减少同一张表的重复访问 n 优化成只访问一次表能获得结果集,如果不可行也要最少化访问 2.6.4.3 Limit Stop key 1. 一般的情况下,我们使用limit的目的是为了减少表的访问量。 2. 下面的几种情况下limit将无法有效发挥作用: n GROUP BY 将使limit n 无法使用索引的order by操作 n 带很多的where条件 2.6.4.4 Subquery Optimization 1. 优化要素 n 因使用过多的 Subquery,频繁访问同一张表时 n 因对 NOT IN 的理解不够,对于大的结果集使用 NOT IN 时 n Subquery 条件里没有 INDEX 字段时 2. 读多次表 n Subquery 是嵌入到另一个SQL语句中的SELECT语句,频繁读取同一张表时影响性能 ALTIBASE维护手册 n 内查询的结果集被用作外查询的搜索值,所以内查询的结果集越大性能下降越严重 (注意!!) n 如果 SubQuery 的结果集里只取一条记录,建议在 SubQuery 里使用 LIMIT 1 n 如果同一张表被查询两次以上,尽量把 SubQuery 转换为 JOIN n 所有的 SubQuery 都可以转换为 Join形态 2.6.4.5 INSERT / UPDATE /DELETE Optimization 1. INSERT 执行慢可能的情况 n Too Many Indices n 存在Table Lock (可查询V$LOCK视图) n I/O Contention 2. UPDATE / DELETE 执行慢可能情况 n 所有导致SELECT 执行慢的情况 n 所有导致INSERT 执行慢的情况 n 不必要的 Key字段 Update 2.7 TRC日志 $ALTIBASE_HOME/trc目录下包含有记录ALTIBASE服务过程中的跟踪日志,主要包含4个文件,altibase_boot.log,altibase_sm.log,altibase_qp.log,altibase_rp.log Ø altibase_boot.log:记录ALTIBASE服务器的运行状态,包括启动和停止的过程信息,日常运行中的异常警报和错误等; Ø altibase_sm.log:数据库运行中的跟踪消息,主要包括检查点的执行时间,删除日志等信息; Ø altibase_rp.log:数据库运行中复制的相关日志信息; Ø altibase_qp.log:主要记录数据库启动和停止的具体时间,QP_MSGLOG_FLAG=2时将记录数据库中执行的所有DDL语句。 ALTIBASE维护手册 2.8 权限管理 新创建的数据库用户具有以下默认权限: Ø CREATE_PROCEDURE Ø CREATE_SEQUENCE Ø CREATE_SESSION Ø CREATE_TABLE Ø CREATE_VIEW Ø CREATE_TRIGGER Ø CREATE_SYNONYM 可以为用户进行授权或收回相应权限,但需要具有GRANT ANY PRIVILEGES权限,用户的所有者对其下所有对象具有完全权限 ALTIBASE中所有的系统权限可以在系统表SYSTEM_.SYS_PRIVILEGES_中查询到,如我们经常会用到的,授权一个用户ocs_slt_user对所有表具有查询权限: grant select any table to ocs_slct_user; 比较特殊的授权方式有以下两个: 授予所有权限给某一用户: Grant all privileges to user; 授予权限给所有用户: Grant object_privilege/system_privilege to public; 2.9 ALTIBASE版本更换 ALTIBASE版本更新、补丁、密码更换 步骤 主库 备库 0   停止ALTIBASE应用以及ALTIBASE 数据库。 1   进行ALTIBASE版本更新、修改ALTIBASE数据库密码。参见下面说明: ALTIBASE维护手册 2   恢复启动备库ALTIBASE数据库以及ALTIBASE应用。注意:ALTIBASE密码修改后,外围其他应用都需要修改相应密码并重新启动 3 主备机数据自动同步(追赶备库停库期间的数据变更) 4 主备机HA手动切换(需要确认主备机Replication Gap 接近为0) 5 停止主库Altiibase应用以及ALTIBASE 数据库。   6 进行ALTIBASE版本更新、修改ALTIBASE数据库密码。参见下面说明:   7 恢复启动主库ALTIBASE数据库以及ALTIBASE 应用。注意:ALTIBASE密码修改后,外围其他应用都需要修改相应密码并重新启动   8 备主机数据自动同步(追赶主库停库期间的数据变更) 9 备主机HA手动回切(需要确认备主机Replication Gap 接近为0) ALTIBASE 补丁升级方法 ALTIBASE版本更新、补丁升级 步骤 操作 说明 0 假设ALTIBASE安装路径 /altibase/alti/ altibase_home link 路径 /altibase/alitbase_home 1 创建ALTIBASE 更新补丁版本目录 mkdir /altibase/alti/altibase_4.3.9.new 加压ALTIBASE新版本 gzip -cd **.tgz | tar -xvf - 2 删除旧版本数据库链接 rm -f /altibase/altibase_home 3   cd /altibase 创建新数据库链接 ln -s /altibase/alti/altibase_4.3.9.new altibase_home 4 修改配置文件及License文件 cp -r /altibase/alti/altibase_4.3.9.new/conf /altibase/alti_4_i/altibase_4.3.9.old/conf <注意事项> ALTIBASE维护手册 1. 以上补丁升级方法只适用于ALTIBASE “binary db version”,“ replication protocol version 4.7.1” 版本没有发生变化的情况。ALTIBASE 模块版本确认方法 :altibase -v 2. 必要时需要重新编译应用并进行更新。 第三部分 ALTIBASE常用命令和工具 3.1 iSQL 3.1.1 iSQL概述 通过iSQL工具连接 ALTIBASE数据库并执行 SQL和其他命令,获取或修改数据库相关信息。基本功能如下 Ø 开始/结束数据库 Ø 连接/断开数据库 Ø 查询数据库对象信息 Ø 使用 SQL管理数据库 Ø 为用户提供便利 3.1.2 iSQL语法 可在shell提示符下键入isql -h来获取isql命令的使用帮助 $ isql --help ===================================================================== ISQL HELP Screen ===================================================================== Usage : isql [-h] [-s server_name] [-u user_name] [-p password] [-port port_no] [-silent] [-v] [-f in_file_name] [-o out_file_name] [-NLS_USE nls_name] -h : This screen -s : Specify server name to connect -u : Specify user name to connect -p : Specify password of specify user name -port : Specify port number to communication -f : Specify script file to process -o : Specify file to save result ALTIBASE维护手册 -v : Print command once more -silent : No display Copyright 两点说明: 1. -s,-u,-p参数如未指定,将会打印提示信息 2. 使用-sysdba选项进行连接时,不可以指定-s,-port等选项 3.1.3 iSQL内建命令 分类 子类 命令 说明 iSQL开始/结束 开始 $isql [option] $ALTIBASE_HOME/bin/is脚本内容:${ALTIBASE_HOME}/bin/isql -s 127.0.0.1 -u sys -p manager $* 日常维护可以在shell下直接键入is快速以sys用户连接iSQL 提示符 iSQL> 在iSQL>提示符后输入命令后回车提交 结束 Exit; Quit; 退出iSQL ALTIBASE启动/停止 ALTIBASE启动 Startup STARTUP [PROCESS | CONTROL | META | SERVICE]; ALTIBASE停止 Shutdown SHUTDOWN [NORMAL | IMMEDIATE | ABORT]; 数据库连接/断开 以另一用户连接 Connect user/passwd [as sysdba] 切换用户 断开 连接 Disconnect 断开连接 数据对象信息查询 性能 视图 Select * from v$tab; iSQL特有命令,显示性能视图列表 表目录 Select * from tab; iSQL特有命令,显示所有表 表结构 Desc tablename; 显示指定表的表结构/索引等信息 ALTIBASE维护手册 Sequence Select * from v$seq; iSQL特有命令,显示序列 事务控制 提交模式 Autocommit on; Autocommit off; 命令执行后是否自动提交 执行计划相关的提交模式 Set plancommit on; Set plancommit off; Autocommit off模式,执行计划打开的情况下,desc,select * from tab;等命令执行是否自动提交,缺省:off 文件管理 将结果信息保存到文件 Spool filename; 记录iSQL屏幕信息到一个文件 Spool off 停止记录,退出iSQL时也会停止记录 执行sql脚本 Start file.sql 执行sql脚本文件 @file.sql 执行sql脚本文件, @@file.sql 用于脚本文件中,在脚本中调用另外的脚本文件 保存到sql文件 Save file.sql 将sql buffer中最后一条命令保存为文件 装载sql文件 Load file.sql 将文件中的第一条命令载入到sql buffer中 编辑查询语句 Ed 进入编辑状态对sql buffer中的最后一条语句进行编辑 2ed 2 ed 编辑在history结果中编号为2的sql Ed filename.sql 编辑sql脚本文件 结果显示 显示行的长度 Set linesize 100; 显示结果每行的字符数,缺省80,设置范围在10到200之间 显示查询的行数 Set feedback on; Set feedback off; Set feedback n; 显示被查询的行的数量,设置为n时表示返回行数大于该值时才显示 显示行的模式 SET PAGESIZE 10; 显示结果每次打印的行数,缺省为0,全部打印 显示结果的字段头 Set heading on; Set heading off; 显示结果是否包含字段名称头 ALTIBASE维护手册 设置列的长度 Set colsize 10; 显示char,varchar类型的字段时每列的字符数 Sql执行时间 Set timing on; Set timing off; 是否显示sql的执行时间 外键信息 Set foreignkeys on; Set foreignkeys off; 使用desc查看表结构时是否打印外键信息 脚本执行信息 Set term on; Set term off; 执行脚本时是否在屏幕打印结果,缺省为ON iSQL环境变量查看 Show all Show User Show ColSize Show LineSize Show PageSize Show TimeScale Show Heading Show Timing Show Verbose Show ForeignKeys Show PlanCommit Show QueryLogging Show Term Show Feedback 执行show all后显示结果示例如下: User : SYS ColSize : 150 LineSize : 200 PageSize : 0 TimeScale : Second Heading : On Timing : On Verbose : On ForeignKeys : Off PlanCommit : Off QueryLogging : Off Term : On Feedback : 1 变量和预执行 变量声明 Var p1 integer; 声明变量p1为integer类型 Variable p2 char(10); 声明变量p2为char类型 变量赋值 Exec :p1:=100; 变量p1赋值100 execute :p2:='abc'; 变量p2赋值abc 变量显示 Print var; Print variable; 显示所有变量 Print p1 显示指定变量 预执行sql语句 Prepare sql statement; 预执行模式,与正常模式在速度和返回结构上是一样的,预知性模式可以定义的变量 方便性 显示执行过的sql History; 显示保存于sql buffer中的sql命令 ALTIBASE维护手册 H; 重复执行 / 执行sql buffer最后的一条语句 2/ 执行在history结果中编号为2的sql 执行shell命令 ! !后的命令将被认为shell命令送到系统去执行,如!ls 注释 /* comment */ 多行注释 -- comment 单行注释 帮助 Help; 帮助命令 Help index; 显示所有可用的帮助信息 Help exit; 显示exit的使用帮助 3.1.4 配置iSQL 3.1.4.1 glogin.sql 可以使用iSQL的内建命令自定义iSQL,编辑$ALTIBASE_HOME/conf/glogin.sql文件,将需要自定义的内容添加到该文件即可,如下例: $vi $ALTIBASE_HOME/conf/glogin.sql Autocommit off; Set timing on; $is ----------------------------------------------------------------- Altibase Client Query utility. Release Version 4.3.9.153 Copyright 2000, ALTIBASE Corporation or its subsidiaries. All Rights Reserved. ----------------------------------------------------------------- ISQL_CONNECTION = TCP, SERVER = 127.0.0.1, PORT_NO = 20322 Set autocommit off success. =>autocommit off iSQL> select count(*) from test; COUNT ----------------------- 0 1 row selected. elapsed time : 0.00 =>timing on 3.1.4.2 login.sql 当用户启动isql的时候,会自动检查当前目录是否存在login.sql文件,如果存在,那么在执行glogin.sql中的内容后会继续执行login.sql的内容,当login.sql和glogin.sql同时存在时,相同的参数设定login.sql会覆盖glogin.sql的内容。如 ALTIBASE维护手册 $cat $ALTIBASE_HOME/conf/glogin.sql Autocommit off; Set timing on; $vi login.sql Autocommit on; Alter session set explain plan=on; $ is ----------------------------------------------------------------- Altibase Client Query utility. Release Version 4.3.9.153 Copyright 2000, ALTIBASE Corporation or its subsidiaries. All Rights Reserved. ----------------------------------------------------------------- ISQL_CONNECTION = TCP, SERVER = 127.0.0.1, PORT_NO = 20322 Set autocommit off success. =>autocommit off glogin.sql设置 Set autocommit on success. =>autocommit on login.sql设置 Alter success. elapsed time : 0.00 =>timing on glogin.sql设置 iSQL> select count(*) from test; COUNT ----------------------- 0 1 row selected. ------------------------------------------------------------ PROJECT ( COLUMN_COUNT: 1, TUPLE_SIZE: 8 ) COUNT ( TABLE: TEST, FULL SCAN, ACCESS: 1, SELF_ID: 1, REF_ID: 1 ) ------------------------------------------------------------ =>执行计划 elapsed time : 0.00 =>timing on 3.1.5 环境变量 3.1.5.1 ISQL_CONNECTION ALTIBASE是C/S架构,iSQL客户端和服务器连接支持TCP/IP,IPC和UNIXDOMAIN三种方式,缺省连接是采用TCP/IP,如果希望更换连接方式,需要设置系统环境变量ISQL_CONNECTION即可 如需采用IPC连接,需要在altibase.properties文件中修改参数 IPC_CHANNEL_COUNT = 10 #默认为0,修改为非0值 环境变量 CSH: setenv ISQL_CONNECTION IPC BASH/KSH: export ISQL_CONNECTION=IPC ALTIBASE维护手册 $is ----------------------------------------------------------------- Altibase Client Query utility. Release Version 4.3.9.153 Copyright 2000, ALTIBASE Corporation or its subsidiaries. All Rights Reserved. ----------------------------------------------------------------- ISQL_CONNECTION = IPC, SERVER = 127.0.0.1, PORT_NO = 20322 如果IPC_CHANNEL_COUNT = 0,通过IPC方式连接时将会报错: [ERR-50032 : Client unable to establish connection] 3.1.5.2 ISQL_BUFFER_SIZE iSQL工具中执行的所有查询都会记录到ISQL buffer中,变更该buffer的大小需要设置环境变量ISQL_BUFFER_SIZE即可,单位byte CSH: setenv ISQL_BUFFER_SIZE 128000 BASH/KSH: export ISQL_CONNECTION=128000 一般来说推荐该变量的值与ALTIBASE property中的CM_BUF_SIZE值一致,CM_BUF_SIZE是系统为每个session分配的缓冲区的共享内存大小。 3.1.5.3 ALTIBASE_DATE_FORMAT 当查询的数据表中包含date类型时,可以通过环境变量ALTIBASE_DATE_FORMAT来设置显示格式 CSH setenv ALTIBASE_DATE_FORMAT 'YYYY/MM/DD HH:MI:SS' BASE/KSH export ALTIBASE_DATE_FORMAT='YYYY/MM/DD HH:MI:SS' 3.1.5.4 ISQL_EDIT 设置在iSQL中进行编辑的编辑器程序,默认为vi(/usr/bin/vi),修改方法如下: CSH setenv ISQL_EDIT usr/bin/ed BASE/KSH export‘ISQL_EDIT=/usr/bin/ed 3.2 iLoader 3.2.1 iloader概述 iLoader是ALTIBASE对表数据进行导入导出的工具,导出数据以文本文件的形式储存,表结构以结构信息的形式形成格式文件,主要用于数据库的数据迁移和以表为单位的备份,不存储数据库的对象信息。iLoader具有以下功能: ALTIBASE维护手册 格式文件:建立一个包含要导入和导出表的数据格式信息的文件 导出数据:使用格式文件将数据库的表数据保存为一个文件 导入数据:使用格式文件将数据文件导入到相应的数据库表中 3.2.2 iloader语法 可在shell提示符下键入iloader -h来获取iloader命令的使用帮助 $ iloader -h ===================================================================== ILOADER HELP Screen ===================================================================== Usage : iloader [-h] [-s server_name] [-u user_name] [-p password] [-port port_no] [-silent] [-nst] [-displayquery] -h : This screen -s : Specify server name to connect -u : Specify user name to connect -p : Specify password of specify user name -port : Specify port number to communication -silent : No display Copyright -nst : No display Elapsed Time -displayquery : display query string 可在shell提示符下键入iloader help或者在iloader提示符下键入help来获取iloader内建命令的帮助信息 $ iloader help ----------------------------------------------------------------- Altibase Data Load/Download utility. Release Version 4.3.9.158 Copyright 2000, ALTIBASE Corporation or its subsidiaries. All Rights Reserved. ----------------------------------------------------------------- iloader { in | out | formout | structout | help } [-T table_name] [-d datafile] [-f formatfile] [-F firstrow] [-L lastrow] [-t field_term] [-r row_term] [-U|-u login_id] [-P|-p password] [-S|-s servername] [-mode mode_type] [-commit commit_unit] [-bad badfile] [-log logfile] [-e enclosing] [-array count] [-replication true/false] [-split number] [-noexp] [-displayquery] [-plus] 说明: 参数 描述 ALTIBASE维护手册 in/out/formout/structout/help 指定数据的复制方向(只能选择一个参数) in:从文件向数据库表进行拷贝 out:从数据库表向文件进行拷贝 formout:建立一个表的格式文件 structout:执行类似于formout命令,建立一个表的结构文件(用于…………) help:帮助 -T table name 被执行操作的表名 执行fourmout时会将表名写到格式文件中,此参数在导入导出过程中被忽略 -d datafile 导入导出数据时所需数据文件 应用于formout时此参数是无效的 -f formatfile 指定iLoader工具建立的格式文件的完全路径 -F firstrow 导入数据文件的首行的行号(缺省为1) 该参数仅在数据导入时有效 -L lastrow 导入数据文件的尾行的行号(缺省为最后一行) 该参数仅在数据导入时有效 -t field_term 指定数据文件中字段间(列)的分隔符,默认为^,最多支持10个字符最多支持10个字符 t%表示Tab(制表符),n%表示Enter(回车符) -t,-r,-e参数必须指定不同的符号 注意:在命令行中’,”,&等都具有特殊含义,尽量不要使用 -r row_term 数据文件中记录间(行)的分隔符 -e enclosing 数据文件的结束符号 -array count 读取数据文件时将数据以数组为单位进行上载,降低和服务的通信频率从而提高性能。该值设置过大时会导致CM_BUF_SIZE不足而报错 -replication true/false 缺省是true,上载数据时是否应用复制 该参数仅在导入数据时有效 -U/-u login_id 用户名 -P/-p password 用户口令 -S/-s servername 服务器地址信息 -mode mode_type APPEND:附加到现有表中 REPLACE:删除现有表中的所有数据并且创建新数据 该参数仅在导入数据时有效(缺省为APPEND) -commit commit_unit 上载数据时commit执行的单位,缺省为每1000条commit ALTIBASE维护手册 与-array参数联合使用时,commit的单位为两者之积 如-array 10 -commit 100时表示每1000条一commit -bad badfile 保存由于导入中出现错误而未能成功导入的数据。 如果未指定,则错误数据将不会保存 -log logfile 指定iLoader执行过程中的日志文件,该文件将记录执行过程中的起止时间,记录完成、错误数量等信息 如果未指定,则日志文件将不会保存 -split n 指定每个文件中存储的记录数,此时生成的文件在-d指定的文件名后增加序号,如t1.dat0,t1.dat1等 该参数仅在导出数据时有效 -noexp 该参数仅在导出数据时有效,指定导出numeric类型时是否采用科学技术法,加上-noexp参数时将不使用科学计数法 -displayquery 显示查询语句,交互方式不可用 3.2.3 使用iLoader 3.2.3.1 创建格式文件 语法:iloader formout -s servername -u username -p password -T table_name -f fmt_file 示例: iSQL> create table T1(name varchar(30),age integer,gender char(1)); Create success. iSQL> insert into T1 values ( 'Ju-young', 20, 'M') ; 1 row inserted. iSQL> insert into T1 values ('Chang-ho', 30, 'M') ; 1 row inserted. iSQL> insert into T1 values ('Ji-hyun', 24, 'F') ; 1 row inserted. iSQL> select * from t1; NAME AGE GENDER -------------------------------------------------------- Ju-young 20 M Chang-ho 30 M Ji-hyun 24 F 3 rows selected. iSQL> exit shell> iloader formout -s 127.0.0.1 -u sys -p manager -T T1 -f T1.fmt ----------------------------------------------------------------- Altibase Data Load/Download utility. Release Version 4.3.9.158 Copyright 2000, ALTIBASE Corporation or its subsidiaries. All Rights Reserved. ----------------------------------------------------------------- ALTIBASE维护手册 ISQL_CONNECTION : TCP shell> cat T1.fmt table T1 { NAME varchar (30); AGE integer; GENDER char (1); } 3.2.3.2 导出数据 语法:iloader out -s servername -u username -p password -f form_file -d backup_file -split n -noexp 示例: shell> iloader out -s 127.0.0.1 -u sys -p manager -f T1.fmt -d T1.dat ----------------------------------------------------------------- Altibase Data Load/Download utility. Release Version2 4.3.9.158 Copyright 2000, ALTIBASE Corporation or its subsidiaries. All Rights Reserved. ----------------------------------------------------------------- ISQL_CONNECTION : TCP Total 3 record download(T1) DOWNLOAD: 10699 shell> cat T1.dat Ju-young^20^M Chang-ho^30^M Ji-hyun^24^F 3.2.3.3 导入数据 语法:iloader in -s servername -u username -p password -f form_file -d backup_file -mode mode_type -F firstrow -L lastrow shell> iloader in -s 127.0.0.1 -u sys -p manager -f T1.fmt -d T1.dat -F 1 -L 2 ----------------------------------------------------------------- Altibase Data Load/Download utility. Release Version 4.3.9.158 Copyright 2000, ALTIBASE Corporation or its subsidiaries. All Rights Reserved. ----------------------------------------------------------------- ISQL_CONNECTION : TCP UPLOAD: 246 Load Count : 2(T1) [altibase@cdr2 ~]$ is ----------------------------------------------------------------- Altibase Client Query utility. Release Version 4.3.9.158 Copyright 2000, ALTIBASE Corporation or its subsidiaries. All Rights Reserved. ALTIBASE维护手册 ----------------------------------------------------------------- ISQL_CONNECTION = TCP, SERVER = 127.0.0.1, PORT_NO = 20300 Alter success. elapsed time : 0.00 iSQL> select * from t1; NAME AGE GENDER -------------------------------------------------------- Ju-young 20 M Chang-ho 30 M Ji-hyun 24 F Ju-young 20 M Chang-ho 30 M 5 rows selected. 3.2.4 交互方式 如果执行iloader 时没有指定formout/in/out等具体操作参数,iloader将进入交互界面,语法与批处理模式相同,使用示例如下: $ iloader ----------------------------------------------------------------- Altibase Data Load/Download utility. Release Version 4.3.9.158 Copyright 2000, ALTIBASE Corporation or its subsidiaries. All Rights Reserved. ----------------------------------------------------------------- Write Server Name (enter:127.0.0.1) : Write UserID : sys Write Password : ISQL_CONNECTION : TCP iLoader>help { in | out | formout | structout | help } [-T table_name] [-d datafile] [-f formatfile] [-F firstrow] [-L lastrow] [-t field_term] [-r row_term] [-mode mode_type] [-commit commit_unit] [-bad badfile] [-log logfile] [-e enclosing] [-array count] [-replication true/false] [-split number] [-noexp] [-displayquery] [-plus] 3.2.4.1 创建格式文件 iLoader> formout -T T1 -f T1.fmt 3.2.4.2 导出数据 iLoader> out -f T1.fmt -d T1.dat Total 5 record download(T1) ALTIBASE维护手册 DOWNLOAD: 2206 3.2.4.3 导入数据 iLoader> in -f T1.fmt -d T1.dat -mode replace -F 1 -L 3 UPLOAD: 317 Load Count : 3(T1) iLoader>exit $ is ----------------------------------------------------------------- Altibase Client Query utility. Release Version 4.3.9.158 Copyright 2000, ALTIBASE Corporation or its subsidiaries. All Rights Reserved. ----------------------------------------------------------------- ISQL_CONNECTION = TCP, SERVER = 127.0.0.1, PORT_NO = 20300 Alter success. elapsed time : 0.00 iSQL> select * from t1; NAME AGE GENDER -------------------------------------------------------- Ju-young 20 M Chang-ho 30 M Ji-hyun 24 F 3 rows selected. =>因为采用replace模式,所以会先删掉原来的数据再进行上载 3.2.5 修改格式文件 iLoader生成的格式文件与create table语法类似,可以通过iLoader工具自动生成,也可对其进行编辑,来实现更多功能。 3.2.5.1 SEQUENCE 编辑格式文件以应用序列,在格式文件的开头加上如下形式内容: SEQUENCE sequence_name column_name [ NEXTVAL |CURRVAL ] 缺省的虚拟列是nextval,最多可应用8列 示例: 1. 创建表seqtable,num列将来采用sequence iSQL> create table seqtable(num integer,name varchar(30)); Create success. 2. 插入四条记录 iSQL> insert into seqtable values(1,'JANE'); ALTIBASE维护手册 1 row inserted. iSQL> insert into seqtable values(2,'SARA'); 1 row inserted. iSQL> insert into seqtable(name) values('JOHN'); insert in1 row inserted. iSQL> insert into seqtable(name) values('JOHNSON'); 1 row inserted. 3. 导出格式文件和数据 iLoader> formout -T seqtable -f seqtable.fmt iLoader> out -f seqtable.fmt -d seqtable.dat Total 4 record download(seqtable) DOWNLOAD: 16439 $ cat seqtable.dat 1^JANE 2^SARA ^JOHN ^JOHNSON 4. 创建序列seq1 iSQL> create sequence seq1 start with 30 increment by 2 minvalue 0 nomaxvalue; Create success. 5. 修改格式文件,首行添加sequence seq1 num(依次为sequence关键字 名称 应用序列的表的列名) $vi seqtable.fmt sequence seq1 num table seqtable { NUM integer; NAME varchar (30); } 6. 上载数据文件到目标表,采用replace模式覆盖导入 iLoader> in -f seqtable.fmt -d seqtable.dat -mode replace UPLOAD: 335 Load Count : 4(seqtable) 查询结果 iSQL> select * from seqtable; NUM NAME ----------------------------------------------- 30 JANE 32 SARA 34 JOHN 36 JOHNSON 4 rows selected. ALTIBASE维护手册 3.2.5.2 DATE FORMAT 编辑格式文件以指定数据导入导出时date类型的字段的时间格式,在格式文件的最后加上如下形式内容: DATEFORM YYYY/MM/DD HH:MI:SS 或者可以通过指定环境变量ILO_DATEFORM来达到同样的效果,并且如果指定了环境变量ILO_DATEFORM,那么格式文件中指定的DATEFORM将被忽略。 常用date类型的定义格式如下: dateFORM YYYY-MM-DD HH:MI:SS:SSSSSS dateFORM YYYY/MM/DD HH:MI:SS:SSSSSS dateFORM YY/MM/DD HH:MI:SS:SSSSSS dateFORM YY-MM-DD HH:MI:SS:SSSSSS dateFORM YYYYMMDDHHMISSSSSSSS dateFORM YYMMDDHHMISSSSSSSS dateFORM YY dateFORM YYYY dateFORM YYMMDD dateFORM YYYYMMDD dateFORM HHMISSSSSSS dateFORM HH:MI:SS:SSSSS dateFORM HH:MI:SS 加单引号可以进行更自由的定义,如 date FORM 'YYyear MMmonth DDday' 示例: 1. 创建测试表datetab,i2列date类型,并插入两条数据 iSQL> Create table datetab (i1 integer,i2 date,i3 integer); Create success. iSQL> INSERT INTO datetab VALUES(1, to_date('2002-01-23 10:11:12', 'YYYY-MM-DD HH:MI:SS'), 1); 1 row inserted. iSQL> INSERT INTO datetab VALUES(2, to_date('2009-08-28 10:10:10', 'YYYY-MM-DD HH:MI:SS'), 2); 1 row inserted. 2. 查看结果,iql默认时间格式为”YYYY/MM/DD HH:MI:SS” iSQL> select * from datetab; DATETAB.I1 DATETAB.I2 DATETAB.I3 ------------------------------------------------- 1 2002/01/23 10:11:12 1 2 2009/08/28 10:10:10 2 2 rows selected. 使用iloader导出格式文件datetab.fmt,并对其进行编辑,将最后一行修改为 ALTIBASE维护手册 “DATEFORM YYYY-MM-DD HH:MI:SS” iLoader> formout -T datetab -f datetab.fmt $ vi datetab.fmt table datetab { I1 integer; I2 date; I3 integer; } DATEFORM YYYY-MM-DD HH:MI:SS 3. 使用iloader工具导出数据并进行查看 iLoader> out -f datetab.fmt -d datetab.dat DATE FORMAT : YYYY-MM-DD HH:MI:SS Total 2 record download(datetab) DOWNLOAD: 9052 $ cat datetab.dat 1^2002-01-23 10:11:12^1 2^2009-08-28 10:10:10^2 4. 导入数据时需注意表的格式文件与数据文件中的格式必须一致,否则将会报错 $ vi datetab.fmt table datetab { I1 integer; I2 date; I3 integer; } DATEFORM YYYY/MM/DD HH:MI:SS =>将该处修改为以“/”分割 iLoader> in -f datetab.fmt -d datetab.dat -log datetab.log DATE FORMAT : YYYY/MM/DD HH:MI:SS UPLOAD: 231 Load Count : 0(datetab) Error Count : 2 =>出现错误数据 $ cat datetab.log =>查看日志 TableName : datetab Start Time : Sun Aug 30 16:32:42 2009 1^2002-01-23 10:11:12^1 [ERR-21022 : Invalid date literal] 2^2009-08-28 10:10:10^2 [ERR-21022 : Invalid date literal] End Time : Sun Aug 30 16:32:42 2009 Total Row Count : 2 Load Row Count : 0 Error Row Count : 2 3.2.5.3 WHERE子句 数据导出时可以通过编辑格式文件,加入where子句对导出数据进行条件判断,语法如下: ALTIBASE维护手册 DOWNLOAD CONDITION where_predicates_clause 示例: 1. 创建测试表,并插入5条测试数据 iSQL> CREATE TABLE claustab(t1 INTEGER,t2 INTEGER,t3 DATE); Create success. iSQL> INSERT INTO claustab VALUES(1, 1, '01-May-2002'); 1 row inserted. iSQL> INSERT INTO claustab VALUES(2, 2, '02-Jun-2002'); 1 row inserted. iSQL> INSERT INTO claustab VALUES(3, 3, '03-Apr-2002'); 1 row inserted. iSQL> INSERT INTO claustab VALUES(4, 4, '04-Sep-2002'); 1 row inserted. iSQL> INSERT INTO claustab VALUES(5, 5, '05-Oct-2002'); 1 row inserted. iSQL> SELECT * FROM claustab; CLAUSTAB.T1 CLAUSTAB.T2 CLAUSTAB.T3 ------------------------------------------------- 1 1 2002/05/01 00:00:00 2 2 2002/06/02 00:00:00 3 3 2002/04/03 00:00:00 4 4 2002/09/04 00:00:00 5 5 2002/10/05 00:00:00 5 rows selected. 2. 编辑claustab.fmt格式文件,最后一行添加条件DOWNLOAD CONDITION "where t1 > 2" $vi claustab.fmt table claustab { T1 integer; T2 integer; T3 date; } DATEFORM YYYY/MM/DD HH:MI:SS DOWNLOAD CONDITION "where t1 > 2" 3. 导出数据并查看结果 iLoader> out -f claustab.fmt -d claustab.dat Total 3 record download(claustab) DOWNLOAD: 28282 $ cat claustab.dat 3^3^2002/04/03 00:00:00 4^4^2002/09/04 00:00:00 5^5^2002/10/05 00:00:00 ALTIBASE维护手册 3.2.6 常见问题 3.2.6.1 记录上载失败 常见上载失败的情况有以下三个 l 上载的数据在目标表中已经存在,并且存在主键或唯一索引冲突; l 上载的数据存在与分隔符冲突的数据,修改分隔符避免该冲突; l 空间不足 3.2.6.2 格式文件语法错误 手动编辑格式文件可能造成格式文件的语法错误,同时如果列名与ALTIBASE iLoader的关键字冲突也会发生意外的错误,以下列出了所有iLoader的关键字,须避免使用其作列名 ALTIBASE APPEND BIGINT BIT BLOB BOOLEAN CHAR CONDITION CURRVAL DATE DATEFORM DECIMAL DOUBLE DOWNLOAD EXIT FLOAT FORMOUT HELP HSS _BYTES HSS_NIBBLE IN INTEGER MSSQL NEXTVAL NUMBER NUMERIC ORACLE OUT QUIT REAL REPLACE SEQUENCE MALLINT TABLE VARCHAR YY YYYY YYMMDD YYYYMMDD HHMISSSSSSS YYMMDDHHMISSSSSSSS YYYYMMDDHHMISSSSSSSS 3.2.6.3 性能相关 l 通常iLoader连接ALTIBASE使用TCP协议,如果iLoader和ALTIBASE服务器在同一台机器上,那么我们推荐使用IPC或者Unix domain方式进行连接,可有效提高性能。指定环境变量以改变连接方式 CSH: setenv ISQL_CONNECTION IPC BASH/KSH: export ISQL_CONNECTION=IPC ALTIBASE维护手册 下表为某次测试时上载10万条数据时的时间对比 连接方式 TCP UNIX IPC 时间 6.942s 5.178s 3.968s l 通过设置-commit参数指定提交的记录数,增加该值以提高性能。 下表为某次测试时上载10万条数据时的时间对比,TCP连接方式下 -commit 参数值 1 10 100 1000 时间 9.802s 7.721s 7.072s 6.942s l 通过设置-array参数来实现以组为单位的预读和提交,可以有效提高上载性能。 下表为某侧测试时上载10万条数据时的时间对比,TCP连接,-commit 100情况下 -array参数值 1 10 100 1000 时间 7.072s 2.455s 1.940s 1.883s iSQL提供SQL交互功能,通过iSQL工具启动关闭ALTIBASE数据库并执行SQL语句和其他命令语查询或修改数据库对象以及其他信息,为用户提供便利。 iSQL 执行文件在 $ALTIBASE_HOME/bin 下。 3.2.6.4 关于sysdba选项 1)使用 sysdba 选项连接数据库时,根据数据库的 property 设置的 port 连接,所以 -sysdba 和-s, -port 不能同时使用。 2)同时只能以 sysdba 权限连接数据库,而且是本机。 3.3 aexport ALTIBASE 数据库之间同步(migration)的工具。 把数据库的逻辑结构以 SQL 脚本存储,并把所有的数据以文件形式下载到磁盘,用于 ALTIBASE 之间的数据同步,也用于离线备份。 从数据库取出数据库用户,用户权限,表空间,表,约束条件,索引,视图,存储过程,复制对象。 ALTIBASE维护手册 不同 ALTIBASE 版本,不同操作系统之间同步数据时,可有效使用。 3.3.1 概述 aexport是一个用于ALTIBASE数据库之间迁移数据的工具,它将数据库的逻辑结构和数据以文本格式的方式进行储存,并且创建脚本用于将这些数据自动的导入到新的ALTIBASE数据库中。 Aexport工具可以提取的数据库对象包括数据库的用户、用户权限、表、表空间、约束、索引、视图、存储过程、序列、复制等。 Aexport会将表的结构等信息以SQL脚本的形式进行储存,将数据以文本格式进行存储,这对于不同版本的ALTIBASE数据库或者不同平台下的数据库之间的迁移是很有必要的,同时Aexport也可以当作一种离线备份的方式 3.3.2 语法 可在shell提示符下键入aexport -h来获取aexport命令的使用帮助 $ aexport -h ============================================================== AEXPORT HELP screen ============================================================== Usage : aexport [-h] [-s server_name] [-u user_name] [-p password] [-port port_no] [-NLS nls_name] -h : This screen -s : Specify server name to connect -u : Specify user name to connect -p : Specify password of specify user name -port: Specify port number to communication -NLS : Specify NLS of server 直接执行aexport,输入相关连接信息后,一系列SQL脚本将被创建,包括: SYS_CRT_USER.sql : User creation SYS_PRIV_USER.sql : User privilege SYS_CRT_TBS.sql : Table space creation SYS_CRT_REP.sql : Replication Object creation ALL_CRT_VIEW.sql : view creation ALL_CRT_PROC.sql : Stored procedure creation {User name}_CRT_TBL.sql : Table creation {User name}_CRT_INDEX.sql : Index creation {User name}_CRT_FK.sql : Foreign creation ALTIBASE维护手册 执行aexport的时候,还会创建调用上述SQL脚本的Shell脚本,包括: run_il_in.sh : Data load script run_il_out.sh : Data download script run_is.sh : Schema creation script run_is_fk.sh : Foreign key creation script run_is_index.sh : Index creation script run_is_repl.sh : isql replication script 3.3.3 执行过程 1. 使用aexport工具提取源数据库结构 $aexport -s 127.0.0.1 -u sys -p manager 指定ALTIBASE数据库用户的密码(如果以sys用户进行导出,那么会提示输入所有存在用户的口令)。 如果使用Aexport对远端的数据库进行备份,那么需要指定该服务器的地址和端口号 $aexport -s 210.83.161.222 -port 20300 -u sys -p manager 2. 执行aexport工具生成的Shell脚本,提取数据 首先需要检查磁盘空间是否充足,文本文件的数据将占用比实际数据库更多的空间,一般推荐磁盘空间为数据库数据文件的两倍 执行run_il_out.sh脚本 $sh run_il_out.sh 3. 在目标表中建立数据库结构: 拷贝所有aexport生成的SQL、Shell脚本以及run_il_out.sh脚本生成的fmt、log、dat文件到目标数据库服务器,如果数据库服务器相同,那么这步可以省略。 执行run_is.sh脚本 $sh run_is.sh 通过iSQL访问数据库,察看是否创建了一个正确的数据库结构,如果被建立的数据库结构是错误的,请检查run_is.sh脚本以确认问题所在 4. 上载数据到目标表 ALTIBASE维护手册 执行run_il_in.sh脚本 $sh run_il_in.sh 执行完毕后检查该脚本目录下是否生成了大于0的扩展名为.bad的文件,如果存在,查看对应表的log文件和bad文件以找寻错误原因。 5. 在目标表中创建索引和外键 执行run_is_index.sh脚本 $sh run_is_index.sh 执行run_is_fk.sh脚本 $sh run_is_fk.sh 3.3.4 注意事项 1. aexport工具生成的所有脚本都是文本文件,用户可以根据需要进行修改以实现更多功能。 2. 如果执行aexport时使用了一个普通用户而非sys,那么在创建脚本时仅创建该用户的对象信息,并且不会创建复制对象; 3. 在执行run_is.sh脚本时,所有的已存在的同名用户和对象将会首先被删除,所以切记不能在源库中执行这个脚本 4. 生成存储过程时,如果没有提前生成其依赖的存储过程则会失败。 AEXPORT无法访问存储过程之间的逻辑关系,所以无法保证存储过程生成顺序。需要手动生成失败的存储过程 5. AEXPORT 只能限制性地访问 sequence的 meta信息,所以当在一般用户下创建 sequence的时候,只能创建‘increment by’定义的属性,其他属性就是默认,如果因为这些引起了问题,那么需要手动的在目标表中创建序列对象。 3.3.5 aexport.properties aexport配置文件位于$ALTIBASE_HOME/conf下,可以通过编辑aexport.properties文件进行aexport配置参数的修改,主要参数说明如下,一般不推荐对其进行修改: ALTIBASE维护手册 Ø OPERATION = IN/OUT 如果设置为OUT,生成的脚本可以提取出所有的模式对象和数据,数据提取脚本(由iLoader命令组成)执行时,格式文件(.fmt)和数据文件(.dat)将会被生成; 如果设置为IN,被OUT参数所生成模式建立脚本和数据载入脚本可以被执行,相应的模式对象和数据可以装载到目标数据库。 Ø EXECUTE = ON/OFF 设置是否自动执行生成的脚本。 如果设置为ON,脚本文件(使用在配置文件中设定的文件名)将会按照OPERATION参数的设置而自动执行,其他情况下只是生成脚本。 Ø INDEX = ON/OFF 导出的[User_Name]_CRT_INDEX.sql脚本中是否包含索引创建信息 Ø USER_PASSWORD = altibase 设置生成脚本中的一般用户口令,如果设置了该参数,那么使用sys用户导出时将不提示输入其他用户的口令。 Ø DROP = ON/OFF 设置导出的脚本中是否包含drop对象的语句 Ø VIEW_FORCE 设置导出视图时以视图方式还是表的方式进行导出,预留功能,ALTIBASE4版本没有意义。 Ø ILOADER_FIELD_TERM = ^ iloader参数,设置数据文件中字段间(列)的分隔符 Ø ILOADER_ROW_TERM = %n iloader参数,设置数据文件中记录间(行)的分隔符 以下几个参数设置生成SHELL脚本的名称 ISQL = run_is.sh ISQL_INDEX = run_is_index.sh ILOADER_OUT = run_il_out.sh ALTIBASE维护手册 ILOADER_IN = run_il_in.sh ISQL_FOREIGN_KEY = run_is_fk.sh ISQL_REPL = run_is_repl.sh 3.4 Admin Center ALTIBASE GUI工具。 3.4.1 安装方法 1)首先下栽 Admin Center package http://www.ALTIBASE.com/download_back/ALTIBASE/ALTIBASE4/AdminCenter 2)把 $ALTIBASE_HOME/lib/ALTIBASE.jar 拷贝到Admin Center安装的目录 3.4.2 注意事项 JRE 1.4.x 以上才能执行 3.5 altiProfile 可以实时获得数据库的信息,记录所有 DML 的 Query 信息 l 使用方法 - iSQL 上设定 altiProfile 执行属性 ALTER SYSTEM SET QUERY_PROF_FLAG = [0~1023] - 设定属性时,生成以下文件 $ALTIBASE_HOME/TRC/alti-TIMEMICROSEC.prof. - 结果分析 altiProfile [ profile_name ] 3.6 altierr 类似于oracle的 oerr,确认 SQLCODE的工具 ALTIBASE维护手册 l 使用方法 altierr {-w keyword pattern | [-n] error number} - 如) $ altierr 0x31045 $ altierr 200773 3.7 dump_stack.sh ALTIBASE数据库非正常结束时记录的 ALTIBASE_boot.log 日志转换为可读的内容。 l 3.7.1 使用方法 dump_stack.sh altibase.map altibase_boot.log out.txt 第四部分 ALTIMON监控工具 4.1 ALTIMON简介 4.1.1 Monitoring Script (altimon.sh) 以一定的周期反复查询并记录Altibase的相关状态信息。 l 需要查看的事项 Ø ALTIBASE process 状态 ALTIBASE process 存在性 ALTIBASE process 内存使用量 ALTIBASE CPU 使用量 ALTIBASE 相关磁盘剩余空间 Ø Log file log file 个数 Ø Replication ALTIBASE维护手册 replication gap Ø ALTIBASE 性能视图监控 Checkpoint 信息 表内存用量 连接会话信息 锁监控 内部事务数监控 l 生成的文件 1. 一般的日志文件 记录一般的状态信息。(altimon.log) 2. error 日志文件 记录问题。(altimon_error.log) 记录严重问题。(altimon_alert.log) l 使用方法 altimon.sh [start|stop|restart|view]

下载文档到电脑,查找使用更方便

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 5 金币 [ 分享文档获得金币 ] 2 人已下载

下载文档