在故障发生时,尝试用下面的语句抓取数据库引起故障的点。
创新互联服务项目包括魏都网站建设、魏都网站制作、魏都网页制作以及魏都网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,魏都网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到魏都省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!
/*********************************************************************************************/
在oracle中监控死锁
/*********************************************************************************************/
SELECT sn.username,
m.SID,
sn.SERIAL#,
m.TYPE,
DECODE(m.lmode,
0,
'None',
1,
'Null',
2,
'Row Share',
3,
'Row Excl.',
4,
'Share',
5,
'S/Row Excl.',
6,
'Exclusive',
lmode,
LTRIM(TO_CHAR(lmode, '990'))) lmode,
DECODE(m.request,
0,
'None',
1,
'Null',
2,
'Row Share',
3,
'Row Excl.',
4,
'Share',
5,
'S/Row Excl.',
6,
'Exclusive',
request,
LTRIM(TO_CHAR(m.request, '990'))) request,
m.id1,
m.id2
FROM v$session sn, v$lock m
WHERE (sn.SID = m.SID AND m.request != 0) --存在锁请求,即被阻塞
OR (sn.SID = m.SID --不存在锁请求,但是锁定的对象被其他会话请求锁定
AND m.request = 0 AND lmode != 4 AND
(id1, id2) IN (SELECT s.id1, s.id2
FROM v$lock s
WHERE request != 0
AND s.id1 = m.id1
AND s.id2 = m.id2))
ORDER BY id1, id2, m.request;
/*********************************************************************************************/
定位引起oracle死锁的sql
/*********************************************************************************************/
select sql_text from v$sql where hash_value in
(select sql_hash_value from v$session where sid in
(select session_id from v$locked_object))
/*********************************************************************************************/
下面的SQL查询可以用于确定锁住数据库对象的锁:
/*********************************************************************************************/
select
c.owner,
c.object_name,
c.object_type,
b.sid,
b.serial#,
b.status,
b.osuser,
b.machine
from
v$locked_object a ,
v$session b,
dba_objects c
where
b.sid = a.session_id
and
a.object_id = c.object_id;
/*********************************************************************************************/
显示哪些会话被锁住
/*********************************************************************************************/
/* showlock.sql */
COLUMN o_name format a10
COLUMN lock_type format a20
COLUMN object_name format a15
SELECT RPAD (oracle_username, 10) o_name, session_id SID,
DECODE (locked_mode,
0, 'None',
1, 'Null',
2, 'Row share',
3, 'Row Execlusive',
4, 'Share',
5, 'Share Row Exclusive',
6, 'Exclusive'
) lock_type,
object_name, xidusn, xidslot, xidsqn
FROM v$locked_object, all_objects
WHERE v$locked_object.object_id = all_objects.object_id;
/*********************************************************************************************/
显示所有的TM和TX锁
/*********************************************************************************************/
/* showalllock.sql */
SELECT SID, TYPE, id1, id2,
DECODE (lmode,
0, 'None',
1, 'Null',
2, 'Row share',
3, 'Row Exclusive',
4, 'Share',
5, 'Share Row Exclusive',
6, 'Exclusive'
) lock_type,
request, ctime, BLOCK
FROM v$lock
WHERE TYPE IN ('TX', 'TM');
/*********************************************************************************************/
在Oracle数据库中,可以通过kill session的方式来终止一个进程,其基本语法结构为:
被kill掉的session,状态会被标记为killed,Oracle会在该用户下一次touch时清除该进程.
我们发现当一个session被kill掉以后,该session的paddr被修改,如果有多个session被kill,那么多个session
的paddr都被更改为相同的进程地址:
/*********************************************************************************************/
alter system kill session 'sid,serial#' ;
/*********************************************************************************************/
在oracle中kill掉的进程有时还需要等待pmon回滚数据库已经占有的资源
有时候我们需要使用下面的脚本找出那些已经在oracle中kill掉的进程,在操作系统中在kill一次
/*********************************************************************************************/
select p.addr from v$process p where pid 1
minus
select s.paddr from v$session s;
$ kill -9 paddr
ctl文件时吗?首先把文件放在对应应用的bin目录下,然后去定义executable,然后再定义好program关联一下即可。下面挂在哪跑你应该就会了
理论上是不能把以前的表空间作为新数据库的表空间来使用的。如果原表空间的数据不是很重要的话就在新数据库中再创建一个一样的表空间吧。
如果很想恢复以前表空间的数据的话,按下列方式试试吧。
1、在新数据库中创建一个和以前一样的表空间。
2、用以前的数据文件来顶替新创建的数据文件。但系统的检查点变了数据库肯定不能启动。
3、要先脱机(Offline)数据文件,进行做一次介质恢复。数据库启动后再进行联机(Online)。
以上做法我没试过,关键在于介质恢复能否使检查点获得一致,或许会成功啊。
oracle启停
1.登录
登录linux系统,切换到oracle用户
# su oracle
2.连接
$ cd $ORACLE_HOME/bin
$ sqlplus /nolog
3.使用管理员权限
conn / as sysdba
4.关闭服务(启动)
shutdown immediate
startup
5.退出
quit
6.启动监听
$ lsnrctl start
===============================================
磁盘挂载
/oracle 下文件随着项目的扩大,目录空间已不够使用,需要挂载一个新的磁盘来负责存储
直接挂载会发现/oracle下变空了,这个原因是由于linux的VFS(虚拟文件系统)机制导致的,正常登录以后,所看到的各个目录,文件都是内核在加载时候构造在内存中的VFS目录树,而不是直接看到硬盘上的实际目录树。当你挂载某个设备到一个VFS挂载点上时(比如/oracle),系统就把VFS中的这个挂载点/oracle指向你最后所挂载的那个设备上。那么你现在访问该挂载点时,就会看到你最后挂载在此处的设备。而之前所挂载的设备依然在那里,只不过挂载点/oracle已经不再指向之前的设备。所以之前的数据是被隐藏了,但并没有删除,若umount挂载后,数据又重新回来了
基于这种情况,只能通过跳板的方式把原来的/oracle数据复制到新的/oracle分区下了 ,如何添加新硬盘,请查找相关资料
mkdir /new ###跳板目录
mount /dev/sdb1 /new ###首先挂载跳板目录
cp -R /oracle/* /new ###复制/oracle目录所有数据到/new先
mount /dev/sdb1 /oracle ###挂载/oracle 到新硬盘,此时你会神奇的发现之前的/oracle目录文件已经全部转移过来了,也许你会有点疑问,我并没有复制或移动/new文件到新挂载的/oracle目录啊,其实此时的/oracle目录相当于/new目录的硬链接,可以测试下mkdir /new/test 你会发现/oracle目录也存在test
umount /new ###解除挂载
rm -rf /new ###删除跳板目录
vi /etc/fstab
增加:/dev/sdb1 /oracle ext3 defaults 0 0
:wq!
--------------------------------------------------------------------------------------
挂载新盘后进行启动发现报错
------------
ORA-09925: Unable to create audit trail file
Linux Error: 13: Permission denied
Additional information: 9925
ORA-09925: Unable to create audit trail file
Linux Error: 13: Permission denied
Additional information: 9925
---------
是因为目录权限问题
解决方法
chown -R oracle.oinstall /oracle
再进行操作,一切正常
===================================================
可参考
Linux磁盘的挂载和卸载:
上传到ERP步骤
1、 开发完成FORM: 表单(你开发的表单名)
2、 登陆FTP,把开发好的FORM上传到FTP中:把表单上传到目录中相应的环境下,在编译成fmx文件。
3、 登陆ERP环境,进入 应用开发员-应用产品-表单 ,定义表单,随便定义可以是的表单名
4、 进入 应用开发员-应用产品-功能,定义功能(功能名)。表单选择刚才定义的表单名。
5、 把定义好的功能,挂到相应的菜单中
6、 进入相应的职责,运行表单
docker可以支持把一个宿主机上的目录挂载到镜像里。
docker run -it -v /home/dock/Downloads:/usr/Downloads ubuntu64 /bin/bash
通过-v参数,冒号前为宿主机目录,必须为绝对路径,冒号后为镜像内挂载的路径。
现在镜像内就可以共享宿主机里的文件了。
默认挂载的路径权限为读写。如果指定为只读可以用:ro
docker run -it -v /home/dock/Downloads:/usr/Downloads:ro ubuntu64 /bin/bash
docker还提供了一种高级的用法。叫数据卷。
数据卷:“其实就是一个正常的容器,专门用来提供数据卷供其它容器挂载的”。感觉像是由一个容器定义的一个数据挂载信息。其他的容器启动可以直接挂载数据卷容器中定义的挂载信息。
看示例:
docker run -v /home/dock/Downloads:/usr/Downloads --name dataVol ubuntu64 /bin/bash
创建一个普通的容器。用--name给他指定了一个名(不指定的话会生成一个随机的名子)。
再创建一个新的容器,来使用这个数据卷。
docker run -it --volumes-from dataVol ubuntu64 /bin/bash
--volumes-from用来指定要从哪个数据卷来挂载数据。