Oracle SQL out помещен в другое выполнение SQL с отправкой mailx пользователям в сценарии оболочки - PullRequest
0 голосов
/ 06 июня 2019
  1. При подключении к SQLplus запустите SQL, чтобы получить выходные данные с несколькими значениями (MV).
  2. Используйте приведенный выше вывод MV для следующего SQL (возможно, потребуется несколько SQL-исполнений, таких как цикл)
  3. Пишите пользователям об акции.

На вышеуказанном шаге 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 выполняется и зависает, так и не получив письмо о завершении.

Благодарим вас за лучшее решение.

...