常用SQL語句5
DBA日常维护程序:
--FREE.SQL
--TO VERIFY FREE SPACE IN TABLESPACES?
--MINIMUM AMOUNT OF FREE SPACE?
--DOCUMENT YOUR THRESHOLDS:?
--=M??
SQL>SELECTTABLESPACE_NAME,SUM(BLOCKS) AS FREE_BLK,TRUNC(SUM(BYTES)/(1024*1024)) AS FREE_M,MAX(BYTES)/(1024) AS BIG_CHUNK_K, COUNT(*) AS NUM_CHUNKS FROM DBA_FREE_SPACE GROUP BY TABLESPACE_NAME;
1.SPACE.SQL
--SPACE.SQL
--TO CHECK FREE, PCT_FREE, AND ALLOCATED SPACE WITHIN A TABLESPACE
--11/24/98
SQL> COL TABLESPACE_NAME FORMAT A20
SQL>SELECT?TABLESPACE_NAME,LARGEST_FREE_CHUNK,NR_FREE_CHUNKS,SUM_ALLOC_BLOCKS,SUM_FREE_BLOCKS,TO_CHAR(100*SUM_FREE_BLOCKS/SUM_ALLOC_BLOCKS,?'09.99')||'%' AS PCT_FREE FROM (SELECT TABLESPACE_NAME,SUM(BLOCKS) AS SUM_ALLOC_BLOCKS FROM DBA_DATA_FILES GROUP BY TABLESPACE_NAME)
,(SELECT TABLESPACE_NAME AS?FS_TS_NAME,MAX(BLOCKS) AS LARGEST_FREE_CHUNK,COUNT(BLOCKS) AS NR_FREE_CHUNKS,SUM(BLOCKS) AS SUM_FREE_BLOCKS FROM DBA_FREE_SPACE GROUP BY TABLESPACE_NAME) WHERE TABLESPACE_NAME=FS_TS_NAME;
2.ANALYZE5PCT.SQL
--ANALYZE5PCT.SQL
--TO ANALYZE TABLES AND INDEXES QUICKLY,USING A 5% SAMPLE?SIZE
-- (DO NOT USE THIS SCRIPT IF YOU ARE PERFORMING THE OVERNIGHT
-- COLLECTION OF VOLUMETRIC DATA)
-- 11/30/98
BEGIN
DBMS_UTILITY.ANALYZE_SCHEMA ('&OWNER', 'ESTIMATE', NULL, 5) ;
END ;
/
3. NR_EXTENTS.SQL
-- NR_EXTENTS.SQL
-- TO FIND OUT ANY OBJECT REACHING
-- EXTENTS, AND MANUALLY UPGRADE IT TO ALLOW UNLIMITED
-- MAX_EXTENTS (THUS ONLY OBJECTS WE *EXPECT* TO BE BIG
-- ARE ALLOWED TO BECOME BIG)
-- 11/30/98
SELECT E.OWNER, E.SEGMENT_TYPE , E.SEGMENT_NAME , COUNT(*) AS NR_EXTENTS,S.MAX_EXTENTS, TO_CHAR(SUM(E.BYTES) / (1024 * 1024) , '999,999.90') AS MB FROM DBA_EXTENTS E,DBA_SEGMENTS S WHERE E.SEGMENT_NAME = S.SEGMENT_NAME GROUP BY E.OWNER, E.SEGMENT_TYPE,E.SEGMENT_NAME , S.MAX_EXTENTS HAVING COUNT(*) > &THRESHOLD OR ( ( S.MAX_EXTENTS - COUNT(*) ) &&THRESHOLD ) ORDER BY COUNT(*) DESC;
4. SPACEBOUND.SQL
-- SPACEBOUND.SQL
-- TO IDENTIFY SPACE-BOUND OBJECTS. IF ALL IS WELL, NO ROWS ARE RETURNED.
-- IF ANY SPACE-BOUND OBJECTS ARE FOUND, LOOK AT VALUE OF NEXT EXTENT
-- SIZE TO FIGURE OUT WHAT HAPPENED.
-- THEN USE COALESCE (ALTER TABLESPACE COALESCE .
-- LASTLY, ADD ANOTHER DATAFILE TO THE TABLESPACE IF NEEDED.
-- 11/30/98
SELECT A.TABLE_NAME,A.NEXT_EXTENT,A.TABLESPACE_NAME
FROM ALL_TABLES A,(SELECT TABLESPACE_NAME,MAX(BYTES) AS BIG_CHUNK
FROM DBA_FREE_SPACE GROUP BY TABLESPACE_NAME) F
WHERE F.TABLESPACE_NAME = A.TABLESPACE_NAME AND A.NEXT_EXTENT > F.BIG_CHUNK;
B. 每晚处理程序
1. MK_VOLFACT.SQL
-- MK_VOLFACT.SQL (ONLY RUN THIS ONCE TO SET IT UP; DO NOT RUN IT NIGHTLY!)
-- -- TABLE UTL_VOL_FACTS
CREATE TABLE UTL_VOL_FACTS(
TABLE_NAME VARCHAR2(30),
NUM_ROWS NUMBER,
MEAS_DT DATE )
TABLESPACE PLATAB
STORAGE(INITIAL 128K
NEXT 128K
PCTINCREASE 0
MINEXTENTS 1
MAXEXTENTS UNLIMITED)
-- PUBLIC SYNONYM
CREATE PUBLIC SYNONYM UTL_VOL_FACTS FOR &OWNER..UTL_VOL_FACTS
-- GRANTS FOR UTL_VOL_FACTS
GRANT SELECT ON UTL_VOL_FACTS TO PUBLIC
2. ANALYZE_COMP.SQL
--
-- ANALYZE_COMP.SQL
--
BEGIN
SYS.DBMS_UTILITY.ANALYZE_SCHEMA ( '&OWNER','COMPUTE');
END ;
3. POP_VOL.SQL
-- POP_VOL.SQL
INSERT INTO UTL_VOL_FACTS
SELECT TABLE_NAME
, NVL ( NUM_ROWS, 0) AS NUM_ROWS
, TRUNC ( LAST_ANALYZED ) AS MEAS_DT
FROM ALL_TABLES -- OR JUST USER_TABLES
WHERE OWNER IN ('&OWNER') -- OR A COMMA-SEPARATED LIST OF OWNERS
COMMIT
C. 每周处理程序
1. NEXTEXT.SQL
--
-- NEXTEXT.SQL
--
-- TO FIND TABLES THAT DON'T MATCH THE TABLESPACE DEFAULT FOR NEXT EXTENT.
-- THE IMPLICIT RULE HERE IS THAT EVERY TABLE IN A GIVEN TABLESPACE SHOULD
-- USE THE EXACT SAME VALUE FOR NEXT, WHICH SHOULD ALSO BE THE TABLESPACE'S
-- DEFAULT VALUE FOR NEXT.
--
-- THIS TELLS US WHAT THE SETTING FOR NEXT IS FOR THESE OBJECTS TODAY.
--
-- 11/30/98
SELECT SEGMENT_NAME, SEGMENT_TYPE, DS.NEXT_EXTENT AS ACTUAL_NEXT
, DT.TABLESPACE_NAME, DT.NEXT_EXTENT AS DEFAULT_NEXT
FROM DBA_TABLESPACES DT, DBA_SEGMENTS DS
WHERE DT.TABLESPACE_NAME = DS.TABLESPACE_NAME
AND DT.NEXT_EXTENT !=DS.NEXT_EXTENT
AND DS.OWNER = UPPER ( '&OWNER' )
ORDER BY TABLESPACE_NAME, SEGMENT_TYPE, SEGMENT_NAME
2. EXISTEXT.SQL
--
-- EXISTEXT.SQL
--
-- TO CHECK EXISTING EXTENTS
--
-- THIS TELLS US HOW MANY OF EACH OBJECT'S EXTENTS DIFFER IN SIZE FROM
-- THE TABLESPACE'S DEFAULT SIZE. IF THIS REPORT SHOWS ALOT OF DIFFERENT
-- SIZED EXTENTS, YOUR FREE SPACE IS LIKELY TO BECOME FRAGMENTED. IF SO,
-- THIS TABLESPACE IS A CANDIDATE FOR REORGANIZING.
--
-- 12/15/98
SELECT SEGMENT_NAME, SEGMENT_TYPE
, COUNT(*) AS NR_EXTS
, SUM ( DECODE ( DX.BYTES,DT.NEXT_EXTENT,0,1) ) AS NR_ILLSIZED_EXTS
, DT.TABLESPACE_NAME, DT.NEXT_EXTENT AS DFLT_EXT_SIZE
FROM DBA_TABLESPACES DT, DBA_EXTENTS DX
WHERE DT.TABLESPACE_NAME = DX.TABLESPACE_NAME
AND DX.OWNER = '&OWNER'
GROUP BY SEGMENT_NAME, SEGMENT_TYPE, DT.TABLESPACE_NAME, DT.NEXT_EXTENT
3. NO_PK.SQL
--
-- NO_PK.SQL
--
-- TO FIND TABLES WITHOUT PK CONSTRAINT
--
-- 11/2/98
SELECT TABLE_NAME
FROM ALL_TABLES
WHERE OWNER = '&OWNER'
MINUS
SELECT TABLE_NAME
FROM ALL_CONSTRAINTS
WHERE OWNER = '&&OWNER'
AND CONSTRAINT_TYPE = 'P'
4. DISPK.SQL
--
-- DISPK.SQL
--
-- TO FIND OUT WHICH PRIMARY KEYS ARE DISABLED
--
-- 11/30/98
SELECT OWNER, CONSTRAINT_NAME, TABLE_NAME, STATUS
FROM ALL_CONSTRAINTS
WHERE OWNER = '&OWNER' AND STATUS = 'DISABLED' AND CONSTRAINT_TYPE = 'P'
5. NONUPK.SQL
--
-- NONUPK.SQL
--
-- TO FIND TABLES WITH NONUNIQUE PK INDEXES. REQUIRES THAT PK NAMES
-- FOLLOW A NAMING CONVENTION. AN ALTERNATIVE QUERY FOLLOWS THAT
-- DOES NOT HAVE THIS REQUIREMENT, BUT RUNS MORE SLOWLY.
--
-- 11/2/98
SELECT INDEX_NAME, TABLE_NAME, UNIQUENESS
FROM ALL_INDEXES
WHERE INDEX_NAME LIKE '&PKNAME%'
AND OWNER = '&OWNER' AND UNIQUENESS = 'NONUNIQUE'
SELECT C.CONSTRAINT_NAME, I.TABLESPACE_NAME, I.UNIQUENESS
FROM ALL_CONSTRAINTS C , ALL_INDEXES I
WHERE C.OWNER = UPPER ( '&OWNER' ) AND I.UNIQUENESS = 'NONUNIQUE'
AND C.CONSTRAINT_TYPE = 'P' AND I.INDEX_NAME = C.CONSTRAINT_NAME
6. MKREBUILD_IDX.SQL
--
-- MKREBUILD_IDX.SQL
--
-- REBUILD INDEXES TO HAVE CORRECT STORAGE PARAMETERS
--
-- 11/2/98
SELECT 'ALTER INDEX ' || INDEX_NAME || ' REBUILD '
, 'TABLESPACE INDEXES STORAGE '
|| ' ( INITIAL 256 K NEXT 256 K PCTINCREASE 0 ) ; '
FROM ALL_INDEXES
WHERE ( TABLESPACE_NAME != 'INDEXES'
OR NEXT_EXTENT != ( 256 * 1024 )
)
AND OWNER = '&OWNER'
/
7. DATATYPE.SQL
--
-- DATATYPE.SQL
--
-- TO CHECK DATATYPE CONSISTENCY BETWEEN TWO ENVIRONMENTS
--
-- 11/30/98
SELECT
TABLE_NAME,
COLUMN_NAME,
DATA_TYPE,
DATA_LENGTH,
DATA_PRECISION,
DATA_SCALE,
NULLABLE
FROM ALL_TAB_COLUMNS -- FIRST ENVIRONMENT
WHERE OWNER = '&OWNER'
MINUS
SELECT
TABLE_NAME,
COLUMN_NAME,
DATA_TYPE,
DATA_LENGTH,
DATA_PRECISION,
DATA_SCALE,
NULLABLE
FROM ALL_TAB_COLUMNS@&MY_DB_LINK -- SECOND ENVIRONMENT
WHERE OWNER = '&OWNER2'
ORDER BY TABLE_NAME, COLUMN_NAME
8. OBJ_COORD.SQL
--
-- OBJ_COORD.SQL
--
-- TO FIND OUT ANY DIFFERENCE IN OBJECTS BETWEEN TWO INSTANCES
--
-- 12/08/98
SELECT OBJECT_NAME, OBJECT_TYPE
FROM USER_OBJECTS
MINUS
SELECT OBJECT_NAME, OBJECT_TYPE
FROM USER_OBJECTS@&MY_DB_LINK
show_space函数包用法:
CREATE OR REPLACE PROCEDURE SHOW_SPACE(P_SEGNAME IN VARCHAR2,
P_OWNER IN VARCHAR2 DEFAULT USER,
P_TYPE IN VARCHAR2 DEFAULT 'TABLE',
P_PARTITION IN VARCHAR2 DEFAULT NULL) AS
L_FREE_BLKS NUMBER;
L_TOTAL_BLOCKS NUMBER;
L_TOTAL_BYTES NUMBER;
L_UNUSED_BLOCKS NUMBER;
L_UNUSED_BYTES NUMBER;
L_LASTUSEDEXTFILEID NUMBER;
L_LASTUSEDEXTBLOCKID NUMBER;
L_LAST_USED_BLOCK NUMBER;
PROCEDURE P(P_LABEL IN VARCHAR2, P_NUM IN NUMBER) IS
BEGIN
DBMS_OUTPUT.PUT_LINE(RPAD(P_LABEL, 40, '.') || P_NUM);
END;
BEGIN
DBMS_SPACE.FREE_BLOCKS(SEGMENT_OWNER => P_OWNER,
SEGMENT_NAME => P_SEGNAME,
SEGMENT_TYPE => P_TYPE,
PARTITION_NAME => P_PARTITION,
FREELIST_GROUP_ID => 0,
FREE_BLKS => L_FREE_BLKS);
DBMS_SPACE.UNUSED_SPACE(SEGMENT_OWNER => P_OWNER,
SEGMENT_NAME => P_SEGNAME,
SEGMENT_TYPE => P_TYPE,
PARTITION_NAME => P_PARTITION,
TOTAL_BLOCKS => L_TOTAL_BLOCKS,
TOTAL_BYTES => L_TOTAL_BYTES,
UNUSED_BLOCKS => L_UNUSED_BLOCKS,
UNUSED_BYTES => L_UNUSED_BYTES,
LAST_USED_EXTENT_FILE_ID => L_LASTUSEDEXTFILEID,
LAST_USED_EXTENT_BLOCK_ID => L_LASTUSEDEXTBLOCKID,
LAST_USED_BLOCK => L_LAST_USED_BLOCK);
P('FREE BLOCKS', L_FREE_BLKS);
P('TOTAL BLOCKS', L_TOTAL_BLOCKS);
P('TOTAL BYTES', L_TOTAL_BYTES);
P('UNUSED BLOCKS', L_UNUSED_BLOCKS);
P('UNUSED BYTES', L_UNUSED_BYTES);
P('LAST USED EXT FILEID', L_LASTUSEDEXTFILEID);
P('LAST USED EXT BLOCKID', L_LASTUSEDEXTBLOCKID);
P('LAST USED BLOCK', L_LAST_USED_BLOCK);
END;
SQL> SET SERVEROUTPUT ON
SQL> EXECUTE SHOW_SPACE('DSF');
FREE BLOCKS.............................0
TOTAL BLOCKS............................128
TOTAL BYTES.............................1048576
UNUSED BLOCKS...........................127
UNUSED BYTES............................1040384
LAST USED EXT FILEID....................21
LAST USED EXT BLOCKID...................9
LAST USED BLOCK.........................1
PL/SQL PROCEDURE SUCCESSFULLY COMPLETED.
--FREE.SQL
--TO VERIFY FREE SPACE IN TABLESPACES?
--MINIMUM AMOUNT OF FREE SPACE?
--DOCUMENT YOUR THRESHOLDS:?
--=M??
SQL>SELECTTABLESPACE_NAME,SUM(BLOCKS) AS FREE_BLK,TRUNC(SUM(BYTES)/(1024*1024)) AS FREE_M,MAX(BYTES)/(1024) AS BIG_CHUNK_K, COUNT(*) AS NUM_CHUNKS FROM DBA_FREE_SPACE GROUP BY TABLESPACE_NAME;
1.SPACE.SQL
--SPACE.SQL
--TO CHECK FREE, PCT_FREE, AND ALLOCATED SPACE WITHIN A TABLESPACE
--
SQL> COL TABLESPACE_NAME FORMAT A20
SQL>SELECT?TABLESPACE_NAME,LARGEST_FREE_CHUNK,NR_FREE_CHUNKS,SUM_ALLOC_BLOCKS,SUM_FREE_BLOCKS,TO_CHAR(100*SUM_FREE_BLOCKS/SUM_ALLOC_BLOCKS,?'09.99')||'%' AS PCT_FREE FROM (SELECT TABLESPACE_NAME,SUM(BLOCKS) AS SUM_ALLOC_BLOCKS FROM DBA_DATA_FILES GROUP BY TABLESPACE_NAME)
,(SELECT TABLESPACE_NAME AS?FS_TS_NAME,MAX(BLOCKS) AS LARGEST_FREE_CHUNK,COUNT(BLOCKS) AS NR_FREE_CHUNKS,SUM(BLOCKS) AS SUM_FREE_BLOCKS FROM DBA_FREE_SPACE GROUP BY TABLESPACE_NAME) WHERE TABLESPACE_NAME=FS_TS_NAME;
2.ANALYZE5PCT.SQL
--ANALYZE5PCT.SQL
--TO ANALYZE TABLES AND INDEXES QUICKLY,USING A 5% SAMPLE?SIZE
-- (DO NOT USE THIS SCRIPT IF YOU ARE PERFORMING THE OVERNIGHT
-- COLLECTION OF VOLUMETRIC DATA)
-- 11/30/98
BEGIN
DBMS_UTILITY.ANALYZE_SCHEMA ('&OWNER', 'ESTIMATE', NULL, 5) ;
END ;
/
3. NR_EXTENTS.SQL
-- NR_EXTENTS.SQL
-- TO FIND OUT ANY OBJECT REACHING
-- EXTENTS, AND MANUALLY UPGRADE IT TO ALLOW UNLIMITED
-- MAX_EXTENTS (THUS ONLY OBJECTS WE *EXPECT* TO BE BIG
-- ARE ALLOWED TO BECOME BIG)
-- 11/30/98
SELECT E.OWNER, E.SEGMENT_TYPE , E.SEGMENT_NAME , COUNT(*) AS NR_EXTENTS,S.MAX_EXTENTS, TO_CHAR(SUM(E.BYTES) / (1024 * 1024) , '999,999.90') AS MB FROM DBA_EXTENTS E,DBA_SEGMENTS S WHERE E.SEGMENT_NAME = S.SEGMENT_NAME GROUP BY E.OWNER, E.SEGMENT_TYPE,E.SEGMENT_NAME , S.MAX_EXTENTS HAVING COUNT(*) > &THRESHOLD OR ( ( S.MAX_EXTENTS - COUNT(*) ) &&THRESHOLD ) ORDER BY COUNT(*) DESC;
4. SPACEBOUND.SQL
-- SPACEBOUND.SQL
-- TO IDENTIFY SPACE-BOUND OBJECTS. IF ALL IS WELL, NO ROWS ARE RETURNED.
-- IF ANY SPACE-BOUND OBJECTS ARE FOUND, LOOK AT VALUE OF NEXT EXTENT
-- SIZE TO FIGURE OUT WHAT HAPPENED.
-- THEN USE COALESCE (ALTER TABLESPACE COALESCE .
-- LASTLY, ADD ANOTHER DATAFILE TO THE TABLESPACE IF NEEDED.
-- 11/30/98
SELECT A.TABLE_NAME,A.NEXT_EXTENT,A.TABLESPACE_NAME
FROM ALL_TABLES A,(SELECT TABLESPACE_NAME,MAX(BYTES) AS BIG_CHUNK
FROM DBA_FREE_SPACE GROUP BY TABLESPACE_NAME) F
WHERE F.TABLESPACE_NAME = A.TABLESPACE_NAME AND A.NEXT_EXTENT > F.BIG_CHUNK;
B. 每晚处理程序
1. MK_VOLFACT.SQL
-- MK_VOLFACT.SQL (ONLY RUN THIS ONCE TO SET IT UP; DO NOT RUN IT NIGHTLY!)
-- -- TABLE UTL_VOL_FACTS
CREATE TABLE UTL_VOL_FACTS(
TABLE_NAME VARCHAR2(30),
NUM_ROWS NUMBER,
MEAS_DT DATE )
TABLESPACE PLATAB
STORAGE(INITIAL 128K
NEXT 128K
PCTINCREASE 0
MINEXTENTS 1
MAXEXTENTS UNLIMITED)
-- PUBLIC SYNONYM
CREATE PUBLIC SYNONYM UTL_VOL_FACTS FOR &OWNER..UTL_VOL_FACTS
-- GRANTS FOR UTL_VOL_FACTS
GRANT SELECT ON UTL_VOL_FACTS TO PUBLIC
2. ANALYZE_COMP.SQL
--
-- ANALYZE_COMP.SQL
--
BEGIN
SYS.DBMS_UTILITY.ANALYZE_SCHEMA ( '&OWNER','COMPUTE');
END ;
3. POP_VOL.SQL
-- POP_VOL.SQL
INSERT INTO UTL_VOL_FACTS
SELECT TABLE_NAME
, NVL ( NUM_ROWS, 0) AS NUM_ROWS
, TRUNC ( LAST_ANALYZED ) AS MEAS_DT
FROM ALL_TABLES -- OR JUST USER_TABLES
WHERE OWNER IN ('&OWNER') -- OR A COMMA-SEPARATED LIST OF OWNERS
COMMIT
C. 每周处理程序
1. NEXTEXT.SQL
--
-- NEXTEXT.SQL
--
-- TO FIND TABLES THAT DON'T MATCH THE TABLESPACE DEFAULT FOR NEXT EXTENT.
-- THE IMPLICIT RULE HERE IS THAT EVERY TABLE IN A GIVEN TABLESPACE SHOULD
-- USE THE EXACT SAME VALUE FOR NEXT, WHICH SHOULD ALSO BE THE TABLESPACE'S
-- DEFAULT VALUE FOR NEXT.
--
-- THIS TELLS US WHAT THE SETTING FOR NEXT IS FOR THESE OBJECTS TODAY.
--
-- 11/30/98
SELECT SEGMENT_NAME, SEGMENT_TYPE, DS.NEXT_EXTENT AS ACTUAL_NEXT
, DT.TABLESPACE_NAME, DT.NEXT_EXTENT AS DEFAULT_NEXT
FROM DBA_TABLESPACES DT, DBA_SEGMENTS DS
WHERE DT.TABLESPACE_NAME = DS.TABLESPACE_NAME
AND DT.NEXT_EXTENT !=DS.NEXT_EXTENT
AND DS.OWNER = UPPER ( '&OWNER' )
ORDER BY TABLESPACE_NAME, SEGMENT_TYPE, SEGMENT_NAME
2. EXISTEXT.SQL
--
-- EXISTEXT.SQL
--
-- TO CHECK EXISTING EXTENTS
--
-- THIS TELLS US HOW MANY OF EACH OBJECT'S EXTENTS DIFFER IN SIZE FROM
-- THE TABLESPACE'S DEFAULT SIZE. IF THIS REPORT SHOWS A
-- SIZED EXTENTS, YOUR FREE SPACE IS LIKELY TO BECOME FRAGMENTED. IF SO,
-- THIS TABLESPACE IS A CANDIDATE FOR REORGANIZING.
--
-- 12/15/98
SELECT SEGMENT_NAME, SEGMENT_TYPE
, COUNT(*) AS NR_EXTS
, SUM ( DECODE ( DX.BYTES,DT.NEXT_EXTENT,0,1) ) AS NR_ILLSIZED_EXTS
, DT.TABLESPACE_NAME, DT.NEXT_EXTENT AS DFLT_EXT_SIZE
FROM DBA_TABLESPACES DT, DBA_EXTENTS DX
WHERE DT.TABLESPACE_NAME = DX.TABLESPACE_NAME
AND DX.OWNER = '&OWNER'
GROUP BY SEGMENT_NAME, SEGMENT_TYPE, DT.TABLESPACE_NAME, DT.NEXT_EXTENT
3. NO_PK.SQL
--
-- NO_PK.SQL
--
-- TO FIND TABLES WITHOUT PK CONSTRAINT
--
-- 11/2/98
SELECT TABLE_NAME
FROM ALL_TABLES
WHERE OWNER = '&OWNER'
MINUS
SELECT TABLE_NAME
FROM ALL_CONSTRAINTS
WHERE OWNER = '&&OWNER'
AND CONSTRAINT_TYPE = 'P'
4. DISPK.SQL
--
-- DISPK.SQL
--
-- TO FIND OUT WHICH PRIMARY KEYS ARE DISABLED
--
-- 11/30/98
SELECT OWNER, CONSTRAINT_NAME, TABLE_NAME, STATUS
FROM ALL_CONSTRAINTS
WHERE OWNER = '&OWNER' AND STATUS = 'DISABLED' AND CONSTRAINT_TYPE = 'P'
5. NONUPK.SQL
--
-- NONUPK.SQL
--
-- TO FIND TABLES WITH NONUNIQUE PK INDEXES. REQUIRES THAT PK NAMES
-- FOLLOW A NAMING CONVENTION. AN ALTERNATIVE QUERY FOLLOWS THAT
-- DOES NOT HAVE THIS REQUIREMENT, BUT RUNS MORE SLOWLY.
--
-- 11/2/98
SELECT INDEX_NAME, TABLE_NAME, UNIQUENESS
FROM ALL_INDEXES
WHERE INDEX_NAME LIKE '&PKNAME%'
AND OWNER = '&OWNER' AND UNIQUENESS = 'NONUNIQUE'
SELECT C.CONSTRAINT_NAME, I.TABLESPACE_NAME, I.UNIQUENESS
FROM ALL_CONSTRAINTS C , ALL_INDEXES I
WHERE C.OWNER = UPPER ( '&OWNER' ) AND I.UNIQUENESS = 'NONUNIQUE'
AND C.CONSTRAINT_TYPE = 'P' AND I.INDEX_NAME = C.CONSTRAINT_NAME
6. MKREBUILD_IDX.SQL
--
-- MKREBUILD_IDX.SQL
--
-- REBUILD INDEXES TO HAVE CORRECT STORAGE PARAMETERS
--
-- 11/2/98
SELECT 'ALTER INDEX ' || INDEX_NAME || ' REBUILD '
, 'TABLESPACE INDEXES STORAGE '
|| ' ( INITIAL 256 K NEXT 256 K PCTINCREASE 0 ) ; '
FROM ALL_INDEXES
WHERE ( TABLESPACE_NAME != 'INDEXES'
OR NEXT_EXTENT != ( 256 * 1024 )
)
AND OWNER = '&OWNER'
/
7. DATATYPE.SQL
--
-- DATATYPE.SQL
--
-- TO CHECK DATATYPE CONSISTENCY BETWEEN TWO ENVIRONMENTS
--
-- 11/30/98
SELECT
TABLE_NAME,
COLUMN_NAME,
DATA_TYPE,
DATA_LENGTH,
DATA_PRECISION,
DATA_SCALE,
NULLABLE
FROM ALL_TAB_COLUMNS -- FIRST ENVIRONMENT
WHERE OWNER = '&OWNER'
MINUS
SELECT
TABLE_NAME,
COLUMN_NAME,
DATA_TYPE,
DATA_LENGTH,
DATA_PRECISION,
DATA_SCALE,
NULLABLE
FROM ALL_TAB_COLUMNS@&MY_DB_LINK -- SECOND ENVIRONMENT
WHERE OWNER = '&OWNER2'
ORDER BY TABLE_NAME, COLUMN_NAME
8. OBJ_COORD.SQL
--
-- OBJ_COORD.SQL
--
-- TO FIND OUT ANY DIFFERENCE IN OBJECTS BETWEEN TWO INSTANCES
--
-- 12/08/98
SELECT OBJECT_NAME, OBJECT_TYPE
FROM USER_OBJECTS
MINUS
SELECT OBJECT_NAME, OBJECT_TYPE
FROM USER_OBJECTS@&MY_DB_LINK
show_space函数包用法:
CREATE OR REPLACE PROCEDURE SHOW_SPACE(P_SEGNAME IN VARCHAR2,
P_OWNER IN VARCHAR2 DEFAULT USER,
P_TYPE IN VARCHAR2 DEFAULT 'TABLE',
P_PARTITION IN VARCHAR2 DEFAULT NULL) AS
L_FREE_BLKS NUMBER;
L_TOTAL_BLOCKS NUMBER;
L_TOTAL_BYTES NUMBER;
L_UNUSED_BLOCKS NUMBER;
L_UNUSED_BYTES NUMBER;
L_LASTUSEDEXTFILEID NUMBER;
L_LASTUSEDEXTBLOCKID NUMBER;
L_LAST_USED_BLOCK NUMBER;
PROCEDURE P(P_LABEL IN VARCHAR2, P_NUM IN NUMBER) IS
BEGIN
DBMS_OUTPUT.PUT_LINE(RPAD(P_LABEL, 40, '.') || P_NUM);
END;
BEGIN
DBMS_SPACE.FREE_BLOCKS(SEGMENT_OWNER => P_OWNER,
SEGMENT_NAME => P_SEGNAME,
SEGMENT_TYPE => P_TYPE,
PARTITION_NAME => P_PARTITION,
FREELIST_GROUP_ID => 0,
FREE_BLKS => L_FREE_BLKS);
DBMS_SPACE.UNUSED_SPACE(SEGMENT_OWNER => P_OWNER,
SEGMENT_NAME => P_SEGNAME,
SEGMENT_TYPE => P_TYPE,
PARTITION_NAME => P_PARTITION,
TOTAL_BLOCKS => L_TOTAL_BLOCKS,
TOTAL_BYTES => L_TOTAL_BYTES,
UNUSED_BLOCKS => L_UNUSED_BLOCKS,
UNUSED_BYTES => L_UNUSED_BYTES,
LAST_USED_EXTENT_FILE_ID => L_LASTUSEDEXTFILEID,
LAST_USED_EXTENT_BLOCK_ID => L_LASTUSEDEXTBLOCKID,
LAST_USED_BLOCK => L_LAST_USED_BLOCK);
P('FREE BLOCKS', L_FREE_BLKS);
P('TOTAL BLOCKS', L_TOTAL_BLOCKS);
P('TOTAL BYTES', L_TOTAL_BYTES);
P('UNUSED BLOCKS', L_UNUSED_BLOCKS);
P('UNUSED BYTES', L_UNUSED_BYTES);
P('LAST USED EXT FILEID', L_LASTUSEDEXTFILEID);
P('LAST USED EXT BLOCKID', L_LASTUSEDEXTBLOCKID);
P('LAST USED BLOCK', L_LAST_USED_BLOCK);
END;
SQL> SET SERVEROUTPUT ON
SQL> EXECUTE SHOW_SPACE('DSF');
FREE BLOCKS.............................0
TOTAL BLOCKS............................128
TOTAL BYTES.............................1048576
UNUSED BLOCKS...........................127
UNUSED BYTES............................1040384
LAST USED EXT FILEID....................21
LAST USED EXT BLOCKID...................9
LAST USED BLOCK.........................1
PL/SQL PROCEDURE SUCCESSFULLY COMPLETED.
人生有三宝:终身运动,终身学习,终身反醒.吸收新知,提高效率,懂得相处,成就自己,也成就他人,创造最高价值。