运维联盟俱乐部

 找回密码
 立即注册
查看: 2598|回复: 0

[日常管理] shell连接多个实例查询脚本

[复制链接]
  • TA的每日心情
    开心
    2023-8-9 11:05
  • 发表于 2020-6-13 08:22:55 | 显示全部楼层 |阅读模式
    在实际得维护工作中,可能需要同时在多个实例中对比同一个查询结果,比如,要得到在运生产库100多套实例得字符集设置,这样得工作用shell可以大大减少人力得支出。本文做简单示例:
    1.准备环境,一套19c得cdb,里面有两个pdb,拉起所有pdb和监听。
    1. [oracle@vm1 ~]$ sqlplus / as sysdba

    2. SQL*Plus: Release 19.0.0.0.0 - Production on Sat Jun 13 08:04:07 2020
    3. Version 19.7.0.0.0

    4. Copyright (c) 1982, 2020, Oracle.  All rights reserved.

    5. Connected to an idle instance.

    6. SQL> startup
    7. ORACLE instance started.

    8. Total System Global Area 2516582152 bytes
    9. Fixed Size                  9137928 bytes
    10. Variable Size             822083584 bytes
    11. Database Buffers         1677721600 bytes
    12. Redo Buffers                7639040 bytes
    13. Database mounted.
    14. Database opened.
    15. SQL> alter pluggable database all open;

    16. Pluggable database altered.

    17. SQL> !lsnrctl start

    18. LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 13-JUN-2020 08:04:42

    19. Copyright (c) 1991, 2019, Oracle.  All rights reserved.

    20. Starting /app/oracle/db/19.3.0/home1/bin/tnslsnr: please wait...

    21. TNSLSNR for Linux: Version 19.0.0.0.0 - Production
    22. System parameter file is /app/oracle/db/19.3.0/home1/network/admin/listener.ora
    23. Log messages written to /app/oracle/db/diag/tnslsnr/vm1/listener/alert/log.xml
    24. Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=vm1)(PORT=1521)))
    25. Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))

    26. Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=vm1)(PORT=1521)))
    27. STATUS of the LISTENER
    28. ------------------------
    29. Alias                     LISTENER
    30. Version                   TNSLSNR for Linux: Version 19.0.0.0.0 - Production
    31. Start Date                13-JUN-2020 08:04:43
    32. Uptime                    0 days 0 hr. 0 min. 0 sec
    33. Trace Level               off
    34. Security                  ON: Local OS Authentication
    35. SNMP                      OFF
    36. Listener Parameter File   /app/oracle/db/19.3.0/home1/network/admin/listener.ora
    37. Listener Log File         /app/oracle/db/diag/tnslsnr/vm1/listener/alert/log.xml
    38. Listening Endpoints Summary...
    39.   (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=vm1)(PORT=1521)))
    40.   (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
    41. The listener supports no services
    42. The command completed successfully

    43. SQL> show pdbs;

    44.     CON_ID CON_NAME                       OPEN MODE  RESTRICTED
    45. ---------- ------------------------------ ---------- ----------
    46.          2 PDB$SEED                       READ ONLY  NO
    47.          3 ZHYV                           READ WRITE NO
    48.          4 ZHYU                           READ WRITE NO

    49. SQL> !lsnrctl status

    50. LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 13-JUN-2020 08:06:48

    51. Copyright (c) 1991, 2019, Oracle.  All rights reserved.

    52. Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=vm1)(PORT=1521)))
    53. STATUS of the LISTENER
    54. ------------------------
    55. Alias                     LISTENER
    56. Version                   TNSLSNR for Linux: Version 19.0.0.0.0 - Production
    57. Start Date                13-JUN-2020 08:04:43
    58. Uptime                    0 days 0 hr. 2 min. 4 sec
    59. Trace Level               off
    60. Security                  ON: Local OS Authentication
    61. SNMP                      OFF
    62. Listener Parameter File   /app/oracle/db/19.3.0/home1/network/admin/listener.ora
    63. Listener Log File         /app/oracle/db/diag/tnslsnr/vm1/listener/alert/log.xml
    64. Listening Endpoints Summary...
    65.   (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=vm1)(PORT=1521)))
    66.   (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
    67. Services Summary...
    68. Service "86b637b62fdf7a65e053f706e80a27ca" has 1 instance(s).
    69.   Instance "ora19c", status READY, has 1 handler(s) for this service...
    70. Service "a5930a2320e01e62e0536538a8c08fdd" has 1 instance(s).
    71.   Instance "ora19c", status READY, has 1 handler(s) for this service...
    72. Service "a5a4fb52bba60ad1e0536538a8c0fd8b" has 1 instance(s).
    73.   Instance "ora19c", status READY, has 1 handler(s) for this service...
    74. Service "ora19c" has 1 instance(s).
    75.   Instance "ora19c", status READY, has 1 handler(s) for this service...
    76. Service "ora19cXDB" has 1 instance(s).
    77.   Instance "ora19c", status READY, has 1 handler(s) for this service...
    78. Service "zhyu" has 1 instance(s).
    79.   Instance "ora19c", status READY, has 1 handler(s) for this service...
    80. Service "zhyv" has 1 instance(s).
    81.   Instance "ora19c", status READY, has 1 handler(s) for this service...
    82. The command completed successfully
    复制代码
    2.准备脚本
    1. [oracle@vm1 tmp]$ cd dbs
    2. [oracle@vm1 dbs]$ ll
    3. total 4
    4. -rw-rw-r-- 1 oracle oracle 412 Jun 13 00:45 check.sh    ------------------执行得shell
    5. drwxrwxr-x 2 oracle oracle  40 Jun 13 00:50 dbs            ------------------需要查询得实例列表
    6. drwxrwxr-x 2 oracle oracle  40 Jun 13 00:48 res             ------------------查询结果存放目录
    7. drwxrwxr-x 2 oracle oracle 220 Apr  5 22:12 sqls           ------------------查询语句存放目录
    复制代码
    3.脚本详解
    dbs下有个实列列表,用简单连接得方式,是明文得,有兴趣得朋友可以改成加密得:
    1. [oracle@vm1 dbs]$ cd dbs
    2. [oracle@vm1 dbs]$ ls
    3. db_con_103  dbs_con1
    4. [oracle@vm1 dbs]$ cat dbs_con1
    5. dbsnmp/dbsnmp@192.168.56.101:1521/zhyu
    6. dbsnmp/dbsnmp@192.168.56.101:1521/zhyv
    7. [oracle@vm1 dbs]$
    复制代码
    res下是存放sql语句得查询结果得,每个sql一个结果文件,以日期+sql名字为前缀:
    1. [oracle@vm1 dbs]$ cd res
    2. [oracle@vm1 res]$ ls
    3. 20200613.character.sql.log
    4. [oracle@vm1 res]$ ll
    5. total 4
    6. -rw-rw-r-- 1 oracle oracle 82 Jun 13 00:48 20200613.character.sql.log
    7. [oracle@vm1 res]$ cat 20200613.character.sql.log

    8. 192.168.56.101:1521/zhyu       AL32UTF8

    9. 192.168.56.101:1521/zhyv       AL32UTF8
    复制代码
    sql下存放着常用得或者自定义得sql语句:
    1. [oracle@vm1 dbs]$ cd sqls
    2. [oracle@vm1 sqls]$ ls
    3. character.sql  ckbingdu.sql  db_file_pct.sql  info_archived_log.sql  info_asm_diskgroup.sql  info_db_user.sql  info_redo_swith.sql  instance.sql  sess_cnt.sql
    4. [oracle@vm1 sqls]$ cat character.sql
    5. SET ECHO        OFF
    6. SET FEEDBACK    off
    7. SET HEADING     off
    8. SET LINESIZE    180
    9. SET PAGESIZE    2000
    10. SET TIMING      OFF
    11. SET TRIMSPOOL   ON
    12. SET VERIFY      OFF
    13. CLEAR COLUMNS BREAKS COMPUTES
    14. COLUMN db_con_name                    FORMAT a30      HEADING "Database_connect"
    15. COLUMN character_set                  FORMAT a80      HEADING "Character_Set"

    16. select '&dn' db_con_name,value character_set from nls_database_parameters where parameter='NLS_CHARACTERSET';
    复制代码
    check.sh是一个调用脚本,执行时先读取实例列表,再选择使用哪一个sql语句,然后循环查询,把结果都写到一个日志上面:
    1. [oracle@vm1 dbs]$ cat check.sh
    2. #!/bin/bash
    3. source ~/.bash_profile
    4. time=`date '+%Y%m%d'`
    5. dbc_dir=/tmp/dbs/dbs
    6. sql_dir=/tmp/dbs/sqls
    7. res_dir=/tmp/dbs/res
    8. ls $sql_dir
    9. echo -n "enter sql you want:"
    10. read sql
    11. rm -f $res_dir/$sql.log
    12. for i in `cat $dbc_dir/dbs_con1`
    13. do
    14. dn=`echo $i|awk -F [@] '{print $2}'`
    15. echo $dn
    16. sqlplus -S $i<<EOF
    17. set verify off
    18. set termout off
    19. spool $res_dir/$time.$sql.log append
    20. define dn=$dn
    21. @$sql_dir/$sql dn
    22. exit;
    23. EOF
    24. done
    复制代码
    4.运行过如下:
    1. [oracle@vm1 dbs]$ sh check.sh
    2. character.sql  ckbingdu.sql  db_file_pct.sql  info_archived_log.sql  info_asm_diskgroup.sql  info_db_user.sql  info_redo_swith.sql  instance.sql  sess_cnt.sql
    3. enter sql you want:character.sql
    4. 192.168.56.101:1521/zhyu
    5. 192.168.56.101:1521/zhyv
    6. [oracle@vm1 dbs]$ cd res
    7. [oracle@vm1 res]$ ls
    8. 20200613.character.sql.log
    9. [oracle@vm1 res]$ cat 20200613.character.sql.log

    10. 192.168.56.101:1521/zhyu       AL32UTF8

    11. 192.168.56.101:1521/zhyv       AL32UTF8
    复制代码




    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    运维联盟俱乐部 ( 冀ICP备19036648号 )

    GMT+8, 2024-4-24 11:49 , Processed in 0.048172 second(s), 21 queries , Gzip On.

    Powered by Discuz! X3.4

    © 2001-2023 Discuz! Team.

    快速回复 返回顶部 返回列表