ALTIBASE常用命令和脚本
1.13. Perl中altibase的DBI的使用... 6
Altibase使用ISQL连接数据库,默认连接方式为TCP/IP,isql的使用帮助如下:
cxyt@ocstest[/home/cxyt]> isql -h
=====================================================================
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 toconnect
-u : Specify user name to connect
-p : Specify password of specifyuser name
-port : Specify port number to communication
-f : Specify script file toprocess
-o : Specify file to save result
-v : Print command once more
-silent : No display Copyright
isql -s 127.0.0.1 -u ocs_rf -p ocs_rf
使用isql连接数据库时,默认连接IP:127.0.0.1,还有一些默认选项,如端口号、字符集等,都是在配置文件中指定,配置文件一般存在于路径: $ ALTIBASE_HOME/conf/ altibase.properties
在使用时,在个人profile中配置好所使用altibase数据库的环境变量即可。
select * from tab;
使用此命令即可查到所登陆用户所有的表。
查看altibase的sequence都是通过altibase的系统表查询
Select * from v$seq;
常用的视图可以通过如下sql查询:
Select * from v$tab;
通过如下SQL可以一并查出
Desc tableName
也可以从系统表查看表字段:
select a.TABLE_NAME , b.COLUMN_NAME
fromSYSTEM_.SYS_TABLES_ a, system_.SYS_COLUMNS_ b
wherea.TABLE_ID = b.TABLE_ID and a.TABLE_NAME='I_USER_RELATION';
alter table CSERVER_PARA add primary key(PARA_NAME)using index tablespace SYS_TBS_MEMORY; --指定表空间
Select * from tableName limit n; 查询tablename中前N条数据。
Select * from tableName limit m,n;查询tablename,从第M行开始查询N行。
alter table RAS_FREE_RESOURCE alter column(FREEZE_FREE_RES not null);
alter table test alter column (c1 setDEFAULT 0);
使用SQL语句可以修改表结构,具体使用方法,请参考altibase官方文档,需要注意的是,在生产环境中,如果主备机开了复制,需要停复制,才可以修改表结构。
使用exit或quit退出。
#!/usr/bin/sh
isql -s127.0.0.1 -u ocs_rf -p ocs_rf << EOF
select * from counter_tariff;
在我们平时连接altibase数据库时,需要输入一大段的字符串,才能成功连接到数据库,可以将命令写到脚本中,方便执行,假设用户名和密码相同,如下: isql.sh
#!/usr/bin/sh
if [ $# -lt 1 ]
then
echo"USAGE: $0 DSN .."
exit 1
fi
DSN=$1
shift
for param in $@
do
paramlst="$paramlst $param"
done
isql -s 127.0.0.1 -silent -u $DSN -p $DSN $paramlst
-bash-4.0$ cat ab.sql
select * from v$seq;
使用命令: isql -s 127.0.0.1 -uocs_rf -p ocs_rf -f ab.sql 就可以执行,因此可以在文件中写入批量的SQL,用isql来批量执行。
使用isql命令
命令格式为: 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][-noexp]
例子:
表格格式文件的生成,可以生成表结构。
iLoader> formout -T employee -f employee.fmt
iLoader> exit
shell> ls
employee.fmt
exp: iloaderformout -T COUNTER_TARIFF -f COUNTER_TARIFF.fmt -s 127.0.0.1 -u ocs_rf -p ocs_rf
数据下载
iLoader> out -f employee.fmt -d employee.dat
DATE FORMAT : YYYY/MM/DD HH:MI:SS
..
DOWNLOAD: 56936
iLoader> exit
shell> ls
employee.dat employee.fmt
exp: iloader out -fCOUNTER_TARIFF.fmt -d COUNTER_TARIFF.dat -s 127.0.0.1 -u ocs_rf -p ocs_rf
数据上传
iLoader> in -f employee.fmt -d employee.dat -modereplace
DATE FORMAT : YYYY/MM/DD HH:MI:SS
UPLOAD: 13880
Load Count : 20
Exp: iloader in -fCOUNTER_TARIFF.fmt -d COUNTER_TARIFF.dat -mode replace -s 127.0.0.1 -u ocs_rf -p ocs_rf
使用方法如下:
现在altibase-perl-dbd 只能支持32位, 所以,需要用32位perl.
dbd 需要 32位的altibase 的odbc库:libodbccli_sl.so 已经将这个库copy到$ALTIBASE_HOME/lib/libodbccli_sl_32.so
编译dbd 时指定 perl, 和 odbc库的位置。
已经链接到 32位的perl
perl 脚本连接字串如:
#!/usr/bin/perl
use DBI();
my $dbh = DBI->connect("dbi:altibase:DSN=127.0.0.1;UID=SYS;PWD=MANAGER;CONNTYPE=1;NLS_USE=US7ASCII;PORT_NO=20300", "", "", {'RaiseError' => 1, 'AutoCommit' =
> 0});
1、等待锁的query (就是查询哪些操作正等待锁资源被hold住)
select a.comm_name , a.client_pid , b.query
from v$session a , v$LOCK_STATEMENT b, v$lock_wait c
where a.id = b.session_id
and b.TX_ID = c.TRANS_ID;
2 占用锁的query (就是查询哪些操作正占用着锁资源)
select a.comm_name , a.client_pid , b.query
from v$session a , v$LOCK_STATEMENT b, v$lock_wait c
where a.id = b.session_id
and b.TX_ID = c.WAIT_FOR_TRANS_ID;
3 查询当前的更新锁
select a.comm_name , a.client_pid , b.queryfrom v$session a , v$LOCK_STATEMENT b, v$lock c
where a.id = b.session_id
and b.TX_ID = c.TRANS_ID
and c.LOCK_DESC = 'IX_LOCK';
通过在锁视图V$LOCK_STATEMENT和V$LOCK中查到相应的锁信息,再通过如下命令解锁。
alter database mydbsession close 3606;
在命令行运行aexport命令,生成相应的shell脚本
run_il_out.sh为导出数据的脚本
run_il_in.sh 为导入数据的脚本
run_is.sh 为建立用户的脚本
run_is_index.sh 为建立索引的脚本
run_is_fk.sh 为建立外键的脚本
注意:在使用后面四个脚本时,请注意修改相应的IP地址等等,防止在源数据库上执行了相应的脚本,破坏源数据库的数据。
实际为一个shell脚本,调用数据库命令实现。
Server start 开始数据库
Server stop 正常结束数据库
set linesize 150
set colsize 50
select comm_name , db_username , count(*)from v$session group by comm_name , db_username;
sysdba用户才有权限,普通用户没有该权限。
alter database mydb session closesession_id;
例如查看当前已执行SQL中最慢的前10位:
select
session_id,
execute_flag,
execute_time/1000||' ms' exec_msec,
fetch_time/1000||' ms' fetch_msec,
rpad(substr(query,1,80),80,' ') qry
--, query
from v$statement
where execute_flag = 1
order by execute_time desc, execute_flagdesc
limit 10;
select
--b.user_name||'.'||a.table_name table_name,
a.table_name table_name,
(c.FIXED_ALLOC_MEM+c.VAR_ALLOC_MEM) allocsize,
(c.FIXED_USED_MEM+c.VAR_USED_MEM) usedsize,
round((c.FIXED_USED_MEM+c.VAR_USED_MEM)*100/(c.FIXED_ALLOC_MEM+c.VAR_ALLOC_MEM),2)
efficency
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'
order by allocsize desc, usedsize desc;
如需了解更多内容,请参考altibase的详细文档。
修改记录:
序号 | 修改内容描述 | 更新时间 | 修改人 |
1 | 初稿 | 2010-1-20 | 尹涛 |
2 | 增加可能用到的查询死锁以及与查询性能相关的部分sql语句 | 2010-1-25 | 莫高习 |