巧用shell脚本分析数据库用户(r2第4天)

在数据库维护中,可能对于一个陌生的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 <<EOF
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
******************************************************************************************************

原文发布于微信公众号 - 杨建荣的学习笔记(jianrong-notes)

原文发表时间:2014-06-15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Netkiller

数据库安全·开发加密插件

以下节选择《Netkiller Architect 手札》 作者:netkiller 地址 http://www.netkiller.cn/archit...

3157
来自专栏乐沙弥的世界

ORA-02019 错误处理

       ORA-02019 错误提示是未找到远程数据库的连接说明,通常发生在本地数据库无法连接到远程数据库。引发该问题的原因很多,比如网络连接,连接方式(...

921
来自专栏杨建荣的学习笔记

使用awk来解析dump文件 (73天)

dump文件是平时工作中经常碰见的,有时候得到一个dump,但是没有提供一些更多的信息,导入的时候就很可能会有问题。 如果某个用户默认表空间是user,但是du...

3808
来自专栏乐沙弥的世界

PL/SQL-->UTL_FILE包的使用介绍

    在PL/SQL中,UTL_FILE包提供了文本文件输入和输出互功能。也就是说我们可以通过该包实现从操作系统级别来实现文件读取输入或者是写入到操作系统文件...

681
来自专栏乐沙弥的世界

使用带dblink方式的datapump迁移Oracle 10g到11g

      对于从Oracle 10g下迁移数据库到Oracle 11g,除了使用RMAN方式之外,我们可以使用带dblink的datapump方式来实现基于逻...

561
来自专栏乐沙弥的世界

PL/SQL 包编译时hang住的处理

       最近PL/SQL包在编译时被hang住,起初以为是所依赖的对象被锁住。结果出乎意料之外。下面直接看代码演示。

856
来自专栏乐沙弥的世界

ORA-01658 错误

最近重新装个了Oracle 11g,在对分区表导入导出时碰到了ORA-01658错误的问题,因为刚刚才装的新系统,一导出就碰到了下面的问题,

782
来自专栏乐沙弥的世界

ORA-01652: unable to extend temp segment by 8192...

      最近在rebuild index时提示unable to extend temp segment by 8192 in tablespace..的错...

1111
来自专栏杨建荣的学习笔记

关于exp/imp的总结学习(r4笔记第26天)

关于exp/imp,是很常用的数据导出导入工具,在10g开始推出的数据泵datapump相当于是exp/imp的补充和升级版本。在后续章节再做一个总结。 exp...

2987
来自专栏乐沙弥的世界

Oracle expdp 时遭遇ORA-39125 ORA-04063

    数据库在使用DataPump导出时碰到了ORA-39125与ORA-04063。完整的ORA-39125提示是Worker unexpected fat...

891

扫码关注云+社区