db_conn_coll_main.sql 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. host SET > env.log
  2. SET ECHO OFF
  3. SET TERMOUT OFF
  4. SET DEFINE ON
  5. SET MARKUP HTML OFF
  6. SET TAB OFF
  7. SET TRIMOUT ON
  8. SET TRIMSPOOL ON
  9. SET PAGESIZE 5000
  10. SET LINESIZE 300
  11. SET SERVEROUTPUT ON
  12. SET SERVEROUTPUT UNLIMITED
  13. SET FEEDBACK OFF
  14. SET VERIFY OFF
  15. define SCRIPT_SILENT=NO
  16. define SCRIPT_SILENT=&1
  17. define SCRIPT_PRODUCTS=NONE
  18. define SCRIPT_PRODUCTS=&2
  19. define LOGS=''
  20. define HOST_NAME=UNKNOWN
  21. define INSTANCE_NAME_0=UNKNOWN
  22. define SCRIPT_SI=''
  23. col C new_val SCRIPT_SI noprint
  24. col C noprint
  25. select '_SILENT_MODE' as C from DUAL where upper('&&SCRIPT_SILENT') = 'YES';
  26. col C clear
  27. --{
  28. --Detect SQL*Plus client path separator
  29. --Using some Unix/Linux specific syntax
  30. host echo select \'$PWD\' as PWD_, \'rm\' as RMDEL_, \'/\' as PSEP_ from dual where \'$PWD\' like \'%/%\'\; > psep.sql 2> fii_err.txt
  31. define PWD=*
  32. define RMDEL=del
  33. define PSEP=\
  34. col PWD_ new_val PWD noprint
  35. col RMDEL_ new_val RMDEL noprint
  36. col PSEP_ new_val PSEP noprint
  37. -- The query syntax is correct only on Unix/Linux
  38. @psep.sql
  39. --Detect SQL*Plus client hostname
  40. define CHOST=*
  41. col CHOST_ new_val CHOST noprint
  42. host echo select \'`uname -n`\' as CHOST_ from dual\; > psep.sql 2> fii_err.txt
  43. @psep.sql
  44. host echo select '%COMPUTERNAME%' as CHOST_ from dual; > psep.sql 2> fii_err.txt
  45. @psep.sql
  46. prompt Client Host=&&CHOST
  47. -- Cleanup
  48. host &&RMDEL psep.sql 2> fii_err.txt
  49. --}
  50. spool temp1.sql
  51. PROMPT REM db_conn_coll_main.sql running with parameters: [&&SCRIPT_SILENT] [&&SCRIPT_PRODUCTS] + [&&SCRIPT_SI] [&&PSEP] [&&RMDEL]
  52. -- Check CDB/PDB BEGIN
  53. DECLARE
  54. TYPE cur_typ IS REF CURSOR;
  55. c cur_typ;
  56. QUERY_PDBS VARCHAR2(1000);
  57. ERR_C NUMBER := null;
  58. ERR_M VARCHAR2(500) := '';
  59. IS_CDB VARCHAR2(3) := 'NO';
  60. CRT_CON_ID NUMBER := null;
  61. LOOP_CON VARCHAR2(300) := '';
  62. BEGIN
  63. BEGIN
  64. -- Check if container database
  65. execute immediate 'select CDB, sys_context(''USERENV'', ''CON_ID'') from V$DATABASE' into IS_CDB, CRT_CON_ID;
  66. dbms_output.put_line('REM CDB=' || IS_CDB || ', CON_ID=' || CRT_CON_ID);
  67. dbms_output.put_line('--------------------------------------------------');
  68. if IS_CDB = 'YES' and CRT_CON_ID=1 then
  69. -- CDB and CDB$ROOT
  70. QUERY_PDBS := 'select NAME from V$CONTAINERS where OPEN_MODE in (''MOUNTED'', ''READ WRITE'', ''READ ONLY'') and NAME != ''PDB$SEED'' order by CON_ID';
  71. open C for QUERY_PDBS;
  72. loop
  73. fetch c into LOOP_CON;
  74. exit when C%notfound;
  75. -- process row here
  76. dbms_output.put_line('SHOW CON_ID');
  77. dbms_output.put_line('SHOW CON_NAME');
  78. dbms_output.put_line('ALTER SESSION SET CONTAINER = ' || LOOP_CON || ';');
  79. dbms_output.put_line('@@db_conn_coll.sql ' || LOOP_CON);
  80. end loop;
  81. close C;
  82. else
  83. dbms_output.put_line('@@db_conn_coll.sql 0');
  84. end if;
  85. EXCEPTION
  86. when others then
  87. ERR_C := SQLCODE;
  88. ERR_M := SUBSTR(SQLERRM, 1 , 500);
  89. if ERR_C = -904 or ERR_C = -2003 then
  90. -- database version prior to 12.1
  91. dbms_output.put_line('@@db_conn_coll.sql 0');
  92. else
  93. dbms_output.put_line('SET TERMOUT ON');
  94. dbms_output.put_line('PROMPT SQL ERROR: ' || to_char(ERR_C) || ': ' || ERR_M);
  95. end if;
  96. END;
  97. END;
  98. /
  99. spool off
  100. show errors
  101. @@temp1.sql
  102. -- Log warnings if this is not a local collection
  103. SET VERIFY OFF
  104. SPOOL DB_sql_&&LOGS.003.log
  105. DECLARE
  106. INSTANCE_N VARCHAR2(900) := '&&INSTANCE_NAME_0';
  107. HOST_N VARCHAR2(200) := '&&HOST_NAME';
  108. BEGIN
  109. if HOST_N != '&&CHOST' then
  110. dbms_output.put_line('DB: CT-02801: WARNING: CPUQ information is needed for Host: ' || HOST_N || ' running Database Instance: ' || INSTANCE_N);
  111. end if;
  112. END;
  113. /
  114. SPOOL OFF
  115. EXIT