昨天给开发装异开发环境的db
由于很久都没有碰过Linux了,所以操作有点不熟,在公司实习这一周来天天都是看书,也很想练练手,其中,配置完环境后,就开始创建装软件,但是我是远程连上去的(CRT),不支持图形界面,所以在本机转了一个xmanager,但是出现了乱码的情况,出于时间紧迫,问了问同事,在CRT连接配置上x11转发,选择这个选项使CRT请求远程机器把X11数据转发到运行本机的x服务器上,这样就可以支持xwind界面了,当然你可以选择静默安装。
安装好后出现了一下的问题,以及相应的解决办法和心得:
ORA-01102 cannot mount database in EXCLUSIVE mode
在启动db的时候,出现ora-01102,检查alter.log:
Thu Apr 8 20:23:11 2010
ALTER DATABASE MOUNT
Thu Apr 8 20:23:11 2010
sculkget: failed to lock /opt/app/notify/oracle//dbs/lkNOTIFY exclusive
sculkget: lock held by PID: 666
Thu Apr 8 20:23:11 2010
ORA-09968: unable to lock file
Linux-x86_64 Error: 11: Resource temporarily unavailable
Additional information: 666
从日志文件中可以看到是由于锁定lksid这个文件,该文件被pid666锁定
可以用[root@test165 ~]# fuser -u /opt/app/notify/oracle/dbs/lkNOTIFY 查看该文件的使用情况;
然后fuser -k lkNOTIFY将文件释放,或者从命名该文件也可。
【
在网上看见一些相关错误的解决:
作者: fuyuncat
来源: www.HelloDBA.com
出现1102错误可能有以下几种可能:
一、在HA系统中,已经有其他节点启动了实例,将双机共享的资源(如磁盘阵列上的裸设备)占用了;
二、说明Oracle被异常关闭时,有资源没有被释放,一般有以下几种可能,
1、 Oracle的共享内存段或信号量没有被释放;
2、 Oracle的后台进程(如SMON、PMON、DBWn等)没有被关闭;
3、 用于锁内存的文件lk和sgadef.dbf文件没有被删除。
如果怀疑是共享内存没有被释放,可以用以下命令查看:
$ipcs -mop
IPC status from /dev/kmem as of Thu Jul 6 14:41:43 2006
T ID KEY MODE OWNER GROUP NATTCH CPID LPID
Shared Memory:
m 0 0x411c29d6 --rw-rw-rw- root root 0 899 899
m 1 0x4e0c0002 --rw-rw-rw- root root 2 899 901
m 2 0x4120007a --rw-rw-rw- root root 2 899 901
m 458755 0x0c6629c9 --rw-r----- root sys 2 9113 17065
m 4 0x06347849 --rw-rw-rw- root root 1 1661 9150
m 65541 0xffffffff --rw-r--r-- root root 0 1659 1659
m 524294 0x5e100011 --rw------- root root 1 1811 1811
m 851975 0x5fe48aa4 --rw-r----- oracle oinstall 66 2017 25076
然后它ID号清除共享内存段:
$ipcrm –m 851975
对于信号量,可以用以下命令查看:
$ ipcs -sop
IPC status from /dev/kmem as of Thu Jul 6 14:44:16 2006
T ID KEY MODE OWNER GROUP
Semaphores:
s 0 0x4f1c0139 --ra------- root root
... ...
s 14 0x6c200ad8 --ra-ra-ra- root root
s 15 0x6d200ad8 --ra-ra-ra- root root
s 16 0x6f200ad8 --ra-ra-ra- root root
s 17 0xffffffff --ra-r--r-- root root
s 18 0x410c05c7 --ra-ra-ra- root root
s 19 0x00446f6e --ra-r--r-- root root
s 20 0x00446f6d --ra-r--r-- root root
s 21 0x00000001 --ra-ra-ra- root root
s 45078 0x67e72b58 --ra-r----- oracle oinstall
解决:
根据信号量ID,用以下命令清除信号量:
$ipcrm -s 45078
如果是Oracle进程没有关闭,用以下命令查出存在的oracle进程:
$ ps -ef|grep ora
oracle 29976 1 0 Jun 22 ? 0:52 ora_dbw0_ora92
oracle 29978 1 0 Jun 22 ? 0:51 ora_dbw1_ora92
oracle 5128 1 0 Jul 5 ? 0:00 oracleora92 (LOCAL=NO)
... ...
然后用kill -9命令杀掉进程
$kill -9
】
接着又遇到了
ORA-27086
ALTER DATABASE MOUNT
Thu Apr 8 20:32:28 2010
ORA-00202: control file: '/opt/app/notify/oradata/notify/control01.ctl'
ORA-27086: unable to lock file - already in use
Linux-x86_64 Error: 11: Resource temporarily unavailable
Additional information: 8
Additional information: 670
对于这种情况,将数据库起到NOMOUNT状态,创建PFILE文件,将控制文件复制到其它目录,同时修改PFILE文件中控制文件参数。以上修改完毕后,将数据库起到MOUNT状态。当你想将数据库打开时,会报错,说无法找到SYSTEM01.DBF文件,这里就得将所有数据文件目录通过alter database rename file '' to ''语句移动到其它目录,前提是已将文件复制到目的地。最后一步就是打开数据库。
总结:最后我们看到这两个错误中都有一个共同点:Linux-x86_64 Error: 11: Resource temporarily unavailable
我df -lv
root@test165 ~]# df -lv
Filesystem 1K-块 已用 可用 已用% 挂载点
/dev/sdb2 4032124 2788568 1038728 73% /
/dev/sdb1 124427 13496 104507 12% /boot
none 8203488 0 8203488 0% /dev/shm
/dev/sdb9 1406733196 276551544 1058723732 21% /home
/dev/sdb6 6048320 6048320 0 100% /opt
/dev/sdb8 4032092 524592 3302676 14% /tmp
/dev/sdb5 10080488 7631992 1936428 80% /usr
/dev/sdb7 6048320 350816 5390264 7% /var
果然/opt安装目录中已经没有了空间,
将数据库中各表空间添加数据文件到其他目录下
root@test165 ~]# df -lv
Filesystem 1K-块 已用 可用 已用% 挂载点
/dev/sdb2 4032124 2788568 1038728 73% /
/dev/sdb1 124427 13496 104507 12% /boot
none 8203488 0 8203488 0% /dev/shm
/dev/sdb9 1406733196 276551544 1058723732 21% /home
/dev/sdb6 6048320 4500424 1240656 79% /opt
/dev/sdb8 4032092 524592 3302676 14% /tmp
/dev/sdb5 10080488 7631992 1936428 80% /usr
/dev/sdb7 6048320 350816 5390264 7% /var
搞定.
心得:log文件很重要,要养成看log的习惯
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/11782778/viewspace-631706/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/11782778/viewspace-631706/