存档

Archive by ,文章数:326

Sybase ASE自V12.5.0.3引入了MDA表来监控Sybase数据库的性能,ASE15以来MDA的监控能力越来越强。本博客中有关于如何配置MDA表的文章:

如何配置监控表MonTables来实现ASE的监控功能

MDA中的代理表monProcessSQLText包含当前所有会话正在执行的SQL语句。如果已经配置了MDA,可以通过查询该代理表monProcessSQLText来获得正在执行的SQL语句。

在没有配置MDA监控的环境中,可以使用更加通用的命令来查询当前会话正在执行的SQL语句。dbcc sqltext命令需要sybase_ts_role角色才能执行,过程sp_showplan需要sa_role角色才能执行

下面提供一个存储过程来查询当前Sybase服务器内正在执行的所有SQL语句。思路是:获得当前使用锁的会话ID(spid),利用游标遍历得到每个spid的正在执行的SQL语句。

在CentOS5.5 x86_64上安装了Oracle11g,版本号为:11.2.0.1.0

但是,在其它客户端上使用sqlplus连接的时候需要等待很长时间才能连接上,有时候报超时的错误。

错误信息为:

***********************************************************************

Fatal NI connect error 12537, connecting to:
 (LOCAL=NO)

  VERSION INFORMATION:
        TNS for Linux: Version 11.2.0.1.0 - Production
        Oracle Bequeath NT Protocol Adapter for Linux: Version 11.2.0.1.0 - Production
        TCP/IP NT Protocol Adapter for Linux: Version 11.2.0.1.0 - Production
  Time: 30-NOV-2011 14:28:10
  Tracing not turned on.
  Tns error struct:
    ns main err code: 12537

TNS-12537: TNS:connection closed
    ns secondary err code: 12560
    nt main err code: 0
    nt secondary err code: 0
    nt OS err code: 0
opiodr aborting process unknown ospid (29666) as a result of ORA-609
Wed Nov 30 14:36:24 2011

Oracle11g服务器数据库名为:lzf,全局名称为:lzf.dbainfo.net

本博客中aix系统可以用改变时区的方法获取前后N天的日期

Linux下使用date计算某个月份的天数:

Month=2
Year=2008
nextmonth=`date -d "1 month $Year-$Month-"01""  +%Y-%m-%d`
date -d "-1 day $nextmonth" +%d
#或者将-d "1 month $Year-$Month-"01"" 和 date -d "-1 day $nextmonth" 写在一行命令中
Month=2
Year=2008
date -d "1 month $Year-$Month-"01"" -d "-1 day" +%d

使用cal 计算某个月份的天数:

本文所示提取的Oracle环境变量用ORACLE_HOME作为代表!

在linux或者unix环境上,很容易得到Oracle数据库的环境变量信息,比如:查看ORACLE_HOME

[oracle@centos5 ~]$ echo $ORACLE_HOME
/u01/oracle/product/11.2

在windows上可能稍微麻烦些了。如果windows系统上安装了Oracle服务器的话,正常情况下是有ORACLE_HOME这个环境变量的。

C:\>echo %oracle_home%
e:\oracle\db_1

将环境变量oracle_home赋值给其它变量用:set abc="%oracle_home%"

如果Oracle服务器的环境变量配置不正确或者只安装了Oracle客户端程序的话,本文将给出提取ORACLE_HOME的方法。

提取注册表使用的命令为:reg query 或者 reg export,命令语法为:

REG QUERY KeyName [/v ValueName | /ve] [/s]

REG EXPORT KeyName FileName

查看命令的具体参数,使用:reg export /? 或者 reg query /?

1.安装所需要的包
所需的包有vnc-server(vnc服务器软件包),vnc(客户端包)。
另外,既然想用VNC,肯定是想要看图形界面,那就还要安装"GNOME Desktop Environment"(如果是想用GNOME,否则用KDE)
如下:

#yum install vnc-server(注意在root下安装)
#yum install vnc
#yum groupinstall "GNOME Desktop Environment"

注意安装前先用rpm -qa|grep "vnc-server"这种方式来查询一下是否已经安装好。一般如果你安装centos时选用的是默认的方式安装系统,那上面的步骤可以省略。

2.准备VNC用户资料,包括创建你想要的用户和密码(就是系统自己那种用户密码)。
如:
#useradd peter
#passwd peter
如果系统所需帐号已经建立,或是你只想用root来登录VNCServer,那此步骤也可以略过。

linux下显示dd命令的进度:

dd if=/dev/zero of=/tmp/zero.img bs=10M count=100000

想要查看上面的dd命令的执行进度,可以使用下面几种方法:

比如:每5秒输出dd的进度

方法一:

watch -n 5 pkill -USR1 ^dd$

方法二:

watch -n 5 killall -USR1 dd

方法三:

while killall -USR1 dd; do sleep 5; done

方法四:

while (ps auxww |grep " dd " |grep -v grep |awk '{print $2}' |while read pid; do kill -USR1 $pid; done) ; do sleep 5; done

上述四种方法中使用三个命令:pkill、killall、kill向dd命令发送SIGUSR1信息,dd命令进程接收到信号之后就打印出自己当前的进度。


参考:贝塔中的DBA - 查看dd命令的执行进度

commandlinefu.comcheck the status of 'dd' in progress

rhel5 与 rhel4 不同的地方是, rhel5 里没有 /etc/X11/gdm/ 这个目录,因此在用xmanager连接linux时应选择“new session--->XDCMP“。
修改相关的dgm配置文件:
1. /etc/gdm/custom.conf
将 [xdmcp] 部分的 Enable 设置为 1,即:
[xdmcp]
Enable=1
Post=177
将 [security] 部分的 DisallowTCP 设置为 false,即:
[security]
DisallowTCP=false
2. /usr/share/gdm/defaults.conf确保有以下几句配置
Enable=true
DisplaysPerHost=10
Port=177
AllowRemoteRoot=true
3. /etc/inittab里把默认级别改为5
id:5:initdefault:
x:5:respawn:/usr/sbin/gdm
4.   /etc/securetty增加如下内容
pts/0
pts/1
pts/2
pts/3
pts/4

Sybase ASE12.5.3ESD#7的错误日志文件中频繁报下面的错误信息:

Error 1204, Severity 17, State 2 occurred for User 'sa'. Client IP address is 'XXX.XXX.XXX.XXX'.
SQL Text: select xxxx from xxxxx where xxxxx

查询Sybase错误信息手册,Error 1204是由锁数量不够导致的。

Error 1204的错误信息内容应该为:

SQL Server has run out of LOCKS. Re-run your command when there are fewer active users, or contact a user with System Administrator (SA) role to reconfigure SQL Server with more LOCKS.

自ASE12.5.2后,数据库引擎向错误日志文件中记录Error1204时还记录一些额外的信息,比如:客户端IP地址,登录用户名以及执行的SQL语句。

我这次看到的错误日志文件中仅有一些额外信息,比如:for User 'sa'. Client IP address is 'XXX.XXX.XXX.XXX'. SQL Text: sql_clause,并没有显示SQL Server has run out of LOCKS.这一行信息。