Ari--孤独的狙击手

生命中其实是没有幸福或者不幸的,生命只是活着,静静地活着,有一丝孤零零的意味

导航


公告






My blog is worth $11,855.34.
How much is your blog worth?




统计

文章分类

档案

随笔分类

相册

Blog

BlogEn

Csdn

CSharp

Friends

My favor

登录

2007年11月5日 #

(2007 9月19日)解决ORA-02429和ORA-02297错误

    解决了两个错误:
ORA-02429: cannot drop index used for enforcement of unique/primary key
ORA-02297: cannot disable constraint (XXX_DJCM.PK_CONTAINER) - dependencies exist
 
  开发的同事说有一索引已经无用,要求删除,那知道执行的时候出错:
 SQL>drop index CONTAINER_I_CONTAINER_REF_NO_C;
ORA-02429: cannot drop index used for enforcement of unique/primary key
 
SQL>ALTER TABLE CONTAINER MODIFY PRIMARY KEY DISABLE;
ORA-02297: cannot disable constraint (XXX_DJCM.PK_CONTAINER) - dependencies exist
 
SQL>select owner, CONSTRAINT_NAME, TABLE_NAME, CONSTRAINT_TYPE
  from user_constraints
 where table_name = 'CONTAINER';
SQL>alter table CONTAINER disable constraint PK_CONTAINER cascade;
SQL>ALTER TABLE CONTAINER MODIFY PRIMARY KEY DISABLE;
-- Drop indexes
SQL>drop index CONTAINER_I_CONTAINER_REF_NO_C;
SQL>ALTER TABLE CONTAINER MODIFY PRIMARY KEY ENABLE;
SQL>alter table CONTAINER ENABLE constraint PK_CONTAINER;
 
参考:
http://topbright.spaces.live.com/blog/cns!3C05B678E10C41A0!1060.entry
http://www.dbforums.com/showthread.php?threadid=994778

Blog Tags: oracle

21:41 | 评论 (0)

(2007 9月18日)用crontab定期产生statspack的报表

      最近生产系统的oracle出了几次性能突然下降的问题,天天老是执行那几个捉取、生成报告的命令实在麻烦,所以,参考网上的指导,修改成在自己的环境中可每天自动执行的脚本!
 
说明:从早上8点到晚上8点之间进行快照收集,晚上9点执行cron进程启动,产生报表的快照也限于当天收集的快照,将当天最小的snap_id与最大的snap_id放到两个文件中,在sheel中读出,并计算出一个报表名称,最后产生的报表通过sendmail发送到相关人员的邮箱,然后每天晚只需要收邮件就可以看到当天的报表啦。
 
      运行环境:redhat as 4.5 64bit, aix 5.3,oracle 10.2.0.3 64bit
1, redhat as 4.5 64bit
 
[oracle@fsdb autoperf]$ cat auto_perf.sh
#!/bin/sh
source ~/.bash_profile
/u01/oracle/product/10.2.0/db_1/bin/sqlplus -s /nolog<<!
conn perfstat/perfstat
set head off
set timing off
spool /backup/autoperf/snap_begin.lst
select min(snap_id) snap_id
from stats\$snapshot
where snap_time between trunc(sysdate) and trunc(sysdate)+1;
spool off
spool /backup/autoperf/snap_end.lst
select max(snap_id) snap_id
from stats\$snapshot
where snap_time between trunc(sysdate) and trunc(sysdate)+1;
spool off
exit
!
BEGIN_SNAP=`cat /backup/autoperf/snap_begin.lst | tail -n 2`
END_SNAP=`cat /backup/autoperf/snap_end.lst | tail -n 2`
#END_SNAP=`expr $BEGIN_SNAP + 13`
REPORT_NAME=/backup/autoperf/sp`date +%m%d`_ac
# echo $REPORT_NAME
/u01/oracle/product/10.2.0/db_1/bin/sqlplus -s /nolog<<!
conn perfstat/perfstat
define begin_snap=$BEGIN_SNAP
define end_snap=$END_SNAP
define report_name=$REPORT_NAME
@?/rdbms/admin/spreport
exit
!
# echo $REPORT_NAME".lst"
mail -s "perfstat report" admin@webmaster.com < $REPORT_NAME".lst"
 
/u01/oracle/product/10.2.0/db_1/bin/sqlplus -s /nolog<<!
conn perfstat/perfstat
set echo off
delete from stats\$snapshot where snap_id <= $END_SNAP;
commit;
exit
!
# cat sp0918_ac.lst | mail admin@webmaster.com
# crontab -l
# 0 21 * * * /backup/autoperf/auto_perf.sh >> /backup/autoperf/perf.lst 2>&1
!
 
2, AIX
 
$vi autoperf.ksh
#!/bin/ksh
. ~/.profile
/u01/oracle/product/bin/sqlplus -s /nolog<<!
conn perfstat/perfstat
set head off
set timing off
spool /u01/backup/snap_begin.lst
select min(snap_id) snap_id
from stats\$snapshot
where snap_time between trunc(sysdate) and trunc(sysdate)+1;
spool off
spool /u01/backup/snap_end.lst
select max(snap_id) snap_id
from stats\$snapshot
where snap_time between trunc(sysdate) and trunc(sysdate)+1;
spool off
exit
!
BEGIN_SNAP=`cat /u01/backup/snap_begin.lst | tail -n 2`
END_SNAP=`cat /u01/backup/snap_end.lst | tail -n 2`
#END_SNAP=`expr $BEGIN_SNAP + 13`
REPORT_NAME=/u01/backup/sp`date +%m%d`_ac
/u01/oracle/product/bin/sqlplus -s /nolog<<!
conn perfstat/perfstat
define begin_snap=$BEGIN_SNAP
define end_snap=$END_SNAP
define report_name=$REPORT_NAME
@?/rdbms/admin/spreport
exit
!

mailx -s "perfstat report"
admin@webmaster.com < $REPORT_NAME".lst"

/u01/oracle/product/bin/sqlplus -s /nolog<<!
conn perfstat/perfstat
set echo off
delete from stats\$snapshot where snap_id <= $END_SNAP;
commit;
exit
!
     脚本不是很完善,如应该保留几天的备份,如检查oracle是否启动,如检查两个snpa_id 之间是否有停机等,留待以后完善!也可参考如下:
http://www.odba.idv.tw/autoclean.htm
清除statspack所产生的snapshot script
本文转译自 http://www.jlcomp.demon.co.uk/
下面的 script可以利用cron排程来自动执行清除超过保留数目的旧有snapshot数据,这个script不需要知道PERFSTAT此账号的密码就可执行,并已经经由Oracle8.1.7和9.2.0上测试过。
 

Blog Tags: linux

21:39 | 评论 (0)

(2007 9月18日)linux:远程logoff登录的用户

   前几天,外地的一台服务器由于UPS故障,导致死机,重新开机后服务不正常,而我又刚巧不在公司,就电话告诉一个同事登录,重启服务,还告知其操作完要退出登录,那知道今天常规检查,还是发现他没有退出。只能考虑远程退出,有几个命令据说可以,如 pkill -U uid ,skill -KILL -v /dev/pts/* 等,但执行不大成功,后来,还是用 who -u 检查出相关的进程号,直接kill, 具体操作如下:
 
[root@dbzj ~]# who
root     :0           Sep  5 11:40
root     pts/1        Sep  5 11:40 (:0.0)
root     pts/2        Sep 18 09:40 (192.168.1.222)

[root@dbzj ~]# w
 09:52:53 up 12 days, 22:31,  3 users,  load average: 0.00, 0.00, 0.00
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
root     :0       -                05Sep07 ?xdm?  15:35   0.12s /usr/bin/gnome-
root     pts/1    :0.0             05Sep07 12days  0.00s  0.00s bash
root     pts/2    192.168.1.222   09:40    0.00s  0.00s  0.00s w
 
[root@dbzj ~]# who -u
root     :0           Sep  5 11:40   ?          5054
root     pts/1        Sep  5 11:40  old         5208 (:0.0)
root     pts/2        Sep 18 09:40   .         28524 (192.168.1.222)
 

[root@dbzj ~]# kill -9 5208
[root@dbzj ~]# who -u
root     :0           Sep  5 11:40   ?          5054
root     pts/2        Sep 18 09:40   .         28524 (192.168.1.222)
[root@dbzj ~]# kill -9 5054
[root@dbzj ~]# who
root     pts/2        Sep 18 09:40 (192.168.1.222)

Blog Tags: linux

21:37 | 评论 (0)

(2007 9月7日)IBM小型机上安装AIX5.3

    公司一台旧的IBM小型机,数据都已经迁移到新服务器,暂时空置无用,酝酿了一段时间,今天开始在上面安装新的操作系统AIX5.3。
 
    安装过程比较顺利,就是有时候等的时间比较长,大概花了两个多小时,下周再对系统软件进行安装配置。
    今天大概作了如下工作:
1, 升级微码
2, 安装系统,选择完全安装,选择磁盘,选择支持64为,cfs2文件格式
    第一次按说明文档,按F5,进入不了光盘的安装界面,第二次启动按5才进去了;
3, mirror rootvg
 
    安装步骤笔记如下:
 
检查系统是否支持64位
# bootinfo -y
64
# /usr/sbin/prtconf -c
CPU Type: 64-bit
当前系统使用32还是64位
# bootinfo -K
64
# ls -l /unix
lrwxrwxrwx   1 root     system           21 Sep 08 2007  /unix -> /usr/lib/boot/unix_64
当前使用的版本
# oslevel
4.3.3.0
用lsfs来查看文件系统
# lsfs -q /usr
Name            Nodename   Mount Pt               VFS   Size    Options    Auto Accounting
/dev/hd2        --         /usr                   jfs2  2424832 --         yes  no
  (lv size: 2424832, fs size: 2424832, block size: 4096, sparse files: yes, inline log: no, inline log size: 0, EAformat: v1, Quota: no, DMAPI: no, VIX: no)
#
 
检查当前磁盘
# lsdev -Cc disk
hdisk0 Available 40-60-00-4,0 16 Bit LVD SCSI Disk Drive
hdisk2 Available 21-08-L      SSA Logical Disk Drive
hdisk3 Available 21-08-L      SSA Logical Disk Drive
hdisk1 Available 40-60-00-8,0 16 Bit LVD SCSI Disk Drive
检查当前vg
# lsvg -p rootvg
rootvg:
PV_NAME           PV STATE    TOTAL PPs   FREE PPs    FREE DISTRIBUTION
hdisk0            active      542         137         00..00..00..28..109
hdisk1            active      542         137         108..09..00..00..20
 
检查机器微码版本,并升级
升级前:
# lscfg -vp | grep alterable
        ROM Level.(alterable).......M2P020329
        ROM Level.(alterable).......0000CMD02252
        ROM Level.(alterable).......CM020422  
升级步骤:

cd /usr/lpp/diagnostics/bin ./update_flash -f /tmp/CM_MM_060505.img

升级后:
# lscfg -vp | grep alterable
        ROM Level.(alterable).......M2P060505_condor_
        ROM Level.(alterable).......0000CMD02252
        ROM Level.(alterable).......CM060505
 
 
 
如何查看硬盘是否做过mirror
# lsvg -l rootvg
rootvg:
LV NAME             TYPE       LPs   PPs   PVs  LV STATE      MOUNT POINT
hd5                 boot       1     2     2    closed/syncd  N/A
hd6                 paging     32    64    2    open/syncd    N/A
hd8                 jfs2log    1     2     2    open/syncd    N/A
hd4                 jfs2       2     4     2    open/syncd    /
hd2                 jfs2       24    48    2    open/syncd    /usr
hd9var              jfs2       4     8     2    open/syncd    /var
hd3                 jfs2       4     8     2    open/syncd    /tmp
hd1                 jfs2       1     2     2    open/syncd    /home
hd10opt             jfs2       1     2     2    open/syncd    /opt
fwdump              jfs2       3     6     2    open/syncd    /var/adm/ras/platform
paging00            paging     1     2     2    open/syncd    N/A
oracle              jfs2       72    144   2    open/syncd    /oracle
lp=2pp 表示一份镜像,lp=pp表示没做,lp=3pp表示有二份
 
检查是否做QUORUM
# lsvg rootvg
VOLUME GROUP:       rootvg                   VG IDENTIFIER:  00c9025e00004c00000001028e382d4b
VG STATE:           active                   PP SIZE:        128 megabyte(s)
VG PERMISSION:      read/write               TOTAL PPs:      1092 (139776 megabytes)
MAX LVs:            256                      FREE PPs:       712 (91136 megabytes)
LVs:                14                       USED PPs:       380 (48640 megabytes)
OPEN LVs:           13                       QUORUM:         1 TOTAL PVs:          2                        VG DESCRIPTORS: 3
STALE PVs:          0                        STALE PPs:      0
ACTIVE PVs:         2                        AUTO ON:        yes
MAX PPs per VG:     32512                                   
MAX PPs per PV:     1016                     MAX PVs:        32
LTG size (Dynamic): 256 kilobyte(s)          AUTO SYNC:      no
HOT SPARE:          no                       BB POLICY:      relocatable
QUORUM:         1 表示没有,
QUORUM:         2表示有。
 
 
镜像硬盘
# bootinfo -b
hdisk0
 
# extendvg rootvg hdisk1
0516-1398 extendvg: The physical volume hdisk1, appears to belong to
another volume group. Use the force option to add this physical volume
to a volume group.
0516-792 extendvg: Unable to extend volume group.
 
# extendvg -f rootvg hdisk1
# chvg -Qn rootvg
# mirrorvg rootvg hdisk1
0516-1126 mirrorvg: rootvg successfully mirrored, user should perform
        bosboot of system to initialize boot records.  Then, user must modify
        bootlist to include:  hdisk1 hdisk0.

# bosboot -ad /dev/hdisk1
bosboot: Boot image is 30420 512 byte blocks.

# bootlist -m normal hdisk0 hdisk1 cd0
# shutdown -Fr
# lsvg -p rootvg
rootvg:
PV_NAME           PV STATE          TOTAL PPs   FREE PPs    FREE DISTRIBUTION
hdisk0            active            542         448         108..60..63..108..109
hdisk1            active            542         480         108..92..63..108..109

Blog Tags: aix

21:35 | 评论 (0)


请不要发表可能给我们带来伤害的政治言论,谢谢配合