表領域(非拡張)の使用率を識別し、データファイルの追加スクリプトを自動的に生成
6374 ワード
ルールは、以下のルールに従って、自分の使用に適したスクリプトに調整できます.
識別表領域(非拡張)使用率>=90%であり、残りの利用可能空間<=100000 Mである.
データファイル名のうちまたは/以前の部分をデータファイルパスとして識別する(WindowsとLinuxを区別する);
接尾辞名は認識するが、追加使用は'.dbf',規範;
表領域に対応するデータファイル番号の最大番号を識別し、「データファイルパス」+「表領域名」+「既存データファイル名数値最大番号+1」+「.dbf」の名前で新しいファイルを追加します.会社の要求によって、新しくデータファイル1 gを加えて24 gに増加した.
2021.07.07更新
識別表領域(非拡張)使用率>=90%であり、残りの利用可能空間<=100000 Mである.
データファイル名のうちまたは/以前の部分をデータファイルパスとして識別する(WindowsとLinuxを区別する);
接尾辞名は認識するが、追加使用は'.dbf',規範;
表領域に対応するデータファイル番号の最大番号を識別し、「データファイルパス」+「表領域名」+「既存データファイル名数値最大番号+1」+「.dbf」の名前で新しいファイルを追加します.会社の要求によって、新しくデータファイル1 gを加えて24 gに増加した.
SET LINES 120 PAGESIZE 1000
col commend for a200;
WITH SUB_FILE AS
(SELECT distinct TABLESPACE_NAME AS TBS_NAME,
FILE_NAME,
regexp_substr(FILE_NAME,'^.*[\\|\/]') AS PREFIX,
-- 1 '.' SUFFIX
SUBSTR(FILE_NAME, INSTR(FILE_NAME, '.', -1)) AS SUFFIX,
-- '.'( ) 3 , '01', FN
TO_NUMBER(NVL(REGEXP_SUBSTR(FILE_NAME, '[0-9]+', DECODE(INSTR(FILE_NAME, '.', -1), 0, LENGTH(FILE_NAME) - 3, INSTR(FILE_NAME, '.', -1)) - 3, 1), 01)) AS FN
FROM (SELECT TABLESPACE_NAME,
-- FILE_NAME '.' , 00.dbf ,
DECODE(INSTR(FILE_NAME, '.', -1), 0, FILE_NAME || '00.dbf', FILE_NAME) AS FILE_NAME
FROM DBA_DATA_FILES DDF
WHERE TABLESPACE_NAME IN
-- ,
(SELECT TABLESPACE_NAME FROM DBA_TABLESPACES WHERE BIGFILE = 'NO')))
SELECT 'ALTER TABLESPACE '||SFL.TBS_NAME||' ADD DATAFILE '''||SFL.PREFIX||SFL.TBS_NAME||(TO_CHAR(SFL.FN + 1,'FM9900'))||'.dbf'' SIZE 1M AUTOEXTEND ON;'||chr(10)||
'ALTER DATABASE DATAFILE ''' || SFL.PREFIX || SFL.TBS_NAME||(TO_CHAR(SFL.FN + 1, 'FM9900'))|| '.dbf'' RESIZE 1G;' ||chr(10)||
'ALTER DATABASE DATAFILE ''' || SFL.PREFIX || SFL.TBS_NAME||(TO_CHAR(SFL.FN + 1, 'FM9900'))|| '.dbf'' RESIZE 2G;' ||chr(10)||
'ALTER DATABASE DATAFILE ''' || SFL.PREFIX || SFL.TBS_NAME||(TO_CHAR(SFL.FN + 1, 'FM9900'))|| '.dbf'' RESIZE 3G;' ||chr(10)||
'ALTER DATABASE DATAFILE ''' || SFL.PREFIX || SFL.TBS_NAME||(TO_CHAR(SFL.FN + 1, 'FM9900'))|| '.dbf'' RESIZE 4G;' ||chr(10)||
'ALTER DATABASE DATAFILE ''' || SFL.PREFIX || SFL.TBS_NAME||(TO_CHAR(SFL.FN + 1, 'FM9900'))|| '.dbf'' RESIZE 5G;' ||chr(10)||
'ALTER DATABASE DATAFILE ''' || SFL.PREFIX || SFL.TBS_NAME||(TO_CHAR(SFL.FN + 1, 'FM9900'))|| '.dbf'' RESIZE 6G;' ||chr(10)||
'ALTER DATABASE DATAFILE ''' || SFL.PREFIX || SFL.TBS_NAME||(TO_CHAR(SFL.FN + 1, 'FM9900'))|| '.dbf'' RESIZE 7G;' ||chr(10)||
'ALTER DATABASE DATAFILE ''' || SFL.PREFIX || SFL.TBS_NAME||(TO_CHAR(SFL.FN + 1, 'FM9900'))|| '.dbf'' RESIZE 8G;' ||chr(10)||
'ALTER DATABASE DATAFILE ''' || SFL.PREFIX || SFL.TBS_NAME||(TO_CHAR(SFL.FN + 1, 'FM9900'))|| '.dbf'' RESIZE 9G;' ||chr(10)||
'ALTER DATABASE DATAFILE ''' || SFL.PREFIX || SFL.TBS_NAME||(TO_CHAR(SFL.FN + 1, 'FM9900'))|| '.dbf'' RESIZE 10G;' ||chr(10)||
'ALTER DATABASE DATAFILE ''' || SFL.PREFIX || SFL.TBS_NAME||(TO_CHAR(SFL.FN + 1, 'FM9900'))|| '.dbf'' RESIZE 11G;' ||chr(10)||
'ALTER DATABASE DATAFILE ''' || SFL.PREFIX || SFL.TBS_NAME||(TO_CHAR(SFL.FN + 1, 'FM9900'))|| '.dbf'' RESIZE 12G;' ||chr(10)||
'ALTER DATABASE DATAFILE ''' || SFL.PREFIX || SFL.TBS_NAME||(TO_CHAR(SFL.FN + 1, 'FM9900'))|| '.dbf'' RESIZE 13G;' ||chr(10)||
'ALTER DATABASE DATAFILE ''' || SFL.PREFIX || SFL.TBS_NAME||(TO_CHAR(SFL.FN + 1, 'FM9900'))|| '.dbf'' RESIZE 14G;' ||chr(10)||
'ALTER DATABASE DATAFILE ''' || SFL.PREFIX || SFL.TBS_NAME||(TO_CHAR(SFL.FN + 1, 'FM9900'))|| '.dbf'' RESIZE 15G;' ||chr(10)||
'ALTER DATABASE DATAFILE ''' || SFL.PREFIX || SFL.TBS_NAME||(TO_CHAR(SFL.FN + 1, 'FM9900'))|| '.dbf'' RESIZE 16G;' ||chr(10)||
'ALTER DATABASE DATAFILE ''' || SFL.PREFIX || SFL.TBS_NAME||(TO_CHAR(SFL.FN + 1, 'FM9900'))|| '.dbf'' RESIZE 17G;' ||chr(10)||
'ALTER DATABASE DATAFILE ''' || SFL.PREFIX || SFL.TBS_NAME||(TO_CHAR(SFL.FN + 1, 'FM9900'))|| '.dbf'' RESIZE 18G;' ||chr(10)||
'ALTER DATABASE DATAFILE ''' || SFL.PREFIX || SFL.TBS_NAME||(TO_CHAR(SFL.FN + 1, 'FM9900'))|| '.dbf'' RESIZE 19G;' ||chr(10)||
'ALTER DATABASE DATAFILE ''' || SFL.PREFIX || SFL.TBS_NAME||(TO_CHAR(SFL.FN + 1, 'FM9900'))|| '.dbf'' RESIZE 20G;' ||chr(10)||
'ALTER DATABASE DATAFILE ''' || SFL.PREFIX || SFL.TBS_NAME||(TO_CHAR(SFL.FN + 1, 'FM9900'))|| '.dbf'' RESIZE 21G;' ||chr(10)||
'ALTER DATABASE DATAFILE ''' || SFL.PREFIX || SFL.TBS_NAME||(TO_CHAR(SFL.FN + 1, 'FM9900'))|| '.dbf'' RESIZE 22G;' ||chr(10)||
'ALTER DATABASE DATAFILE ''' || SFL.PREFIX || SFL.TBS_NAME||(TO_CHAR(SFL.FN + 1, 'FM9900'))|| '.dbf'' RESIZE 23G;' ||chr(10)||
'ALTER DATABASE DATAFILE ''' || SFL.PREFIX || SFL.TBS_NAME||(TO_CHAR(SFL.FN + 1, 'FM9900'))|| '.dbf'' RESIZE 24G;' AS COMMEND
FROM SUB_FILE SFL
WHERE (SFL.TBS_NAME, SFL.FN) IN
(SELECT SF1.TBS_NAME, MAX(SF1.FN) FROM SUB_FILE SF1 GROUP BY SF1.TBS_NAME)
AND SFL.TBS_NAME IN
(SELECT D.TABLESPACE_NAME FROM
(SELECT TABLESPACE_NAME, ROUND(SUM(BYTES) / (1024 * 1024), 2) SPACE FROM DBA_DATA_FILES GROUP BY TABLESPACE_NAME) D,
(SELECT TABLESPACE_NAME, ROUND(SUM(BYTES) / (1024 * 1024), 2) FREE_SPACE FROM DBA_FREE_SPACE GROUP BY TABLESPACE_NAME) F
WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME(+)
AND ROUND((1 - NVL(F.FREE_SPACE, 0) / D.SPACE) * 100, 2) >= 90
AND F.FREE_SPACE <= 100000);
2021.07.07更新