运维联盟俱乐部

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

[日常管理] healthcheck

[复制链接]
  • TA的每日心情
    开心
    2023-8-9 11:05
  • 发表于 2023-1-12 11:26:25 | 显示全部楼层 |阅读模式

    1. Rem database healthcheck scripts
    2. Rem author:zhangyu  mobile:15631192730

    3. SET TERMOUT ON

    4. PROMPT starting database healthcheck,please wait...

    5. SET TERMOUT     OFF
    6. SET ECHO        OFF
    7. SET FEEDBACK    OFF
    8. SET HEADING     ON
    9. SET LINESIZE    200
    10. SET PAGESIZE    2000
    11. SET TIMING      OFF
    12. SET TRIMSPOOL   ON
    13. SET VERIFY      OFF

    14. alter session set nls_date_format = 'YYYY-MM-DD HH24:MI:SS';
    15. alter session set nls_date_language = english;

    16. column host_name new_value host_name
    17. select host_name from v$instance noprint;
    18. column instance_name new_value instname
    19. SELECT INSTANCE_NAME FROM v$INSTANCE noprint;
    20. column checktime new_value time noprint;
    21. select to_char(sysdate,'YYYYMMDD_HH24MI') checktime from dual;
    22. SET MARKUP HTML ON SPOOL ON PREFORMAT OFF ENTMAP ON
    23. spool &host_name._&instname._&time..xls

    24. host echo 'collect basic database info'
    25. PROMPT ====basic Database Info   
    26.                                           
    27. CLEAR COLUMNS BREAKS COMPUTES

    28. SELECT 'Machine Name' "Database Summary"
    29.         ,listagg(host_name, ', ') within
    30. GROUP (
    31.                 ORDER BY instance_number
    32.                 ) "Description"
    33. FROM gv$instance
    34. UNION ALL
    35. SELECT 'OS Platform'
    36.         ,platform_name
    37. FROM v$database
    38. UNION ALL
    39. SELECT 'Memory Size'
    40.         ,listagg(i.host_name || ': ' || round(value / 1024 / 1024 / 1024, 2) || ' GB') within
    41. GROUP (
    42.                 ORDER BY instance_number
    43.                 )
    44. FROM gv$osstat o
    45.         ,gv$instance i
    46. WHERE o.stat_name = 'PHYSICAL_MEMORY_bytes'
    47.         AND o.inst_id = i.instance_number
    48. UNION ALL
    49. SELECT 'CPUs'
    50.         ,i.host_name || ': ' || listagg(CASE
    51.                         WHEN stat_name = 'NUM_CPU_CORES'
    52.                                 THEN 'COREs - ' || o.value
    53.                         ELSE 'CPUs - ' || o.value
    54.                         END, ', ') within
    55. GROUP (
    56.                 ORDER BY instance_number
    57.                 ) || ''
    58. FROM gv$osstat o
    59.         ,gv$instance i
    60. WHERE o.stat_name IN (
    61.                 'NUM_CPU_CORES'
    62.                 ,'NUM_CPUS'
    63.                 )
    64.         AND i.instance_number = o.inst_id
    65. GROUP BY i.host_name
    66. UNION ALL
    67. SELECT 'Database Name'
    68.         ,name
    69. FROM v$database
    70. UNION ALL
    71. SELECT 'Instance Name'
    72.         ,listagg(instance_name, ', ') within
    73. GROUP (
    74.                 ORDER BY instance_number
    75.                 )
    76. FROM gv$instance
    77. UNION ALL
    78. SELECT 'RAC(YES/NO)'
    79.         ,parallel
    80. FROM v$instance
    81. UNION ALL
    82. SELECT 'RDBMS Version'
    83.         ,version
    84. FROM v$instance
    85. UNION ALL
    86. SELECT 'Archive Mode'
    87.         ,log_mode
    88. FROM v$database
    89. UNION ALL
    90. SELECT 'Force Logging'
    91.         ,force_logging
    92. FROM v$database
    93. UNION ALL
    94. SELECT 'Optimizer Compatible'
    95.         ,value
    96. FROM v$parameter
    97. WHERE name = 'compatible'
    98. UNION ALL
    99. SELECT 'Optimizer Mode'
    100.         ,value
    101. FROM v$parameter
    102. WHERE name = 'optimizer_mode'
    103. UNION ALL
    104. SELECT 'Character Set'
    105.         ,property_value
    106. FROM database_properties
    107. WHERE property_name = 'NLS_CHARACTERSET'
    108. UNION ALL
    109. SELECT 'National Character Set'
    110.         ,property_value
    111. FROM database_properties
    112. WHERE property_name = 'NLS_NCHAR_CHARACTERSET'
    113. UNION ALL
    114. SELECT 'DB Time Zone'
    115.         ,dbtimezone
    116. FROM dual
    117. UNION ALL
    118. SELECT 'Storage Type(File System/Raw Decice/ASM)'
    119.         ,CASE
    120.                 WHEN substr(name, 1, 4) LIKE '/dev%'
    121.                         THEN 'Raw Device'
    122.                 WHEN substr(name, 1, 4) LIKE '+%'
    123.                         THEN 'ASM'
    124.                 ELSE 'File System'
    125.                 END Type
    126. FROM v$datafile
    127. WHERE rownum = 1
    128. UNION ALL
    129. SELECT 'Tablespace Count'
    130.         ,to_char(count(name))
    131. FROM v$tablespace
    132. UNION ALL
    133. SELECT 'Datafiles'
    134.         ,to_char(count(d.name))
    135. FROM v$datafile d
    136. UNION ALL
    137. SELECT 'Tempfiles'
    138.         ,to_char(count(t.name))
    139. FROM v$tempfile t
    140. UNION ALL
    141. SELECT 'Datafiles Total Size'
    142.         ,round(sum(d.bytes) / 1024 / 1024 / 1024, 2) || ' GB' GB
    143. FROM dba_data_files d
    144. UNION ALL
    145. SELECT 'Tempfiles Total Size'
    146.         ,round(sum(t.bytes) / 1024 / 1024 / 1024, 2) || ' GB'
    147. FROM dba_temp_files t
    148. UNION ALL
    149. SELECT 'Logfile Groups'
    150.         ,listagg('Thread ' || thread# || ': ' || count(DISTINCT group#)) within
    151. GROUP (
    152.                 ORDER BY thread#
    153.                 )
    154. FROM v$log
    155. GROUP BY thread#
    156. UNION ALL
    157. SELECT 'Controlfile Count'
    158.         ,to_char(count(name))
    159. FROM v$controlfile
    160. UNION ALL
    161. SELECT 'SPFILE/PFILE'
    162.         ,listagg(i.instance_name || ': ' || nvl2(name, 'SPFILE', 'PFILE')) within
    163. GROUP (
    164.                 ORDER BY p.inst_id
    165.                 )
    166. FROM gv$parameter p
    167.         ,gv$instance i
    168. WHERE p.name = 'spfile'
    169.         AND p.inst_id = i.instance_number
    170. UNION ALL
    171. SELECT 'Session Count'
    172.         ,listagg(i.instance_name || ': ' || s.STATUS || ' - ' || count(*)) within
    173. GROUP (
    174.                 ORDER BY s.inst_id
    175.                 ) cnt
    176. FROM gv$session s
    177.         ,gv$instance i
    178. WHERE s.inst_id = i.instance_number
    179. GROUP BY s.inst_id
    180.         ,i.instance_name
    181.         ,s.STATUS
    182. UNION ALL
    183. SELECT 'MEMORY_TARGET'
    184.         ,listagg(i.instance_name || ': ' || round(value / 1024 / 1024 / 1024, 2)) within
    185. GROUP (
    186.                 ORDER BY p.inst_id
    187.                 )
    188. FROM gv$parameter p
    189.         ,gv$instance i
    190. WHERE p.name = 'memory_target'
    191.         AND p.inst_id = i.instance_number
    192. UNION ALL
    193. SELECT 'SGA_TARGET'
    194.         ,listagg(i.instance_name || ': ' || round(value / 1024 / 1024 / 1024, 2)) within
    195. GROUP (
    196.                 ORDER BY p.inst_id
    197.                 )
    198. FROM gv$parameter p
    199.         ,gv$instance i
    200. WHERE p.name = 'sga_target'
    201.         AND p.inst_id = i.instance_number
    202. UNION ALL
    203. SELECT 'PGA_AGGREGATE_TARGET'
    204.         ,listagg(i.instance_name || ': ' || round(value / 1024 / 1024 / 1024, 2)) within
    205. GROUP (
    206.                 ORDER BY p.inst_id
    207.                 )
    208. FROM gv$parameter p
    209.         ,gv$instance i
    210. WHERE p.name = 'pga_aggregate_target'
    211.         AND p.inst_id = i.instance_number
    212. UNION ALL
    213. SELECT 'DB Block Size'
    214.         ,value
    215. FROM v$parameter p
    216. WHERE p.name = 'db_block_size'
    217. /


    218. host echo 'collect database properties info'
    219. PROMPT ====Database properties  
    220. select * from database_properties
    221. /

    222. host echo 'collect database info'
    223. PROMPT ====Database Info
    224. SELECT dbid
    225.         ,name
    226.         ,db_unique_name
    227.         ,created
    228.         ,log_mode
    229.         ,open_mode
    230.         ,protection_mode
    231.         ,database_role
    232.         ,force_logging
    233.         ,platform_name
    234.         ,flashback_on
    235.         ,dbtimezone
    236. FROM v$database
    237. /

    238. host echo 'collect instance info'
    239. PROMPT ====Instance Info  
    240. SELECT inst_id
    241.         ,instance_name
    242.         ,host_name
    243.         ,version
    244.         ,startup_time
    245.         ,STATUS
    246.         ,parallel AS "RAC"
    247. FROM gv$instance
    248. ORDER BY inst_id
    249. /

    250. host echo 'collect instance startup history info'
    251. PROMPT ====start hist into  

    252. CLEAR COLUMNS BREAKS COMPUTES

    253. SELECT instance_number inst
    254.         ,instance_name
    255.         ,startup_time
    256. FROM dba_hist_database_instance
    257. WHERE rownum <= 10
    258. ORDER BY 1,3
    259. /

    260. host echo 'collect database option info'
    261. PROMPT ====Database Options                                          

    262. CLEAR COLUMNS BREAKS COMPUTES

    263. COLUMN parameter                      FORMAT a45     HEADING 'Option Name'
    264. COLUMN value                          FORMAT a15     HEADING 'Value'

    265. SELECT
    266.     parameter
    267.   , value  
    268. FROM
    269.     v$option   
    270. ORDER BY 2  
    271. /

    272. host echo 'collect Database Registry info'
    273. PROMPT ====Database Registry                                 

    274. CLEAR COLUMNS BREAKS COMPUTES

    275. COLUMN comp_name                      FORMAT a45     HEADING 'Comp Name'
    276. COLUMN version                        FORMAT a20     HEADING 'Version'
    277. COLUMN status                         FORMAT a10     HEADING 'Status'

    278. SELECT
    279.     comp_name
    280.   , version
    281.   , status  
    282. FROM
    283.     dba_registry   
    284. /

    285. host echo 'collect Database Patchset info'
    286. PROMPT ====Database Patchset                                    

    287. CLEAR COLUMNS BREAKS COMPUTES

    288. COLUMN  action_time                   FORMAT a15    HEADING 'TIME'
    289. COLUMN  action                        FORMAT a15    HEADING 'ACTION'
    290. COLUMN  NAMESPACE                     FORMAT a15    HEADING 'NAMESPACE'
    291. COLUMN  VERSION                       FORMAT a15    HEADING 'VERSION'
    292. COLUMN  COMMENTS                      FORMAT a30    HEADING 'COMMENTS'

    293. select
    294.        TO_CHAR(action_time, 'yyyy/mm/dd') action_time,
    295.        action,
    296.        namespace,
    297.        version,
    298.        comments
    299.        from dba_registry_history
    300. /

    301. host echo 'collect Database HWM info'
    302. PROMPT ====Database HWM
    303. SELECT name
    304.         ,version
    305.         ,highwater
    306.         ,last_value
    307.         ,description
    308. FROM dba_high_water_mark_statistics
    309. /

    310. host echo 'collect Control Files info'
    311. PROMPT ====Control Files                                               

    312. CLEAR COLUMNS BREAKS COMPUTES

    313. COLUMN name                          FORMAT a85            HEADING "Name"
    314. COLUMN ctl_size                      FORMAT 999,999,999    HEADING "Size_MB"
    315. SELECT
    316.     name,
    317.     round(block_size*file_size_blks/1024/1024,0) ctl_size
    318. FROM v$controlfile
    319. ORDER BY name
    320. /

    321. host echo 'collect Redo Log info'
    322. PROMPT ====Redo Log                                                

    323. CLEAR COLUMNS BREAKS COMPUTES
    324. BREAK ON instance_name ON thread#

    325. COLUMN instance_name        FORMAT a20                HEADING 'Instance Name'   
    326. COLUMN thread#              FORMAT 999                HEADING 'Thread#'         
    327. COLUMN group#               FORMAT 999                HEADING 'Group#'         
    328. COLUMN member               FORMAT a50                HEADING 'Member'         
    329. COLUMN type                 FORMAT a10                HEADING 'Type'            
    330. COLUMN status               FORMAT a15                HEADING 'Status'         
    331. COLUMN bytes                FORMAT 999,999            HEADING 'LogSize MB'      
    332. COLUMN archived             FORMAT a15                HEADING 'Archived'        

    333. SELECT
    334.     i.instance_name  
    335.   , i.thread#        
    336.   , f.group#         
    337.   , f.member         
    338.   , f.type           
    339.   , l.status                                                                        
    340.   , l.bytes/1024/1024    bytes   
    341. FROM
    342.     gv$logfile  f
    343.   , gv$log      l
    344.   , gv$instance i
    345. WHERE
    346.       f.group# = l.group#
    347.   AND l.thread# = i.thread#
    348.   AND i.inst_id = f.inst_id
    349.   AND f.inst_id = l.inst_id
    350. ORDER BY
    351.     i.instance_name
    352.   , f.group#
    353.   , f.member
    354. /

    355. host echo 'collect Redo Log Switch info'
    356. PROMPT ====Redo Log Switch                                                

    357. CLEAR COLUMNS BREAKS COMPUTES

    358. COLUMN DAY                          FORMAT a8             HEADING 'D/T'  
    359. COLUMN H00                          FORMAT 999            HEADING '00'         
    360. COLUMN H01                          FORMAT 999            HEADING '01'         
    361. COLUMN H02                          FORMAT 999            HEADING '02'         
    362. COLUMN H03                          FORMAT 999            HEADING '03'         
    363. COLUMN H04                          FORMAT 999            HEADING '04'         
    364. COLUMN H05                          FORMAT 999            HEADING '05'         
    365. COLUMN H06                          FORMAT 999            HEADING '06'         
    366. COLUMN H07                          FORMAT 999            HEADING '07'         
    367. COLUMN H08                          FORMAT 999            HEADING '08'         
    368. COLUMN H09                          FORMAT 999            HEADING '09'         
    369. COLUMN H10                          FORMAT 999            HEADING '10'         
    370. COLUMN H11                          FORMAT 999            HEADING '11'         
    371. COLUMN H12                          FORMAT 999            HEADING '12'         
    372. COLUMN H13                          FORMAT 999            HEADING '13'         
    373. COLUMN H14                          FORMAT 999            HEADING '14'         
    374. COLUMN H15                          FORMAT 999            HEADING '15'         
    375. COLUMN H16                          FORMAT 999            HEADING '16'         
    376. COLUMN H17                          FORMAT 999            HEADING '17'         
    377. COLUMN H18                          FORMAT 999            HEADING '18'         
    378. COLUMN H19                          FORMAT 999            HEADING '19'         
    379. COLUMN H20                          FORMAT 999            HEADING '20'         
    380. COLUMN H21                          FORMAT 999            HEADING '21'         
    381. COLUMN H22                          FORMAT 999            HEADING '22'         
    382. COLUMN H23                          FORMAT 999            HEADING '23'         
    383. COLUMN TOTAL                        FORMAT 999,999,999    HEADING 'Total'      

    384. BREAK ON report

    385. SELECT
    386.     SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH:MI:SS'),1,5)                          DAY
    387.   , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'00',1,0)) H00
    388.   , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'01',1,0)) H01
    389.   , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'02',1,0)) H02
    390.   , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'03',1,0)) H03
    391.   , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'04',1,0)) H04
    392.   , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'05',1,0)) H05
    393.   , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'06',1,0)) H06
    394.   , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'07',1,0)) H07
    395.   , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'08',1,0)) H08
    396.   , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'09',1,0)) H09
    397.   , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'10',1,0)) H10
    398.   , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'11',1,0)) H11
    399.   , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'12',1,0)) H12
    400.   , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'13',1,0)) H13
    401.   , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'14',1,0)) H14
    402.   , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'15',1,0)) H15
    403.   , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'16',1,0)) H16
    404.   , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'17',1,0)) H17
    405.   , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'18',1,0)) H18
    406.   , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'19',1,0)) H19
    407.   , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'20',1,0)) H20
    408.   , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'21',1,0)) H21
    409.   , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'22',1,0)) H22
    410.   , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'23',1,0)) H23
    411.   , COUNT(*)                                                                      TOTAL
    412. FROM
    413.   v$log_history  a  
    414.   where first_time>sysdate-15
    415. GROUP BY SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH:MI:SS'),1,5)
    416. ORDER BY SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH:MI:SS'),1,5)
    417. /

    418. host echo 'collect archivelog config'
    419. PROMPT ====archivelog config
    420. SELECT 'Database log mode' name
    421.         ,log_mode value
    422. FROM v$database
    423. UNION ALL
    424. SELECT i.instance_name || '.' || p.name
    425.         ,p.value
    426. FROM gv$parameter p
    427.         ,gv$instance i
    428. WHERE name LIKE 'log_archive%'
    429.         AND p.inst_id = i.instance_number
    430.         AND p.name NOT LIKE 'log_archive_dest_state%'
    431.         AND p.value IS NOT NULL
    432. UNION ALL
    433. SELECT i.instance_name || '.' || p.name
    434.         ,p.value
    435. FROM gv$parameter p
    436.         ,gv$instance i
    437. WHERE name LIKE 'log_archive_dest_state%'
    438.         AND p.inst_id = i.instance_number
    439.         AND to_number(ltrim(name, 'log_archive_dest_')) IN (
    440.                 SELECT dest_id
    441.                 FROM v$archive_dest
    442.                 WHERE target = 'PRIMARY'
    443.                         AND destination IS NOT NULL
    444.                 )
    445. ORDER BY 1
    446. /                                                

    447. host echo 'collect archivelog list info'
    448. PROMPT ====archivelog list

    449. SELECT trunc(first_time) AS DATETIME
    450.         ,round(sum(blocks * block_size / 1024 / 1024), 2) AS "Archivelog(MB)/DAY"
    451. FROM v$archived_log a
    452.         ,v$archive_dest b
    453. WHERE a.dest_id = b.dest_id
    454.         AND b.target = 'PRIMARY'
    455.         AND b.destination IS NOT NULL
    456.         AND sysdate - a.first_time <= 30
    457. GROUP BY trunc(first_time)
    458. ORDER BY 1
    459. /

    460. host echo 'collect recovery area Info'
    461. PROMPT ====recovery area
    462. SELECT *
    463. FROM v$recovery_area_usage
    464. /

    465. host echo 'collect Tablespaces Usage Info'
    466. PROMPT ====tablespace usage info

    467. WITH tbs
    468. AS (
    469.         SELECT t2.ts#
    470.                 ,t1.tablespace_name name
    471.                 ,t1.block_size
    472.                 ,t1.contents type
    473.                 ,t1.STATUS
    474.                 ,t1.bigfile
    475.         FROM dba_tablespaces t1
    476.                 ,v$tablespace t2
    477.         WHERE t1.tablespace_name = t2.name
    478.         )
    479. SELECT t.name tablespace
    480.         ,t.type
    481.         ,t.bigfile
    482.         ,t.STATUS
    483.         ,count(f.rfno) datafiles
    484.         ,round(sum(f.file_size) * t.block_size / 1024 / 1024 / 1024, 2) AS TOTAL_GB
    485.         ,round(sum(f.allocated_space) * t.block_size / 1024 / 1024 / 1024, 2) AS USED_GB
    486.         ,round((sum(f.file_size) - sum(f.allocated_space)) * t.block_size / 1024 / 1024 / 1024, 2) AS FREE_GB
    487.         ,round(sum(f.allocated_space) / sum(f.file_size) * 100, 2) AS USED_PCT
    488.         ,round(sum(f.file_maxsize) * t.block_size / 1024 / 1024 / 1024, 2) AS MAXSIZE_GB
    489.         ,round((sum(f.file_maxsize) - sum(f.file_size)) * t.block_size / 1024 / 1024 / 1024, 2) AS EXT_GB
    490. FROM v$filespace_usage f
    491.         ,tbs t
    492. WHERE f.tablespace_id = t.ts#
    493. GROUP BY t.name
    494.         ,t.type
    495.         ,t.STATUS
    496.         ,t.block_size
    497.         ,t.bigfile
    498. ORDER BY USED_PCT DESC
    499. /

    500. host echo 'collect FSFI info'
    501. PROMPT ====Free Space Fragmentation Index info

    502. column FSFI format 999,99
    503. select tablespace_name,sqrt(max(blocks)/sum(blocks))*
    504. (100/sqrt(sqrt(count(blocks)))) FSFI
    505. from dba_free_space
    506. group by tablespace_name order by 1
    507. /

    508. host echo 'collect Data File Usage Info'
    509. PROMPT ====Data File Usage Info

    510. CLEAR COLUMNS BREAKS COMPUTES

    511. CLEAR COLUMNS
    512. CLEAR BREAKS
    513. CLEAR COMPUTES

    514. COLUMN tablespace  FORMAT a18                 HEADING 'Tablespace_Name'
    515. COLUMN filename    FORMAT a75                 HEADING 'File_name'
    516. COLUMN filesize    FORMAT 9,999,999,999       HEADING 'Total_MB'
    517. COLUMN used        FORMAT 9,999,999,999       HEADING 'Used_MB'
    518. COLUMN pct_used    FORMAT 999                 HEADING 'Pct_Used'
    519. COLUMN file_id     FORMAT 9999                HEADING 'File_ID'
    520. COLUMN maxbytes    FORMAT 9,999,999,999       HEADING 'Max_MB'
    521. COLUMN status      FORMAT a10                 HEADING 'Status'
    522. BREAK ON report on tablespace

    523. COMPUTE sum OF filesize  ON report
    524. COMPUTE sum OF used      ON report

    525. SELECT /*+ ordered */
    526.     d.tablespace_name                     tablespace
    527.   , d.file_name                           filename
    528.   , d.file_id                             file_id
    529.   , d.bytes/1024/1024                     filesize
    530.   , NVL((d.bytes - s.bytes), d.bytes)/1024/1024     used
    531.   , TRUNC(((NVL((d.bytes - s.bytes) , d.bytes)) / d.bytes) * 100)  pct_used
    532.   , d.AUTOEXTENSIBLE                      autoextend
    533. FROM
    534.     sys.dba_data_files d
    535.   , ( select file_id, SUM(bytes) bytes
    536.       from sys.dba_free_space
    537.       GROUP BY file_id) s
    538. WHERE
    539.       s.file_id (+)= d.file_id
    540. UNION
    541. SELECT
    542.     d.tablespace_name                       tablespace
    543.   , d.file_name                             filename
    544.   , d.file_id                               file_id
    545.   , d.bytes/1024/1024                                 filesize
    546.   , NVL(t.bytes_cached, 0)/1024/1024                  used
    547.   , TRUNC((t.bytes_cached / d.bytes) * 100) pct_used
    548.   , d.AUTOEXTENSIBLE                                  autoextend
    549. FROM
    550.     sys.dba_temp_files d
    551.   , v$temp_extent_pool t
    552. WHERE
    553.       t.file_id (+)= d.file_id
    554. /

    555. host echo 'collect Datafile Growth Info'
    556. PROMPT ====Datafile Growth

    557. CLEAR COLUMNS BREAKS COMPUTES
    558. CLEAR COLUMNS
    559. CLEAR BREAKS
    560. CLEAR COMPUTES

    561. COLUMN month        FORMAT a7                   HEADING 'Month'
    562. COLUMN growth       FORMAT 999,999,999,999,999  HEADING 'Growth (MB)'

    563. BREAK ON report

    564. COMPUTE sum OF growth ON report

    565. SELECT
    566.     TO_CHAR(creation_time, 'yyyy-MM') month
    567.   , SUM(bytes/1024/1024)              growth
    568. FROM     sys.v_$datafile
    569. GROUP BY TO_CHAR(creation_time, 'yyyy-MM')
    570. ORDER BY TO_CHAR(creation_time, 'yyyy-MM')
    571. /

    572. host echo 'collect Big table histogram'
    573. PROMPT ====Big tables histogram
    574. SELECT count(CASE
    575.                         WHEN round(bytes / 1024 / 1024 / 1024, 0) <= 2
    576.                                 THEN 1
    577.                         END) AS "0-2GB"
    578.         ,count(CASE
    579.                         WHEN round(bytes / 1024 / 1024 / 1024, 0) > 2
    580.                                 AND round(bytes / 1024 / 1024 / 1024, 0) <= 10
    581.                                 THEN 1
    582.                         END) AS "2-10GB"
    583.         ,count(CASE
    584.                         WHEN round(bytes / 1024 / 1024 / 1024, 0) > 10
    585.                                 THEN 1
    586.                         END) AS ">10GB"
    587. FROM dba_segments
    588. WHERE OWNER NOT IN (
    589.                 'sys'
    590.                 ,'system'
    591.                 )
    592.         AND segment_type = 'TABLE'
    593.         AND segment_name NOT IN (
    594.                 SELECT table_name
    595.                 FROM dba_tab_partitions
    596.                 )
    597. /

    598. host echo 'collect Big tables info'
    599. PROMPT ====Big tables details

    600. CLEAR COLUMNS BREAKS COMPUTES
    601. COLUMN segment_name    FORMAT a30           HEADING 'Table Not Parted'        
    602. COLUMN bytes           FORMAT a65           HEADING 'Table Size(MB)'


    603. select s.owner,
    604.        s.segment_name,
    605.        round(s.bytes/1024/1024,0) mb
    606.        from dba_segments s
    607.        where s.segment_type='TABLE'
    608.        and round(s.bytes/1024/1024,0)>10240
    609.        and s.segment_name not in(select table_name from dba_part_tables)
    610.        order by 3 desc
    611. /

    612. host echo 'collect Invalid Objects info'
    613. PROMPT ====Invalid Objects Info
    614. select count(*) in_valid_objs from dba_objects where status='INVALID';
    615. PROMPT ====Invalid Objects details Info
    616. CLEAR COLUMNS BREAKS COMPUTES
    617. compute sum of object_count on report
    618. select owner,
    619.        object_type,
    620.        count(*) object_count
    621.   from dba_objects
    622. where status = 'INVALID'
    623. group by (owner, object_type)
    624. order by owner, object_type
    625. /

    626. host echo 'collect Table With High Degree'
    627. PROMPT ====Table With High Degree
    628. SELECT t.OWNER
    629.         ,t.table_name
    630.         ,t.degree
    631.         ,t.TEMPORARY
    632. FROM dba_tables t
    633. WHERE trim(t.degree) NOT IN (
    634.                 '0'
    635.                 ,'1'
    636.                 ,'DEFAULT'
    637.                 )
    638. ORDER BY 1
    639.         ,2
    640. /

    641. host echo 'collect Foreign Key Without Index'
    642. PROMPT ====Foreign Key Without Index
    643. SELECT c.OWNER
    644.         ,c.table_name
    645.         ,c.constraint_name fk_name
    646.         ,l.column_name
    647. FROM dba_constraints c
    648.         ,dba_cons_columns l
    649.         ,dba_ind_columns i
    650. WHERE c.constraint_type = 'R'
    651.         AND c.constraint_name = l.constraint_name
    652.         AND c.OWNER = l.OWNER
    653.         AND c.table_name = l.table_name
    654.         AND l.table_name = i.table_name(+)
    655.         AND l.column_name = i.column_name(+)
    656.         AND i.index_name IS NULL
    657.         AND c.owner not in('SYSTEM','SYS','ORDDATA')
    658. ORDER BY 1
    659.         ,2
    660. /


    661. host echo 'collect Unuseable indexes info'
    662. PROMPT ====Unuseable indexes

    663. CLEAR COLUMNS BREAKS COMPUTES

    664. select owner,index_name,table_owner,table_name,status from dba_indexes where status='UNUSABLE'
    665. /

    666. host echo 'collect Table Has More Than 5 Indexes'
    667. PROMPT ====Table Has More Than 5 Indexes
    668. SELECT table_owner
    669.         ,table_name
    670.         ,count(index_name)
    671. FROM dba_indexes
    672. GROUP BY table_owner
    673.         ,table_name
    674. HAVING count(index_name) > 5
    675. ORDER BY 1
    676.         ,2
    677.         ,3
    678. /

    679. host echo 'collect Table and Index With Different Owner'
    680. PROMPT ====Table and Index With Different Owner
    681. SELECT OWNER index_owner
    682.         ,table_owner
    683.         ,index_name
    684.         ,table_name
    685. FROM dba_indexes
    686. WHERE OWNER <> table_owner
    687. /

    688. host echo 'collect Index With High Blevel/Degreer'
    689. PROMPT ====Index With High Blevel/Degree
    690. SELECT i.OWNER index_owner
    691.         ,i.index_name
    692.         ,i.index_type
    693.         ,i.table_owner
    694.         ,i.table_name
    695.         ,i.uniqueness
    696.         ,i.compression
    697.         ,i.blevel
    698.         ,i.degree
    699. FROM dba_indexes i
    700. WHERE blevel > 3
    701.         OR trim(degree) NOT IN (
    702.                 '0'
    703.                 ,'1'
    704.                 ,'DEFAULT'
    705.                 )
    706. ORDER BY 1
    707. /

    708. host echo 'collect Unusable index'
    709. PROMPT ====Unusable index
    710. SELECT i.OWNER
    711.         ,i.index_name
    712.         ,i.index_type
    713.         ,i.table_name
    714.         ,NULL partition_name
    715.         ,NULL subpartition_name
    716.         ,i.STATUS
    717. FROM dba_indexes i
    718. WHERE STATUS = 'UNUSABLE'
    719. UNION ALL
    720. SELECT i.OWNER
    721.         ,i.index_name
    722.         ,i.index_type
    723.         ,i.table_name
    724.         ,p.partition_name
    725.         ,NULL subpartition_name
    726.         ,p.STATUS
    727. FROM dba_ind_partitions p
    728.         ,dba_indexes i
    729. WHERE p.index_name = i.index_name
    730.         AND p.STATUS = 'UNUSABLE'
    731. UNION ALL
    732. SELECT i.OWNER
    733.         ,i.index_name
    734.         ,i.index_type
    735.         ,i.table_name
    736.         ,s.partition_name
    737.         ,s.subpartition_name
    738.         ,s.STATUS
    739. FROM dba_ind_subpartitions s
    740.         ,dba_indexes i
    741. WHERE s.index_name = i.index_name
    742.         AND s.STATUS = 'UNUSABLE'
    743. ORDER BY 1
    744.         ,4
    745. /

    746. host echo 'collect nologging tables'
    747. PROMPT ====nologging tables
    748. SELECT t.OWNER
    749.         ,count(table_name) totalcnt
    750. FROM dba_tables t
    751. WHERE logging = 'NO'
    752. and owner not in('DBSNMP','DVSYS','MDSYS','ORDDATA','SYS','SYSMAN','SYSTEM','SYSMAN_MDS','SYSMAN_BIPLATFORM','GSMADMIN_INTERNAL','WMSYS','XDB')
    753. GROUP BY t.OWNER
    754. ORDER BY 1
    755. /

    756. host echo 'collect User Tables With Stale Stats count'
    757. PROMPT ====User Tables With Stale Stats count
    758. SELECT s.OWNER
    759.         ,count(s.table_name) tablecnt
    760. FROM dba_tab_statistics s
    761. WHERE s.stale_stats = 'YES'
    762.         AND s.table_name NOT IN (
    763.                 SELECT object_name
    764.                 FROM dba_recyclebin
    765.                 )
    766.         AND s.stattype_locked IS NULL
    767. GROUP BY s.OWNER
    768. ORDER BY OWNER;

    769. host echo 'collect User Tables With Stale Stats details'
    770. PROMPT ====User Tables With Stale Stats details
    771. SELECT s.OWNER
    772.         ,s.table_name
    773.         ,s.partition_name
    774.         ,s.subpartition_name
    775.         ,s.object_type
    776.         ,s.last_analyzed
    777.         ,s.stattype_locked
    778.         ,s.stale_stats
    779. FROM dba_tab_statistics s
    780. WHERE s.stale_stats = 'YES'
    781.         AND s.stattype_locked IS NULL
    782.         AND s.table_name NOT IN (
    783.                 SELECT object_name
    784.                 FROM dba_recyclebin
    785.                 )
    786. ORDER BY OWNER
    787. /

    788. host echo 'collect Application Sequences'
    789. PROMPT ====Application Sequences
    790. SELECT s.sequence_owner
    791.         ,s.sequence_name
    792.         ,s.min_value
    793.         ,s.max_value
    794.         ,s.increment_by
    795.         ,s.cycle_flag
    796.         ,s.order_flag
    797.         ,s.cache_size
    798.         ,s.last_number
    799. FROM dba_sequences s
    800. ORDER BY 2
    801.         ,3
    802. /

    803. host echo 'collect corsurs usage info'
    804. PROMPT ====corsurs usage

    805. CLEAR COLUMNS BREAKS COMPUTES
    806. select
    807.   'session_cached_cursors'  parameter,
    808.   lpad(value, 5)  value,
    809.   decode(value, 0, '  n/a', to_char(100 * used / value, '999999999') || '%')  usage
    810. from
    811.   ( select
    812.       max(s.value)  used
    813.     from
    814.       v$statname  n,
    815.       v$sesstat  s
    816.     where
    817.       n.name = 'session cursor cache count' and
    818.       s.statistic# = n.statistic#
    819.   ),
    820.   ( select
    821.       value
    822.     from
    823.       v$parameter
    824.     where
    825.       name = 'session_cached_cursors'
    826.   )
    827. union all
    828. select
    829.   'open_cursors',
    830.   lpad(value, 5),
    831.   to_char(100 * used / value,  '999999999') || '%'
    832. from
    833.   ( select
    834.       max(sum(s.value))  used
    835.     from
    836.       v$statname  n,
    837.       v$sesstat  s
    838.     where
    839.       n.name in ('opened cursors current', 'session cursor cache count') and
    840.       s.statistic# = n.statistic#
    841.     group by
    842.       s.sid
    843.   ),
    844.   ( select
    845.       value
    846.     from
    847.       v$parameter
    848.     where
    849.       name = 'open_cursors'
    850.   )


    851. select
    852.   'session_cached_cursors'  parameter,
    853.   lpad(value, 5)  value,
    854.   decode(value, 0, '  n/a', to_char(100 * used / value, '999999') || '%')  usage
    855. from
    856.   ( select
    857.       max(s.value)  used
    858.     from
    859.       v$statname  n,
    860.       v$sesstat  s
    861.     where
    862.       n.name = 'session cursor cache count' and
    863.       s.statistic# = n.statistic#
    864.   ),
    865.   ( select
    866.       value
    867.     from
    868.       v$parameter
    869.     where
    870.       name = 'session_cached_cursors'
    871.   )
    872. union all
    873. select
    874.   'open_cursors',
    875.   lpad(value, 5),
    876.   to_char(100 * used / value,  '999999999999') || '%'
    877. from
    878.   ( select
    879.       max(sum(s.value))  used
    880.     from
    881.       v$statname  n,
    882.       v$sesstat  s
    883.     where
    884.       n.name= 'opened cursors current' and
    885.       s.statistic# = n.statistic#
    886.     group by
    887.       s.sid
    888.   ),
    889.   ( select
    890.       value
    891.     from
    892.       v$parameter
    893.     where
    894.       name = 'open_cursors'
    895.   )
    896. /

    897. host echo 'collect nonsys objs in system info'
    898. PROMPT ====Objects in system tablespace (no sys_user)

    899. CLEAR COLUMNS BREAKS COMPUTES

    900. COLUMN owner                                          HEADING 'Owner'           
    901. COLUMN count(*)                                       HEADING 'Obj_numbers'      

    902. select owner, count(*)
    903.   from dba_segments
    904. where tablespace_name in ('SYSAUX')
    905.    and owner not in ('MDSYS',
    906.                      'OUTLN',
    907.                      'CTXSYS',
    908.                      'OLAPSYS',
    909.                      'SYSTEM',
    910.                      'EXFSYS',
    911.                      'DBSNMP',
    912.                      'ORDSYS',
    913.                      'XDB',
    914.                      'ORDDATA',
    915.                      'SYS',
    916.                      'WMSYS',
    917.                      'APEX_030200',
    918.                      'APEX_040200',
    919.                      'AUDSYS',
    920.                      'DVSYS',
    921.                      'LBACSYS',
    922.                      'TSMSYS',
    923.                      'SYSMAN')
    924. group by owner
    925. union all
    926. select owner, count(*)
    927.   from dba_segments
    928. where tablespace_name in ('SYSTEM')
    929.    and owner not in ('MDSYS',
    930.                                          'OUTLN',
    931.                      'CTXSYS',
    932.                      'OLAPSYS',
    933.                      'SYSTEM',
    934.                      'EXFSYS',
    935.                      'DBSNMP',
    936.                      'ORDSYS',
    937.                      'XDB',
    938.                      'ORDDATA',
    939.                      'SYS',
    940.                      'WMSYS',
    941.                      'APEX_030200',
    942.                      'APEX_040200',
    943.                      'AUDSYS',
    944.                      'DVSYS',
    945.                      'LBACSYS',
    946.                      'TSMSYS',
    947.                      'SYSMAN')
    948. group by owner
    949. /

    950. host echo 'collect recyclebin info'
    951. PROMPT ====Objects in recyclebin

    952. SELECT r.OWNER
    953.         ,r.type
    954.         ,count(*) count
    955. FROM dba_recyclebin r
    956. GROUP BY r.OWNER
    957.         ,r.type
    958. /
    959.        
    960. host echo 'collect auto task status'
    961. PROMPT ====Oracle auto task status
    962. SELECT a.client_name
    963.         ,a.STATUS
    964.         ,a.window_group
    965. FROM dba_autotask_client a
    966. /

    967. host echo 'collect segadv info'
    968. PROMPT ====segment advice
    969. SELECT tablespace_name
    970.         ,segment_name
    971.         ,segment_type
    972.         ,partition_name
    973.         ,recommendations c1
    974. FROM TABLE (dbms_space.asa_recommendations('TRUE', 'TRUE', 'FALSE'))
    975. /

    976. host echo 'collect Schedulers Window'
    977. PROMPT ====Schedulers Window
    978. CLEAR COLUMNS BREAKS COMPUTES
    979. SELECT b.window_group_name
    980.         ,a.window_name
    981.         ,a.repeat_interval
    982.         ,a.next_start_date
    983.         ,a.duration
    984. FROM dba_scheduler_windows a
    985.         ,dba_scheduler_wingroup_members b
    986. WHERE a.window_name = b.window_name
    987. ORDER BY 1
    988. /

    989. host echo 'collect Schedulers Jobs info'
    990. PROMPT ====Schedulers Jobs
    991. SELECT j.OWNER
    992.         ,j.job_name
    993.         ,j.schedule_name
    994.         ,j.start_date
    995.         ,j.end_date
    996.         ,j.repeat_interval
    997.         ,j.enabled
    998.         ,j.STATE
    999.         ,j.stop_on_window_close
    1000. FROM dba_scheduler_jobs j
    1001. ORDER BY job_name
    1002. /

    1003. host echo 'collect jobs info'
    1004. PROMPT ====Oracle Jobs
    1005. CLEAR COLUMNS BREAKS COMPUTES
    1006. COLUMN job                         FORMAT 9999999    HEADING 'Job ID'
    1007. COLUMN username                    FORMAT a20        HEADING 'User'
    1008. COLUMN what                        FORMAT a60        HEADING 'What'
    1009. COLUMN next_date                   FORMAT a20        HEADING 'Next Run Date'
    1010. COLUMN interval                    FORMAT a30        HEADING 'Interval'
    1011. COLUMN last_date                   FORMAT a20        HEADING 'Last Run Date'
    1012. COLUMN failures                                      HEADING 'Failures'
    1013. COLUMN broken                      FORMAT a7         HEADING 'Broken?'
    1014.                                  
    1015. SELECT
    1016.     job
    1017.   , log_user username
    1018.   , what
    1019.   , TO_CHAR(next_date, 'YYYYMMDD HH24:MI:SS') next_date
    1020.   , interval
    1021.   , TO_CHAR(last_date, 'YYYYMMDD HH24:MI:SS') last_date
    1022.   , failures
    1023.   , broken
    1024. FROM
    1025.     dba_jobs
    1026. /

    1027. host echo 'collect Job history(last 10) info'
    1028. PROMPT ====Job history(last 10)
    1029. CLEAR COLUMNS BREAKS COMPUTES
    1030. SELECT *
    1031. FROM (
    1032.         SELECT j.client_name
    1033.                 ,j.window_name
    1034.                 ,j.window_start_time
    1035.                 ,j.window_duration
    1036.                 ,j.job_name
    1037.                 ,j.job_status
    1038.                 ,j.job_start_time
    1039.                 ,j.job_duration
    1040.                 ,j.job_error
    1041.                 ,j.job_info
    1042.                 ,row_number() OVER (
    1043.                         PARTITION BY j.client_name ORDER BY j.job_start_time DESC
    1044.                         ) rank
    1045.         FROM dba_autotask_job_history j
    1046.         )
    1047. WHERE rank <= 10
    1048. /

    1049. host echo 'collect jobs info'
    1050. PROMPT ====Oracle Jobs
    1051. CLEAR COLUMNS BREAKS COMPUTES
    1052. SELECT *
    1053. FROM (
    1054.         SELECT log_date
    1055.                 ,OWNER
    1056.                 ,job_name
    1057.                 ,STATUS
    1058.                 ,req_start_date
    1059.                 ,actual_start_date
    1060.                 ,run_duration
    1061.                 ,instance_id
    1062.                 ,session_id
    1063.                 ,slave_pid
    1064.                 ,cpu_used
    1065.                 ,error#
    1066.                 ,additional_info
    1067.                 ,row_number() OVER (
    1068.                         PARTITION BY OWNER ORDER BY j.actual_start_date DESC
    1069.                         ) rank
    1070.         FROM dba_scheduler_job_run_details j
    1071.         )
    1072. WHERE rank <= 10
    1073. /

    1074. host echo 'collect Scheduler History info'
    1075. PROMPT ====Scheduler History

    1076. CLEAR COLUMNS BREAKS COMPUTES

    1077. CLEAR COLUMNS
    1078. CLEAR BREAKS
    1079. CLEAR COMPUTES

    1080. COLUMN username              FORMAT a30    HEAD 'Username'
    1081. COLUMN account_status        FORMAT a17    HEAD 'Status'
    1082. COLUMN expiry_date                         HEAD 'Expire Date'
    1083. COLUMN default_tablespace    FORMAT a28    HEAD 'Default Tablespace'
    1084. COLUMN temporary_tablespace  FORMAT a15    HEAD 'Temp Tablespace'
    1085. COLUMN created                             HEAD 'Created On'
    1086. COLUMN profile               FORMAT a10    HEAD 'Profile'
    1087. COLUMN sysdba                FORMAT a6     HEAD 'SYSDBA'
    1088. COLUMN sysoper               FORMAT a7     HEAD 'SYSOPER'

    1089. SELECT distinct
    1090.     a.username                                        username
    1091.   , a.account_status                                  account_status
    1092.   , TO_CHAR(a.expiry_date, 'mm/dd/yyyy HH24:MI:SS')   expiry_date
    1093.   , a.default_tablespace                              default_tablespace
    1094.   , a.temporary_tablespace                            temporary_tablespace
    1095.   , TO_CHAR(a.created, 'mm/dd/yyyy HH24:MI:SS')       created
    1096.   , a.profile                                         profile
    1097.   , DECODE(p.sysdba,'TRUE', 'TRUE','')                sysdba
    1098.   , DECODE(p.sysoper,'TRUE','TRUE','')                sysoper
    1099. FROM
    1100.     dba_users       a
    1101.   , v$pwfile_users  p
    1102. WHERE
    1103.     p.username (+) = a.username
    1104. ORDER BY username
    1105. /

    1106. host echo 'collect SYSDBA info'
    1107. PROMPT ====SYSDBA Info
    1108. select username,SYSDBA,SYSOPER,ACCOUNT_STATUS,AUTHENTICATION_TYPE from v$pwfile_users
    1109. /
    1110.   
    1111. host echo 'collect DBA info'
    1112. PROMPT ====DBA  Info

    1113. COLUMN         GRANTEE              FORMAT a25    HEAD 'Username'   
    1114. COLUMN         GRANTED_ROLE         FORMAT a25    HEAD 'IS DBA'                             

    1115. select * from dba_role_privs where granted_role='DBA' order by 1;

    1116. PROMPT ====User with granted roles

    1117. CLEAR COLUMNS BREAKS COMPUTES
    1118. COLUMN         USERNAME             FORMAT a25    HEAD 'Username'   
    1119. COLUMN         GRANTED_ROLE         FORMAT a40    HEAD 'Granted Role'
    1120. BREAK ON username
    1121. select username,granted_role from dba_users u,dba_role_privs p where u.username=p.grantee order by 1
    1122. /

    1123. host echo 'collect profile info'
    1124. PROMPT ====Profile

    1125. COLUMN         profile              FORMAT a30    HEAD 'Profile'
    1126. COLUMN         resource_name        FORMAT a25    HEAD 'Resource_name'
    1127. COLUMN         resource_type        FORMAT a25    HEAD 'Resource_type'
    1128. COLUMN         limit                FORMAT a40    HEAD 'Limit'
    1129. break on profile
    1130. select profile,resource_name,resource_type,limit from dba_profiles order by 1,2
    1131. /

    1132. host echo 'collect Resource_limit info'
    1133. PROMPT ====Resource_limit

    1134. COLUMN         RESOURCE_NAME              FORMAT a30    HEAD 'RESOURCE_NAME'
    1135. COLUMN         CURRENT_UTILIZATION                      HEAD 'CURRENT'
    1136. COLUMN         MAX_UTILIZATION                          HEAD 'MAX'
    1137. COLUMN         INITIAL_ALLOCATION         FORMAT a40    HEAD 'INITIAL'
    1138. COLUMN         LIMIT_VALUE                FORMAT a40    HEAD 'LIMIT'
    1139. select RESOURCE_NAME,CURRENT_UTILIZATION,MAX_UTILIZATION,INITIAL_ALLOCATION,LIMIT_VALUE from v$resource_limit
    1140. /

    1141. host echo 'collect User Data info'        
    1142. PROMPT ====User Data Summary

    1143. CLEAR COLUMNS BREAKS COMPUTES
    1144. COLUMN         owner             FORMAT a25    HEADING 'Username'   
    1145. COLUMN         bytes             FORMAT 999,999,999,999    HEADING 'MB'
    1146. break on report
    1147. COMPUTE sum  OF mb ON report

    1148. select owner,round(sum(bytes/1024/1024),0) mb from dba_segments group by owner order by 2 desc
    1149. /

    1150. host echo 'collect Database Links  info'
    1151. PROMPT ====Database Links

    1152. CLEAR COLUMNS BREAKS COMPUTES

    1153. COLUMN owner                          FORMAT a15     HEADING 'OWNER'
    1154. COLUMN DB_LINK                        FORMAT a20     HEADING 'DL_VALUE'
    1155. COLUMN username                       FORMAT a15     HEADING 'USER NAME'
    1156. COLUMN host                           FORMAT a50     HEADING 'HOST'
    1157. SELECT
    1158.     owner,username,db_link,host,created  
    1159. FROM
    1160.     dba_db_links  
    1161. ORDER BY 1
    1162. /  

    1163. host echo 'collect directory  info'  
    1164. PROMPT ====directory

    1165. CLEAR COLUMNS
    1166. CLEAR BREAKS
    1167. CLEAR COMPUTES

    1168. COLUMN owner            FORMAT a10   HEADING 'Owner'
    1169. COLUMN directory_name   FORMAT a30   HEADING 'Directory Name'
    1170. COLUMN directory_path   FORMAT a85   HEADING 'Directory Path'

    1171. SELECT
    1172.     owner
    1173.   , directory_name
    1174.   , directory_path
    1175. FROM
    1176.     dba_directories
    1177. ORDER BY
    1178.     owner
    1179.   , directory_name
    1180. /

    1181. host echo 'collect User Sessions Summary info'   
    1182. PROMPT ====User Sessions Summary Report

    1183. CLEAR COLUMNS BREAKS COMPUTES

    1184. COLUMN max_sess_allowed             FORMAT 9,999,999        HEADING 'Max sessions allowed'
    1185. COLUMN num_sessions                 FORMAT 9,999,999,999    HEADING 'Number of sessions'
    1186. COLUMN pct_utl                      FORMAT a19              HEADING 'Percent Utilization'
    1187. COLUMN username                     FORMAT a15              HEADING 'Oracle User'
    1188. COLUMN num_user_sess                FORMAT 9,999,999        HEADING 'Number of Logins'
    1189. COLUMN count_a                      FORMAT 9,999,999        HEADING 'Active Logins'
    1190. COLUMN count_i                      FORMAT 9,999,999        HEADING 'Inactive Logins'
    1191.                                    
    1192. SELECT
    1193.     TO_NUMBER(a.value)         max_sess_allowed
    1194.   , TO_NUMBER(count(*))        num_sessions
    1195.   , LPAD(ROUND((count(*)/a.value)*100,0) || '%', 19)  pct_utl
    1196. FROM
    1197.     v$session    b
    1198.   , v$parameter  a
    1199. WHERE
    1200.     a.name = 'sessions'
    1201. GROUP BY
    1202.     a.value
    1203. /

    1204. host echo 'collect awr settings info'        
    1205. PROMPT ====awr settings
    1206. SELECT a.dbid
    1207.         ,a.snap_interval
    1208.         ,a.retention
    1209.         ,a.topnsql
    1210. FROM dba_hist_wr_control a
    1211. /

    1212. host echo 'collect dbmemory info'        
    1213. PROMPT ====dbmemory info
    1214. SELECT p.inst_id
    1215.         ,p.name
    1216.         ,round(p.value / 1024 / 1024 / 1024, 2) value
    1217. FROM gv$system_parameter p
    1218. WHERE p.name IN (
    1219.                 'memory_max_target'
    1220.                 ,'memory_target'
    1221.                 ,'sga_max_size'
    1222.                 ,'sga_target'
    1223.                 ,'pga_aggregate_target'
    1224.                 ,'shard_pool_size'
    1225.                 ,'shared_pool_reserved_size'
    1226.                 ,'large_pool_size'
    1227.                 ,'java_pool_size'
    1228.                 ,'streams_pool_size'
    1229.                 )
    1230. /

    1231. host echo 'collect SGA info'        
    1232. PROMPT ====SGA info
    1233. SELECT instance_name
    1234.         ,name
    1235.         ,round(bytes / 1024 / 1024, 2) size_mb
    1236.         ,resizeable
    1237. FROM gv$sgainfo s
    1238.         ,gv$instance i
    1239. WHERE s.inst_id = i.inst_id
    1240. ORDER BY 1
    1241.         ,3 DESC
    1242. /

    1243. host echo 'collect Top Components of Shared Pool'        
    1244. PROMPT ====Top Components of Shared Pool

    1245. SELECT *
    1246. FROM (
    1247.         SELECT a.inst_id
    1248.                 ,a.pool
    1249.                 ,a.name
    1250.                 ,a.bytes
    1251.         FROM gv$sgastat a
    1252.         WHERE pool = 'shared pool'
    1253.         ORDER BY 1
    1254.                 ,2
    1255.                 ,4 DESC
    1256.         )
    1257. WHERE rownum <= 10
    1258. /
    1259.        
    1260. host echo 'collect Undo parameters info'
    1261. PROMPT ====Undo parameters
    1262. SELECT inst_id
    1263.         ,name
    1264.         ,value
    1265. FROM gv$parameter
    1266. WHERE name IN (
    1267.                 'temp_undo_enabled'
    1268.                 ,'undo_management'
    1269.                 ,'undo_retention'
    1270.                 ,'undo_tablespace'
    1271.                 )
    1272. UNION ALL
    1273. SELECT NULL
    1274.         ,ksppinm name
    1275.         ,ksppstvl value
    1276. FROM x$ksppi a
    1277.         ,x$ksppcv b
    1278. WHERE a.indx = b.indx
    1279.         AND a.ksppinm IN (
    1280.                 '_undo_autotune'
    1281.                 ,'_highthreshold_undoretention'
    1282.                 ,'_undotbs_stepdown_pcent'
    1283.                 ,'_smu_debug_mode'
    1284.                 )
    1285. ORDER BY 1
    1286. /

    1287. host echo 'collect undo segment count info'
    1288. PROMPT ====undo segment count
    1289. SELECT r.instance_num inst
    1290.         ,r.OWNER
    1291.         ,r.tablespace_name
    1292.         ,r.STATUS
    1293.         ,count(r.segment_name) segcnt
    1294. FROM dba_rollback_segs r
    1295. GROUP BY r.instance_num
    1296.         ,r.OWNER
    1297.         ,r.tablespace_name
    1298.         ,r.STATUS
    1299. ORDER BY 1
    1300.         ,2
    1301.         ,4
    1302. /

    1303. host echo 'collect undo extent count info'
    1304. PROMPT ====undo extent count
    1305. SELECT u.tablespace_name
    1306.         ,u.STATUS
    1307.         ,round(sum(u.bytes / 1024 / 1024), 2) total_mb
    1308. FROM dba_undo_extents u
    1309. GROUP BY u.tablespace_name
    1310.         ,u.STATUS
    1311. ORDER BY 1
    1312.         ,2
    1313.         ,3
    1314. /

    1315. host echo 'collect undo extent usage details info'
    1316. PROMPT ====undo extent usage details
    1317. SELECT tablespace_name AS TABLESPACE
    1318.         ,segment_name
    1319.         ,nvl(sum(bytes), 0) AS ACTIVE_bytes
    1320.         ,00 unexp
    1321.         ,00 exp
    1322. FROM dba_undo_extents
    1323. WHERE STATUS = 'ACTIVE'
    1324. GROUP BY tablespace_name
    1325.         ,segment_name
    1326. UNION ALL
    1327. SELECT tablespace_name
    1328.         ,segment_name
    1329.         ,00 act
    1330.         ,nvl(sum(bytes), 0) AS UNEXPIRED_bytes
    1331.         ,00 exp
    1332. FROM dba_undo_extents
    1333. WHERE STATUS = 'UNEXPIRED'
    1334. GROUP BY tablespace_name
    1335.         ,segment_name
    1336. UNION ALL
    1337. SELECT tablespace_name
    1338.         ,segment_name
    1339.         ,00 act
    1340.         ,00 unexp
    1341.         ,nvl(sum(bytes), 0) AS EXPIRED_bytes
    1342. FROM dba_undo_extents
    1343. WHERE STATUS = 'EXPIRED'
    1344. GROUP BY tablespace_name
    1345.         ,segment_name
    1346. /

    1347. host echo 'collect undo stats info'
    1348. PROMPT ====undo stats
    1349. SELECT *
    1350. FROM v$undostat
    1351. /

    1352. host echo 'collect ASM Disk Groups info'
    1353. PROMPT ====ASM Disk Groups

    1354. CLEAR COLUMNS
    1355. CLEAR BREAKS
    1356. CLEAR COMPUTES

    1357. COLUMN group_name             FORMAT a25           HEAD 'Disk Group|Name'
    1358. COLUMN sector_size            FORMAT 99,999        HEAD 'Sector|Size'
    1359. COLUMN block_size             FORMAT 99,999        HEAD 'Block|Size'
    1360. COLUMN allocation_unit_size   FORMAT 999,999,999   HEAD 'Allocation|Unit Size'
    1361. COLUMN state                  FORMAT a11           HEAD 'State'
    1362. COLUMN type                   FORMAT a6            HEAD 'Type'
    1363. COLUMN total_mb               FORMAT 999,999,999   HEAD 'Total Size (MB)'
    1364. COLUMN used_mb                FORMAT 999,999,999   HEAD 'Used Size (MB)'
    1365. COLUMN pct_used               FORMAT 999.99        HEAD 'Pct. Used'

    1366. BREAK ON report ON disk_group_name SKIP 1

    1367. SELECT
    1368.     name                                     group_name
    1369.   , sector_size                              sector_size
    1370.   , block_size                               block_size
    1371.   , allocation_unit_size                     allocation_unit_size
    1372.   , state                                    state
    1373.   , type                                     type
    1374.   , total_mb                                 total_mb
    1375.   , (total_mb - free_mb)                     used_mb
    1376.   , ROUND((1- (free_mb / total_mb))*100, 2)  pct_used
    1377. FROM
    1378.     v$asm_diskgroup
    1379. WHERE
    1380.     total_mb != 0
    1381. ORDER BY
    1382.     name
    1383. /

    1384. host echo 'collect ASM Disks info'
    1385. PROMPT ====ASM Disks

    1386. CLEAR COLUMNS
    1387. CLEAR BREAKS
    1388. CLEAR COMPUTES

    1389. COLUMN disk_group_name        FORMAT a25           HEAD 'Disk Group Name'
    1390. COLUMN disk_file_path         FORMAT a20           HEAD 'Path'
    1391. COLUMN disk_file_name         FORMAT a20           HEAD 'File Name'
    1392. COLUMN disk_file_fail_group   FORMAT a20           HEAD 'Fail Group'
    1393. COLUMN total_mb               FORMAT 999,999,999   HEAD 'File Size (MB)'
    1394. COLUMN used_mb                FORMAT 999,999,999   HEAD 'Used Size (MB)'
    1395. COLUMN pct_used               FORMAT 999.99        HEAD 'Pct. Used'

    1396. SELECT
    1397.     NVL(a.name, '[CANDIDATE]')                       disk_group_name
    1398.   , b.path                                           disk_file_path
    1399.   , b.name                                           disk_file_name
    1400.   , b.failgroup                                      disk_file_fail_group
    1401.   , b.total_mb                                       total_mb
    1402.   , (b.total_mb - b.free_mb)                         used_mb
    1403.   , ROUND((1- (b.free_mb / b.total_mb))*100, 2)      pct_used
    1404. FROM
    1405.     v$asm_diskgroup a RIGHT OUTER JOIN v$asm_disk b USING (group_number)
    1406. ORDER BY
    1407.     a.name
    1408. /

    1409. host echo 'collect logon session in 7 days'
    1410. PROMPT ====logon session in 7 days
    1411. with sysstat as (
    1412. select  a.dbid
    1413.        ,a.instance_number
    1414.        ,a.snap_id
    1415.        ,b.begin_interval_time
    1416.        ,sum(decode(a.stat_name,'logons current',a.value,0))    logon_current
    1417.        ,sum(decode(a.stat_name,'logons cumulative',a.value,0)) logon_totals
    1418. from dba_hist_sysstat  a,
    1419.      dba_hist_snapshot b
    1420. where a.dbid=b.dbid
    1421. and   a.instance_number=b.instance_number
    1422. and   a.snap_id=b.snap_id
    1423. and   b.begin_interval_time >= trunc(sysdate-7)
    1424. and   b.begin_interval_time <= trunc(sysdate)
    1425. and   a.stat_name in ('logons current',
    1426.                     'logons cumulative')
    1427. group by a.dbid,a.instance_number,a.snap_id,b.begin_interval_time),
    1428. logoninfo as (
    1429. select  to_char(x.begin_interval_time,'MMDD_HH24MI')  SNAP_TIME
    1430.        ,sum(decode(x.instance_number,1,x.logon_current,0)) logon_current_1
    1431.        ,sum(decode(x.instance_number,1,x.logon_totals,0))  logon_totals_1
    1432.        ,sum(decode(x.instance_number,1,y.value,0))         logon_limit_1
    1433.        ,sum(decode(x.instance_number,2,x.logon_current,0)) logon_current_2
    1434.        ,sum(decode(x.instance_number,2,x.logon_totals,0))  logon_totals_2
    1435.        ,sum(decode(x.instance_number,2,y.value,0))         logon_limit_2
    1436. from sysstat            x,
    1437.      dba_hist_parameter y
    1438. where x.dbid=y.dbid
    1439. and   x.instance_number=y.instance_number
    1440. and   x.snap_id=y.snap_id
    1441. and   y.parameter_name='sessions'
    1442. group by to_char(x.begin_interval_time,'MMDD_HH24MI')
    1443. order by to_char(x.begin_interval_time,'MMDD_HH24MI'))
    1444. select snap_time,
    1445.        logon_current_1,
    1446.        logon_limit_1,
    1447.        logon_current_2,
    1448.        logon_limit_2
    1449. from (select snap_time
    1450.              ,logon_totals_1-lag(logon_totals_1) over (order by snap_time)   logon_delta_1
    1451.              ,logon_totals_2-lag(logon_totals_2) over (order by snap_time)   logon_delta_2
    1452.              ,logon_current_1                                                logon_current_1
    1453.              ,logon_current_2                                                logon_current_2
    1454.              ,logon_limit_1                                                  logon_limit_1
    1455.              ,logon_limit_2                                                  logon_limit_2
    1456.              ,rownum rn
    1457.       from logoninfo
    1458.       order by snap_time)
    1459. where rn >1
    1460. /

    1461. host echo 'collect non-default parameter info'        
    1462. PROMPT ====parameter Info

    1463. CLEAR COLUMNS BREAKS COMPUTES

    1464. COLUMN pname             FORMAT a45  HEADING 'Parameter Name'   
    1465. COLUMN value             FORMAT a80  HEADING 'Value'            
    1466. COLUMN isdefault         FORMAT a15  HEADING 'Is Default?'      
    1467. COLUMN issys_modifiable  FORMAT a15  HEADING 'Is Dynamic?'      

    1468. SELECT
    1469.     DECODE(   isdefault
    1470.             , 'FALSE'
    1471.             , SUBSTR(name,0,512)
    1472.             , SUBSTR(name,0,512) ) pname
    1473.   , DECODE(   isdefault
    1474.             , 'FALSE'
    1475.             , SUBSTR(value,0,512)
    1476.             , SUBSTR(value,0,512) ) value
    1477.   , DECODE(   isdefault
    1478.             , 'FALSE'
    1479.             , isdefault
    1480.             , isdefault ) isdefault
    1481.   , DECODE(   isdefault
    1482.             , 'FALSE'
    1483.             , issys_modifiable
    1484.             ,  issys_modifiable ) issys_modifiable
    1485. FROM
    1486.     v$parameter
    1487. WHERE
    1488. value is not null  and   
    1489.   isdefault='FALSE'
    1490.   order by 3,4
    1491. /

    1492. host echo 'collect top 3 cpu ela sql in etch SNAPSHOT'        
    1493. PROMPT ====top 3 cpu ela sql in etch SNAPSHOT
    1494. SELECT snap_id
    1495.         ,sql_id
    1496.         ,execs
    1497.         ,cput
    1498.         ,cpu_rank
    1499.         ,elat
    1500.         ,ela_rank
    1501. FROM (
    1502.         SELECT a.snap_id
    1503.                 ,a.sql_id
    1504.                 ,decode(sum(a.executions_delta), 0, 1, sum(a.executions_delta)) execs
    1505.                 ,sum(a.cpu_time_delta) cput
    1506.                 ,sum(sum(a.cpu_time_delta)) OVER (PARTITION BY a.snap_id) total_cput
    1507.                 ,dense_rank() OVER (
    1508.                         PARTITION BY a.snap_id ORDER BY sum(a.cpu_time_delta) DESC
    1509.                         ) cpu_rank
    1510.                 ,sum(a.elapsed_time_delta) elat
    1511.                 ,sum(sum(a.elapsed_time_delta)) OVER (PARTITION BY a.snap_id) total_elat
    1512.                 ,dense_rank() OVER (
    1513.                         PARTITION BY a.snap_id ORDER BY sum(a.elapsed_time_delta) DESC
    1514.                         ) ela_rank
    1515.         FROM dba_hist_sqlstat a
    1516.                 ,dba_hist_snapshot b
    1517.         WHERE a.snap_id = b.snap_id
    1518.                 AND b.begin_interval_time >= trunc(sysdate - 1)
    1519.                 AND b.begin_interval_time <= trunc(sysdate)
    1520.         GROUP BY a.snap_id
    1521.                 ,a.sql_id
    1522.         )
    1523. WHERE cpu_rank <= 3
    1524.         OR ela_rank <= 3
    1525. ORDER BY snap_id;

    1526. host echo 'collect sqlid with full table scan info'        
    1527. PROMPT ====sqlid with full table scan
    1528. SELECT snap_id
    1529.         ,sql_id
    1530.         ,sum(executions_delta) executions_count
    1531. FROM dba_hist_sqlstat
    1532. WHERE sql_id IN (
    1533.                 SELECT DISTINCT sql_id
    1534.                 FROM dba_hist_sql_plan
    1535.                 WHERE operation = 'TABLE ACCESS'
    1536.                         AND options = 'FULL'
    1537.                         AND OBJECT_NAME NOT LIKE '%$'
    1538.                         AND TIMESTAMP > trunc(sysdate - 1)
    1539.                 )
    1540. GROUP BY snap_id
    1541.         ,sql_id
    1542. ORDER BY snap_id
    1543.         ,sql_id
    1544. /

    1545. Rem host echo 'collect Init. Parameter(Instance-wide) info'        
    1546. Rem PROMPT ====Parameter(Instance-wide)
    1547. Rem
    1548. Rem SELECT p.inst_id
    1549. Rem         ,p.name
    1550. Rem         ,p.value
    1551. Rem         ,p.isdefault
    1552. Rem FROM gv$system_parameter p
    1553. Rem WHERE isdefault = 'FALSE'
    1554. Rem ORDER BY 1
    1555. Rem         ,2
    1556. Rem /
    1557. Rem
    1558. Rem host echo 'collect Init. Parameter(Spfile) info'        
    1559. Rem PROMPT ====Parameter(Spfile)
    1560. Rem
    1561. Rem SELECT s.sid || '.' || s.name name
    1562. Rem         ,s.value
    1563. Rem FROM gv$spparameter s
    1564. Rem WHERE s.isspecified = 'TRUE'
    1565. Rem /
    1566. Rem
    1567. Rem host echo 'collect Init. Parameter(all) info'        
    1568. Rem PROMPT ====Parameter(all)
    1569. Rem
    1570. Rem SELECT p.inst_id
    1571. Rem         ,p.name
    1572. Rem         ,p.value
    1573. Rem         ,p.isdefault
    1574. Rem FROM gv$system_parameter p
    1575. Rem ORDER BY 1
    1576. Rem         ,2
    1577. Rem         ,3
    1578. Rem /
    1579. Rem
    1580. Rem host echo 'collect Init. Parameter(underscore) info'        
    1581. Rem PROMPT ====Parameter(underscore)
    1582. Rem
    1583. Rem SELECT ksppinm name
    1584. Rem         ,ksppstvl value
    1585. Rem         ,a.ksppdesc description
    1586. Rem FROM x$ksppi a
    1587. Rem         ,x$ksppcv b
    1588. Rem WHERE a.indx = b.indx
    1589. Rem         AND a.ksppinm LIKE '\_%' ESCAPE '\'
    1590. Rem ORDER BY 1
    1591. Rem         ,2
    1592. Rem /
    1593.        
    1594. Rem host echo 'collect all parameter info'        
    1595. Rem PROMPT ====parameter all
    1596. Rem select
    1597. Rem     /*+ use_hash(x y) */
    1598. Rem     x.inst_id INST_ID
    1599. Rem   , kspftctxpn P_NUM
    1600. Rem   , ksppinm P_NAME
    1601. Rem   , ksppity P_TYPE
    1602. Rem   , kspftctxdvl P_VALUE
    1603. Rem   , kspftctxdf IS_DEFAULT
    1604. Rem   , decode(bitand(ksppiflg/256,1), 1,'TRUE'
    1605. Rem              ,'FALSE') ISSES_MODIFIABLE
    1606. Rem   , decode(bitand(ksppiflg/65536,3), 1,'IMMEDIATE', 2,'DEFERRED'
    1607. Rem              , 3,'IMMEDIATE'
    1608. Rem              ,'FALSE') ISSYS_MODIFIABLE
    1609. Rem   , decode(bitand(ksppiflg/524288,1), 1,'TRUE'
    1610. Rem              ,'FALSE') ISPDB_MODIFIABLE
    1611. Rem   , decode(bitand(ksppiflg,4), 4,'FALSE'
    1612. Rem              , decode(bitand(ksppiflg/65536,3)
    1613. Rem                         , 0, 'FALSE'
    1614. Rem                         , 'TRUE')) ISINSTANCE_MODIFIABLE
    1615. Rem   , decode(bitand(kspftctxvf,7), 1,'MODIFIED', 4,'SYSTEM_MOD'
    1616. Rem              ,'FALSE') ISMODIFIED
    1617. Rem   , decode(bitand(kspftctxvf,2), 2,'TRUE'
    1618. Rem              ,'FALSE') ISADJUSTED
    1619. Rem   , decode(bitand(ksppilrmflg/64, 1)
    1620. Rem              , 1, 'TRUE'
    1621. Rem              , 'FALSE') ISDEPRECATED
    1622. Rem   , decode(bitand(ksppilrmflg/268435456, 1)
    1623. Rem              , 1, 'TRUE'
    1624. Rem              , 'FALSE') ISBASIC
    1625. Rem   , ksppdesc DESCRIPTION
    1626. Rem   , kspftctxvn ORDINAL
    1627. Rem   , kspftctxct UPDATE_COMMENT
    1628. Rem   , y.con_id CON_ID
    1629. Rem from
    1630. Rem     x$ksppi   x
    1631. Rem   , x$ksppcv2 y
    1632. Rem where
    1633. Rem     (
    1634. Rem         (
    1635. Rem             x.indx+1
    1636. Rem         )
    1637. Rem         = kspftctxpn
    1638. Rem     )
    1639. Rem /

    1640. spool off
    1641. SET MARKUP HTML OFF
    1642. set termout on
    1643. PROMPT OK!  WellDone
    1644. PROMPT HealthCheck Log was written to &host_name._&instname._&time..xls
    1645. exit

    复制代码




    回复

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-5-17 17:15 , Processed in 0.055078 second(s), 22 queries , Gzip On.

    Powered by Discuz! X3.4

    © 2001-2023 Discuz! Team.

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