取得所有含分区的表对应的表空间
来源:互联网 发布:临沂有淘宝交流 编辑:程序博客网 时间:2024/04/30 06:08
--按有表分区的表自动生成表空间处理语句
SELECT 'PROMPT 删除表空间(' || PARTITION_NAME || ')
DROP TABLESPACE ' || PARTITION_NAME ||
' INCLUDING CONTENTS AND DATAFILES;',
'CREATE TABLESPACE ' || PARTITION_NAME || '
DATAFILE ''E:\ORADATA\GISAP\' || PARTITION_NAME ||
'.DBF'' SIZE 8M
AUTOEXTEND ON NEXT 8M MAXSIZE UNLIMITED
LOGGING
ONLINE
PERMANENT
EXTENT MANAGEMENT LOCAL AUTOALLOCATE
SEGMENT SPACE MANAGEMENT AUTO;',
'ALTER USER AGGPS QUOTA UNLIMITED ON ' || PARTITION_NAME || ';'
FROM (SELECT DISTINCT T.TABLE_NAME,
REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(T.TABLE_NAME, 'T_'),
'_'),
'UNIT'),
'PONSESTATUS'),
'UNI') AS PARTITION_NAME
FROM USER_TAB_PARTITIONS T
WHERE T.TABLE_NAME NOT LIKE '%BIN%'
ORDER BY T.TABLE_NAME)
--取得所有含分区的表对应的表空间
SELECT DISTINCT T.TABLE_NAME,
REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(T.TABLE_NAME, 'T_'),
'_'),
'UNIT'),
'PONSESTATUS'),
'UNI') AS PARTITION_NAME
FROM USER_TAB_PARTITIONS T
WHERE T.TABLE_NAME NOT LIKE '%BIN%'
ORDER BY T.TABLE_NAME
--动态处理分区
CREATE OR REPLACE PROCEDURE P_MAINTENANCE_PARTITION_BYWSQ
--
--编制:WSQ
--功能:指定维护分区。即自动删除过时分区,并为分区表新增下一个月的分区 --
--数据处理机制:所有数据保留一年,一年以后的数据将会被删除,所有表每天一个分区
--
IS
L_SQL VARCHAR2(2000);
L_BEGIN_DATE DATE;
L_END_DATE DATE;
L_BEGIN_TIME DATE;
BEGIN
L_BEGIN_DATE := TRUNC(LAST_DAY(SYSDATE)) + 1; --下个月第一天
L_END_DATE := LAST_DAY(L_BEGIN_DATE); --下个月最后一天
FOR V IN (SELECT DISTINCT T.TABLE_NAME,
REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(T.TABLE_NAME,
'T_'),
'_'),
'UNIT'),
'PONSESTATUS'),
'UNI') AS PARTITION_NAME
FROM USER_TAB_PARTITIONS T
WHERE T.TABLE_NAME NOT LIKE '%BIN%'
ORDER BY T.TABLE_NAME) LOOP
--对 V.TABLE_NAME 指定表名进行分区维护部分开始--
--为 V.TABLE_NAME 增加下一个月分区,每天一个分区
L_BEGIN_TIME := L_BEGIN_DATE;
LOOP
EXIT WHEN(L_BEGIN_TIME > L_END_DATE);
BEGIN
L_SQL := 'ALTER TABLE ' || V.TABLE_NAME ||
' ADD PARTITION P_TBL_' || V.PARTITION_NAME || '_' ||
TO_CHAR(L_BEGIN_TIME, 'YYYYMMDD') ||
' VALUES LESS THAN (
TO_DATE(' || '''' ||
TO_CHAR(L_BEGIN_TIME, 'YYYY-MM-DD') || '''' ||
',''YYYY-MM-DD'')) TABLESPACE ' || V.PARTITION_NAME || '';
L_BEGIN_TIME := L_BEGIN_TIME + 1;
EXECUTE IMMEDIATE L_SQL;
EXCEPTION
WHEN OTHERS THEN
INSERT INTO T_SQL_DEBUG_LOG
(SQL_DEBUG_LOG_ID, SQL_DEBUG_LOG, REMARKS, STAMP)
VALUES
(SNT_SQL_DEBUG_LOG.NEXTVAL,
L_SQL,
'ADD PARTITION P_TBL_' || V.PARTITION_NAME || '分区错误',
SYSDATE);
COMMIT;
L_BEGIN_TIME := L_BEGIN_TIME + 1;
END;
END LOOP;
--清理过时数据,此处设置保留十二个月
FOR VV IN (SELECT TABLE_NAME, PARTITION_NAME
FROM USER_TAB_PARTITIONS
WHERE TO_DATE(SUBSTR(PARTITION_NAME, -8), 'YYYY-MM-DD') <
ADD_MONTHS(TRUNC(SYSDATE, 'MONTH'), -12)
AND TABLE_NAME = V.TABLE_NAME) LOOP
BEGIN
--就算要删除的分区不在,程序还是可以继续执行
L_SQL := 'ALTER TABLE ' || V.TABLE_NAME || ' DROP PARTITION ' ||
VV.PARTITION_NAME;
EXECUTE IMMEDIATE L_SQL;
EXCEPTION
WHEN OTHERS THEN
BEGIN
INSERT INTO T_SQL_DEBUG_LOG
(SQL_DEBUG_LOG_ID, SQL_DEBUG_LOG, REMARKS, STAMP)
VALUES
(SNT_SQL_DEBUG_LOG.NEXTVAL,
L_SQL,
'删除 ' || VV.PARTITION_NAME || '分区错误',
SYSDATE);
COMMIT;
NULL;
END;
END;
END LOOP;
--对 V.TABLE_NAME 进行分区维护部分结束--
END LOOP;
END P_MAINTENANCE_PARTITION_BYWSQ;
- 取得所有含分区的表对应的表空间
- 根据tablename取得对应的所有数据
- 取得單個資料庫下所有表的信息
- 取得数据库某表的所有行数
- oracle删除表空间中一用户对应的所有数据
- oracle删除表空间中一用户及其对应的所有数据
- Oracle中查询当前数据库中的所有表空间和对应的数据文件语句命令
- 表空间和表分区的理解
- 查看表空间对应的数据文件
- 查表空间对应的数据文件
- 查临时表空间对应的数据文件
- oracle中迁移分区的表空间
- c# 取得指定目录下的所有子目录名(不含路径)
- Oracle,查询 表空间对应的数据文件,用户和表空间对应关系
- 取得sqlite数据库里所有的表名 &复制表
- 取得数据库(sqlserver)中所有表的记录数
- mysql 取得所有的表名和字段名
- 关于查询表空间分区后的各个分区空间大小情况
- 面向对象编程五大原则
- CCD会成为下一个恐龙吗
- QQ联系
- 解决requestFeature() must be called before adding content错误
- 嵌入式Linux C语言开发工具—编译器gcc详解
- 取得所有含分区的表对应的表空间
- java web.xml配置描述符
- 如何查看WAS 所有端口
- asp.net ajax控件实例 和学习
- 如何在qualcomm 8960和8921上使用PWM功能 (GPIO24)
- shell 常见技巧(一)
- java 开发银行支付、对账时证书相关的操作总结
- SQL优化原则
- linux开发板支持NFS文件系统配置