- При подключении к SQLplus запустите SQL, чтобы получить выходные данные с несколькими значениями (MV).
- Используйте приведенный выше вывод MV для следующего SQL (возможно, потребуется несколько SQL-исполнений, таких как цикл)
- Пишите пользователям об акции.
На вышеуказанном шаге 1 проблем нет.
У step2 есть проблемы, так как при отправке он открывает несколько соединений SQL, что не в порядке, и SQL зависает.
Шаг 3 из вышеприведенного шага, так как № 2 не завершен, нет сообщений, отправляемых пользователям.
А)
sqlplus -s '/ as sysdba'<<EOF
spool $$HOME/log/expired_dba_users1.log
select du.user_name
from gsd_dba_users du
where exists (
select d.name "DATABASE",
u.name "USERNAME",
x.profile "PROFILE",
x.account_status "User_status",
u.ptime "Password_Changed_date",
nvl(x.EXPIRY_DATE,(u.ptime+90)) "Expired_Expiring_On",
decode(u.type#,0,'ROLE',1,'USER',
'Not_role_or_user') "USER_OR_ROLE"
from sys.user$ u,
v$database d,
dba_users x
where upper(d.database_role)='PRIMARY'
and du.user_name=x.username
and x.profile IN ('GSD_DBA_PROFILE','DEFAULT')
and x.account_status !='OPEN'
and u.name NOT IN
('XS\$NULL','OPS\$ORACLE','ORACLE_OCM','OUTLN',
'WMSYS','XDB','A NONYMOUS','DBSNMP');
spool off
exit;
EOF
В)
## send email to users who's accounts are locked
for i in `cat /tmp/expired_dba_users1.log`
do
sqlplus -s '/ as sysdba' <<EOF
‘alter user ‘ || $i || ‘ account lock’;
exit;
EOF
mailx -s "WARNING - DATABASE $ORACLE_SID $i - User EXPIRED -
Account LOCKED" $i@xyz.group.com
done
1.Можем ли мы объединить #B в #A, как при одном соединении SQL выполнить
'alter user ....' и отправьте электронное письмо отдельному пользователю от $ I
2. Из #B SQL выполняется и зависает, так и не получив письмо о завершении.
Благодарим вас за лучшее решение.