巧用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 条评论
登录 后参与评论

相关文章

来自专栏乐沙弥的世界

提取用户对象及系统权限DDL

      在工作中难免碰到需要提取用户权限或是不同数据库用户权限的同步问题。我们知道,Oracle数据库的任意一个用户,必须有相应的权限才可以登录以及操纵数据...

763
来自专栏乐沙弥的世界

Oracle 角色、配置文件

增加或删除角色中的某一权限,被授予该角色的所有用户或角色自动地获得新增权限或删除旧的权限

672
来自专栏乐沙弥的世界

ORA-01658 错误

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

672
来自专栏deed博客

Oracle在Linux下安装

1442
来自专栏乐沙弥的世界

Oracle expdp 时遭遇ORA-39125 ORA-04063

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

781
来自专栏乐沙弥的世界

cannot fetch plan for SQL_ID

  SQL tuning过程中离不开分析SQL语句的执行计划。在一次提取执行计划的时候碰到cannot fetch plan for SQL_ID的错误提示。根...

802
来自专栏大内老A

谈谈基于SQL Server 的Exception Handling[中篇]

三、TRY CATCH & Return 在上面一节中,我通过RAISERROR重写了创建User的Stored procedure,实际上上面的Stored ...

1786
来自专栏乐沙弥的世界

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

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

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

一个普通数据库用户所能查到的"意料之外"的信息(r2笔记98天)

有时候限于工作环境的情况,大多数开发人员只得到了一个权限收到限制的数据库用户。 可能你都不知道你所拥有的数据库用户都能查到哪些你想象不到的数据库信息,其实你知道...

3348
来自专栏乐沙弥的世界

使用datapump 导出导入同义词(export and import synonym using datapump)

      对于同义词的备份我们有多种方式来实现,如直接通过脚本生成同义词的创建脚本,或者使用dbms_metadata.get_ddl来提取同义词的定义脚本。...

823

扫码关注云+社区