#!/bin/ksh
# Count Instance Numbers:
INS_COUNT=$( ps -ef|grep ora_pmon_$1|grep -v grep | awk '{print $8}' | wc -l)
# Exit if No DBs are running:
if [ $INS_COUNT -eq 0 ]
then
echo "No Database Running !"
exit
else
echo "###############################################################"
echo " Connecting $($1)..............."
echo "###############################################################"
fi
export ORAENV_ASK=NO
export ORACLE_SID=$1
. /usr/local/bin/oraenv
echo $ORACLE_SID
echo $ORACLE_HOME
DBNAME=$ORACLE_SID
export BACKUP_LOG_PATH=`date +%y%m%d%H%M%S`
listofuser=/u01/ListOfUsers_${DBNAME}_${BACKUP_LOG_PATH}.log
userddl=/u01/allusersddl_${DBNAME}_${BACKUP_LOG_PATH}.sql
######## Start Taking list of users ##########################
${ORACLE_HOME}/bin/sqlplus -S '/ as sysdba' << EOF
PROMPT
spool ${listofuser}
set pages 0
set echo off heading off feedback off
select username from dba_users where username not in ('SYS','SYSTEM','SYSBACKUP','SYSKM','OUTLN','SYSDG','SYSRAC','SYS\$UMF','DBSNMP','APPQOSSYS','GSMADMIN_INTERNAL','XDB','DBSFWUSER','GGSYS','ANONYMOUS',
'GSMCATUSER','OJVMSYS','AUDSYS','DIP','ORACLE_OCM','GSMUSER','REMOTE_SCHEDULER_AGENT','XS\$NULL') order by 1 asc;
spool off
EOF
################ END ###################################
########### Generating DDL of users #####################
for USERNAME in `cat ${listofuser}`
do
export USERNAME
${ORACLE_HOME}/bin/sqlplus -S '/ as sysdba' << EOF
spool ${userddl} APPEND
set termout off
set linesize 190
set pages 50000
set feedback off
set trim on
set echo off
col USERNAME for a30
col account_status for a23
col profile for a10;
set pages 0
set echo off heading off feedback off
SELECT 'CREATE USER ' || u.username ||' IDENTIFIED ' ||' BY VALUES '''|| c.spare4||''' DEFAULT TABLESPACE ' || u.default_tablespace
||' TEMPORARY TABLESPACE ' || u.temporary_tablespace ||' PROFILE ' || u.profile || case when account_status= 'OPEN' then ';' else ' Account LOCK;' end
FROM dba_users u,user$ c where u.username=c.name and u.username=upper('$USERNAME')
UNION
select 'GRANT '||GRANTED_ROLE||' TO '||GRANTEE|| case when ADMIN_OPTION='YES' then ' WITH ADMIN OPTION;' else ';' end
from dba_role_privs where grantee= upper('$USERNAME')
UNION
select 'GRANT '||PRIVILEGE||' TO '||GRANTEE|| case when ADMIN_OPTION='YES' then ' WITH ADMIN OPTION;' else ';' end
from dba_sys_privs where grantee= upper('$USERNAME')
UNION
select 'GRANT '||PRIVILEGE||' ON '||OWNER||'.'||TABLE_NAME||' TO '||GRANTEE||case when GRANTABLE='YES' then ' WITH GRANT OPTION;' else ';' end
from DBA_TAB_PRIVS where GRANTEE=upper('$USERNAME');
spool off
EOF
done
echo "sql script save as : ${userddl}]"
[oracle@oel7 u01]$ ksh -x ddl.sh abc
No comments:
Post a Comment