巧用shell脚本分析数据库用户

在数据库维护中,可能对于一个陌生的schema,需要了解它的一些情况,可以使用如下的脚本来很快得到一个报告,里面包含了详尽的信息。
用户占用的空间,权限,角色和基本配置信息。

NAME=`echo $1|cut -d. -f1`
if [ -z "$NAME" ] 
then
  echo -e "User must be provided: \c"; read NAME
fi

sqlplus -s $DB_CONN_STR@$SH_DB_SID
clear buffer
set feed off
set verify off
set line 132
set pages 200

column bytes format 99,999,999,999 head "Bytes Used"
column max_bytes format 9,999,999,999 head Quota
column default_tablespace format a20 head "Default Tablespace"
column tablespace_name for a25 
column username format a25 

prompt ******************************************************************************************************
prompt *                                       General Details                                              *
prompt ******************************************************************************************************
select username, default_tablespace,  created 
  from dba_users 
 where  username=upper('${NAME}')
/

prompt.
prompt ******************************************************************************************************
prompt *                                      Objects General Info                                          *
prompt ******************************************************************************************************
select object_type,status,count(*) obj_count 
  from dba_objects
 where owner=upper('$1') group by object_type,status order by obj_count desc
/
prompt.
prompt ******************************************************************************************************
prompt *                                            Quotas                                                  *
prompt ******************************************************************************************************
select tablespace_name, 
       bytes, 
      decode( max_bytes,-1,'UNLIMITED',max_bytes) max_bytes
  from dba_ts_quotas where username=upper('${NAME}')
/
prompt.
prompt ******************************************************************************************************
prompt *                                          Bytes Used                                                               
prompt ******************************************************************************************************
col tablespace_name  for a15 trunc
col MB head 'Size (Mb)' for 999,999,999

break on report 
compute sum of bytes on REPORT
/*
select 
                ts.tablespace_name tablespace_name,
                nvl(sum(seg.blocks*ts.block_size)/1024/1024,0) MB
from 
                dba_tablespaces  ts,
                dba_segments seg,
                dba_users us
where
                        --  du.username=upper('${NAME}') 
                us.username=upper('${NAME}') 
                and       seg.owner (+)= us.username 
                and       ts.tablespace_name (+)= seg.TABLESPACE_NAME
group by ts.tablespace_name
order by ts.tablespace_name
*/

select 
                ts.name tablespace_name,
                nvl(sum(seg.blocks*ts.blocksize)/1024/1024,0) MB
from 
                sys.ts$ ts,
                sys.seg$ seg,
                sys.user$ us,
                dba_users du
where
                          du.username=upper('${NAME}') 
                and       us.name (+)= du.username
                and       seg.user# (+)= us.user# 
                and       ts.ts# (+)= seg.ts#
group by ts.name
order by ts.name
/
prompt .
prompt ******************************************************************************************************
prompt *                                             Grants/Roles                                                 *
prompt ******************************************************************************************************
set feed off verify off line 132 pages 200

col owner format a15
break on owner
prompt ********* OWNER ROLE *********** 
prompt ********************************
select d.owner,d.grantee role_name,r.PASSWORD_REQUIRED,s.admin_option,s.DEFAULT_ROLE
from dba_tab_privs d,dba_roles r,dba_role_privs s
where
 d.grantee=r.role
and d.grantee=s.grantee(+)
and d.owner=nvl(upper('$1'),' ')
group by d.grantee,d.owner,r.password_required,s.admin_option,s.DEFAULT_ROLE
order by d.owner;
column grantee format a20
column granted_role format a35
column admin_option heading admin format a10

prompt .
prompt ********** GRANTED ROLE ********
prompt ********************************
select d.grantee role_name
from dba_tab_privs d
where   owner=upper('$1')
group by d.grantee
union
select granted_role
from dba_role_privs
 where grantee=upper('$1');
prompt .
prompt ******************************************************************************************************
prompt *                                         Sys privileges                                             *
prompt ******************************************************************************************************
set feed off verify off line 132 pages 200
column privilege format a25
column admin_option heading admin format a8

select privilege, 
       admin_option  
  from dba_sys_privs where grantee = upper('${NAME}')
/
!echo "******************************************************************************************************"
EOF
exit

生成的报告样例如下所示。
 sh[ora11g@rac1 dbm_lite]$ ksh showuser.sh n1
******************************************************************************************************
*                                       General Details                                              *
******************************************************************************************************

USERNAME                  Default Tablespace   CREATED
------------------------- -------------------- ---------
N1                        POOL_DATA            13-APR-14
.
******************************************************************************************************
*                                      Objects General Info                                          *
******************************************************************************************************

OBJECT_TYPE         STATUS   OBJ_COUNT
------------------- ------- ----------
TABLE               VALID           18
INDEX               VALID            3
FUNCTION            VALID            2
DATABASE LINK       VALID            1
LOB                 VALID            1
PROCEDURE           VALID            1
.
******************************************************************************************************
*                                            Quotas                                                  *
******************************************************************************************************
.
******************************************************************************************************
*                                          Bytes Used
******************************************************************************************************

TABLESPACE_NAME    Size (Mb)
--------------- ------------
POOL_DATA                203
SYSTEM                     0
.
******************************************************************************************************
*                                             Grants/Roles                                                 *
******************************************************************************************************
********* OWNER ROLE ***********
********************************
.
********** GRANTED ROLE ********
********************************

ROLE_NAME
------------------------------
CONNECT
DBA
RESOURCE
.
******************************************************************************************************
*                                         Sys privileges                                             *
******************************************************************************************************

PRIVILEGE                 admin
------------------------- --------
UNLIMITED TABLESPACE      NO
******************************************************************************************************

时间: 2024-09-30 18:58:57

巧用shell脚本分析数据库用户的相关文章

使用shell脚本查看数据库负载情况(第二篇)

在之前写了一个shell脚本,能够得到一个基于时间点的数据库负载报告. 使用shell脚本查看数据库负载情况 http://blog.itpub.net/23718752/viewspace-1168027/ 在生产环境中快照的生成频率可能10分钟或者半个小时就会生成,频率要快些,使用原先的脚本执行起来会有一定的延时. 想查看在快照的时间间隔内数据库的负载情况.这样能够更高效的定位某个问题.比如10点到11点,每10分钟生成一次快照.可能问题发生在10:40~10:50,如果通过一个小时的快照就

怎么用shell脚本遍历数据库某个表,一个字段下的所有内容

问题描述 怎么用shell脚本遍历数据库某个表,一个字段下的所有内容 数据库为mysql 就是遍历一列上所有的内容,然后判断是否等于某个值,取出这个字段对应的其他字段的值. 解决方案 听你的意思应该就是: select * from 表名 where 列名=某个值; 解决方案二: 直接用sql语句来遍历判断条件查询数据好了

shell脚本分析 nginx日志访问次数最多及最耗时的页面(慢查询)_linux shell

当服务器压力比较大,跑起来很费力时候.我们经常做站点页面优化,会去查找那些页面访问次数比较多,而且比较费时. 找到那些访问次数高,并且比较耗时的地址,就行相关优化,会取得立竿见影的效果的. 下面是我在做优化时候,经常用到的一段shell 脚本. 这个也可以算是,统计web页面的slowpage 慢访问页面,象mysql slowquery . 以下是我的:nginx 配制   复制代码 代码如下:  log_format  main  '$remote_addr - $remote_user [

通过shell脚本分析足彩

最近对足彩的数据进行了一点分析,简单分享一下自己的一点收获, 对于足球比赛的赔率还是很有计算方法的.我收集了一些比赛的数据,进行了简单的分析.创建了一个表为data. 然后对于即将开始的比赛,进行胜负平的赔率计算, 简单的shell脚本实现如下: sqlplus -s n1/n1 set serveroutput on set linesize 200 set pages 50 set feedback on col w format a10 col t format a10 col l for

通过shell脚本查看数据库表空间使用情况

对于数据库中表空间查看,想必大家都有很多的脚本已经在用了,自己也啰嗦一下,分享一个通过shell脚本查看表空间使用情况的例子. 脚本如下: sqlplus -s $DB_CONN_STR@$SH_DB_SID   set echo off heading on underline on; column inst_num  heading "Inst Num"  new_value inst_num  format 99999; column inst_name heading &quo

企业shell脚本分析及切割apache日志实战

一,分析apache日志 1,有一个文件shell.sh,内容如下: [root@test3root]#catshell.sh http://www.baidu.com/index.html http://www.google.com/index.html http://www.baidu.com/get.html http://www.baidu.com/set.html http://www.google.com/index.html http://www.yahoo.com.cn/put.

linux下Shell脚本分析Nginx日志抗小量ddos攻击

网站被ddos攻击,遂写了个脚本来抵抗一下,实现方式: 1. 攻击特征,不同ip不断POST网站首页,造成资源消耗过度 2. 分析nginx访问日志,判断POST特征取得客户端访问ip 3. 将连接数大于50的攻击ip封杀 4. 记录攻击ip到文档 5. 每次取得的攻击ip与已有攻击ip比较 查看源代码: #!/bin/bash   WEBSITES=(  example.com )   minute_now=`date +%M` max_connections=50 banips="/wwwd

使用shell脚本查看数据库负载情况

平时在查看数据库的问题时,会有种迷茫的感觉,如果没有任何人反馈问题,基本上没有主动查找问题的方向,awr,ash都是在得知问题发生的时间段或者一些时间戳来从历史记录中查找相关的信息,个人整理了如下的脚本,能够显示当天的时间段内数据库的负载信息,能够很好掌握数据库的忙闲情况. 来看一个简单的例子,比如我要查看早上6点到中午12点数据库的负载情况 脚本 showdbtime.sh 显示的是在制定的时间段内的 数据库负载的一个综合值.比如6点到7点个小时(60分钟),dbtime如果是120分钟,那么

shell脚本进行数据库操作

mysql  mysql -h${HOSTNAME} -P${PORT} -u${USERNAME} -p${PASSWORD} -e "sql语句"    -hlocalhost -uroot -proot customer -e "select * from customer" > 1.txt 参考文章: http://www.2cto.com/database/201410/343557.html shell编程-- EOF   http://blog.