查看数据库的连接情况
DBA要定时对数据库的连接情况进行检查,看与数据库建立的会话数目是不是正常,如果建立了过多的连接,会消耗数据库的资源。同时,对一些“挂死”的连接,可能会需要DBA手工进行清理。
以下的SQL语句列出当前数据库建立的会话情况:
select sid,serial#,username,program,machine,status
from v$session;
其中,
SID 会话(session)的ID 号;
SERIAL# 会话的序列号,和SID 一起用来唯一标识一个会话;
USERNAME 建立该会话的用户名;
PROGRAM 这个会话是用什么工具连接到数据库的;
STATUS 当前这个会话的状态,ACTIVE 表示会话正在执行某
些任务,INACTIVE表示当前会话没有执行任何操作;
如果 DBA要手工断开某个会话,则执行:
alter system kill session 'SID,SERIAL#';
注意,上例中SID 为1 到7(USERNAME 列为空)的会话,是Oracle 的
后台进程,不要对这些会话进行任何操作。
检查数据库文件的状态
DBA要及时查看数据库中数据文件的状态(如被误删除),根据实际情况
决定如何进行处理,检查数据文件的状态的SQL如下:
select file_name,status
from dba_data_files;
如果数据文件的STATUS列不是AVAILABLE,那么就要采取相应的措施,
如对该数据文件进行恢复操作,或重建该数据文件所在的表空间。
检查数据库定时作业的完成情况
如果数据库使用了Oracle的JOB来完成一些定时作业,要对这些JOB的
运行情况进行检查:
select job,log_user,last_date,failures
from dba_jobs;
如果FAILURES 列是一个大于0 的数的话,说明JOB运行失败,要进一
步的检查。
监控表是否有主键
SELECT table_name
FROM all_tables
WHERE owner = USER
MINUS
SELECT table_name
FROM all_constraints
WHERE owner = 'MSOP'
AND constraint_type = 'P'
用户锁,数据库的锁有的时候是比较耗费资源的,特别是发生锁等待的时候,
我们必须找到发生等待的锁,有可能的话,杀掉该进程。
这个语句将查找到数据库中所有的DML 语句产生的锁,还可以发现,任何DML
语句其实产生了两个锁,一个是表锁,一个是行锁。
可以通过alter system kill session ‘sid,serial#’来杀掉会话
SELECT /*+ rule */ s.username,
decode(l.type,'TM','TABLE LOCK',
'TX','ROW LOCK',
NULL) LOCK_LEVEL,
o.owner,o.object_name,o.object_type,
s.sid,s.serial#,s.terminal,s.machine,s.program,s.osuser
FROM v$session s,v$lock l,dba_objects o
WHERE l.sid = s.sid
AND l.id1 = o.object_id(+)
AND s.username is NOT NULL
锁与等待,如果发生了锁等待,我们可能更想知道是谁锁了表而引起谁的等待
以下的语句可以查询到谁锁了表,而谁在等待。
SELECT /*+ rule */ lpad(' ',decode(l.xidusn ,0,3,0))||l.oracle_username
User_name,
o.owner,o.object_name,o.object_type,s.sid,s.serial#
FROM v$locked_object l,dba_objects o,v$session s
WHERE l.object_id=o.object_id
AND l.session_id=s.sid
ORDER BY o.object_id,xidusn DESC
如何查看当前数据库的字符集
select userenv('language') from dual
查看当前用户的角色
select * from user_role_privs;
查看当前用户的系统权限和表级权限
SQL>select * from user_sys_privs;
SQL>select * from user_tab_privs;
查看当前用户的缺省表空间
SQL>select username,default_tablespace from user_users;
SQL-1 =====查看控制文件
select name from v$controlfile;
SQL-2 =====查看日志文件
select member from v$logfile;
SQL-4 =====查看数据库库对象
select owner, object_type, status, count(*) count# from all_objects group by owner,
object_type, status;
SQL-5 =====查看数据库的版本
Select version FROM Product_component_version
Where SUBSTR(PRODUCT,1,6)='Oracle';
SQL-6 =====查看数据库创建日期和归档方式
Select Created, Log_Mode, Log_Mode From V$Database;
SQL-7 =====捕捉运行很久的SQL
column username format a12
column opname format a16
column progress format a8
select username,sid,opname, round(sofar*100 / totalwork,0) || '%' as progress,
time_remaining,sql_text
from v$session_longops , v$sql
where time_remaining <> 0
and sql_address = address
and sql_hash_value = hash_value
SQL-20 =====查看Disk Read 最高的SQL
SQL>select sql_text from (select * from v$sqlarea order by disk_reads)
where rownum<=5;
SQL-28 =====查看尚未提交的事务
select * from v$locked_object;
select * from v$transaction;
在某个用户下找所有的索引
select user_indexes.table_name, user_indexes.index_name,uniqueness,
column_name from user_ind_columns, user_indexes where
user_ind_columns.index_name = user_indexes.index_name
and user_ind_columns.table_name = user_indexes.table_name
order by user_indexes.table_type, user_indexes.table_name,
user_indexes.index_name, column_position;
来源:https://www.cnblogs.com/manglu/p/4579873.html