log(){
typeset rundate=$(date +"%F %X")
printf "${rundate} -- $*\n"
printf "${rundate} -- $*\n" >> $screen_log
}
do_sql(){
sql=$*
out=$(sqlplus -s '/ as sysdba'<<-eof p=""> whenever sqlerror exit 1
whenever oserror exit 1
set heading off feedback off serveroutput on trimout on pagesize 0
$sql
EOF
)
ret=$?
printf '%s' "$out"
return $ret
}
store_pwd(){
load_env $destdb
log "checking database open mode..."
sql="select status from v\$instance;"
log "running sql: $sql"
out=$(do_sql "$sql")
ret=$?
[[ $ret -ne 0 ]] && { log "*** failed to query database -- \n$out"; exit 1; }
log "got: ${out}"
typeset local_inst_status=$out
[[ $local_inst_status != "OPEN" ]] && { log "*** $destdb is not OPEN, not able to store passwords; skipping"; return 102; }
sql=$(cat<<-eof p=""> set echo off
set lines 1000
col lines for a1000
select u.name ||','|| u.spare4 ||','|| u.password ||','|| du.default_tablespace ||','|| du.profile||','||u.defrole||','||du.authentication_type||','||'"'||u.ext_username||'"' lines
from user$ u join dba_users du on (u.name=du.username) where u.name in ('SYS','SYSTEM','ORA_NCYCLE') ;
EOF
)
log "querying password hashes..."
out=$(do_sql "$sql")
ret=$?
[[ $ret -ne 0 ]] && { log "*** failed to query database -- \n$out"; return 1; }
touch $pwd_store
chmod 600 $pwd_store
echo "$out" > $pwd_store
return $?
}-eof>-eof>
restore_pwd(){
# return 102: file hashes are not there->try with cloakware
# return 1: error
load_env $destdb
log "checking dump file at $pwd_store"
[[ ! -e $pwd_store ]] && { log "dump file with hashes does not exist"; return 102; }
cnt=$(grep -E "SYS|SYSTEM|ORA_NCYCLE" $pwd_store | wc -l)
[[ $cnt -ne 3 ]] && { log "dump file does not contain rows for SYS|SYSTEM|ORA_NCYCLE"; return 102;}
while read line
do
usr=$(echo $line| awk -F, '{print $1}')
hash10g=$(echo $line| awk -F, '{print $3}')
hash11g=$(echo $line| awk -F, '{print $2}')
if [[ ! -z $hash11g ]];then
sql=$(cat<<-eof font="">-eof>
set feed on
alter user $usr identified by values '$hash11g;$hash10g';
EOF
)
elif [[ ! -z $hash10g ]];then
sql=$(cat<<-eof font="">-eof>
set feed on
alter user $usr identified by values '$hash10g';
EOF
)
else
log "password hash not found for user $usr"
return 102
fi
log "setting password for user $usr"
out=$(do_sql "$sql")
ret=$?
if [[ $ret -ne 0 && $out != *ORA-28007* ]]; then
log "*** failed to run sql -- \n$out"
return 1
elif [[ $ret -ne 0 && $out = *ORA-28007* ]]; then
log "password is already set"
else
log "password set"
fi
done < $pwd_store
rm $pwd_store
return 0
}
Showing posts with label ddl. Show all posts
Showing posts with label ddl. Show all posts
Wednesday, July 20, 2016
store password in korn
dumping system, role and proxy grants for users
set long 10000000
set longchunksize 1000000
set pages 0 head off feed off echo off
set lines 500
col lines for a500 word_wrapped
exec dbms_metadata.set_transform_param(dbms_metadata.SESSION_TRANSFORM,'SQLTERMINATOR',TRUE);
select '-- SYSTEM GRANTS' from dual;
select dbms_metadata.get_granted_ddl('SYSTEM_GRANT',du.username) as lines from dba_users du where du.username in (${preserve_grant_quoted}) and exists (select grantee from dba_sys_privs where grantee=du.username);
select '-- ROLE GRANTS' from dual;
select dbms_metadata.get_granted_ddl('ROLE_GRANT',du.username) as lines from dba_users du where du.username in (${preserve_grant_quoted}) and exists (select grantee from dba_role_privs where grantee=du.username);
select '-- DEFAULT ROLES' from dual;
select dbms_metadata.get_granted_ddl('DEFAULT_ROLE',du.username) as lines from dba_users du where du.username in (${preserve_grant_quoted}) ;
select '-- PROXY GRANTS' from dual;
select dbms_metadata.get_granted_ddl('PROXY', pu.client) as lines from proxy_users pu where pu.client in (${preserve_grant_quoted}) ;
Tuesday, February 3, 2009
DDL locks
No way to specify DDL with wait option. It will always fail with "resource busy" error.
In 11g there's a way to do this, but before have to use brute force
ref:
In 11g there's a way to do this, but before have to use brute force
declare
success boolean := false;
begin
while ( not success)
loop
begin
execute immediate 'alter table t1 drop column n5 ';
success := true;
exception
when others then
null;
dbms_lock.sleep(10);
end;
end loop;
end;
ref:
Subscribe to:
Posts (Atom)