清理臨時表規範以及指令碼
第一章 目的
為了最佳化資料庫的設計,提高資料庫設計的合理性和資料訪問高效性,同時便於資料共享的質量和效率,促進資料庫的統一標準化管理,特制定一套建立臨時表存放臨時資料使用的設計規範。
第二章 設計規範
本次設計需要將所有的臨時表存放在一個單獨的資料庫使用者中,我們採用 temp 使用者,temp使用者只可以檢視資料庫中所有使用者下面的表許可權。
本次設計臨時表規範主要按照資料庫建立臨時表資料存放的時間要求進行規範,該建立的臨時表並不要求做為業務提供資料的表進行使用,該規範要求主要分為五部分,如下:
Ø 臨時資料存放30天的,需要建立臨時表的名稱規則要已RES_1MON開頭.
Ø 臨時資料存放90天的,需要建立臨時表的名稱規則要已RES_3MON開頭.
Ø 臨時資料存放180天的,需要建立臨時表的名稱規則要已RES_6MON開頭.
Ø 臨時資料永久存放的,需要建立臨時表的名稱規則要已FOREVER開頭.
Ø 不按要求建立的臨時資料表存放每天將定時清理刪除.
按照以上的規則進行建立臨時表,將建立永久存放的的FOREVER開頭的臨時表,進行每一年為一個時間節點進行離線備份整理,並且會將所有的定時清理的臨時表都會記錄在DROP_TABLE_TEMP_LOG日誌表中進行記錄.
例如:
1、 建立臨時存放一個月(30天)資料的臨時表
create table RES_1MON _temp1 as select * from scott.emp ;
2、 建立臨時存放三個月(90天)資料的臨時表
create table RES_3MON _temp3 as select * from scott.emp ;
3、 建立臨時存放六個月(180天)資料的臨時表
create table RES_6MON _temp5 as select * from scott.emp ;
4、 建立臨時永久存放資料的臨時表
create table forever __temp3 as select * from scott.emp ;
建立臨時表成功後,當時間超過30天,資料庫系統會在tmep使用者下刪除已 RES_1MON 開頭的所有表,當時間超過90天,資料庫系統會在tmep使用者下刪除已 RES_3MON 開頭的所有表,當時間超過180天,資料庫系統會在tmep使用者下刪除已 RES_6MON 開頭的所有表,當已 forever 開頭的表將不會刪除,不已該規範建立的臨時表將每天定期刪除。
檢視臨時表刪除的記錄:
select * from DROP_TABLE_TEMP_LOG ;
第三章 實現規範指令碼
以下是實現本次規範定時任務指令碼。
0、 建立temp使用者
Create user temp identified by oracle ;
grant create session to temp ;
grant select any table to temp ;
1、需要建立存放記錄刪除的日誌表
create table drop_table_temp_log
( table_name varchar2 ( 200 ), drop_time date , state varchar2 ( 10 ));
2、按照時間方式刪除臨時表
create or replace procedure drop_table_tmep is
v_sql varchar2 ( 3000 );
cursor object_mingzi is
select *
from user_objects
where object_type = 'TABLE' ;
cursor object_other is
select *
from user_tables
where table_name not like 'RES_1MON_%' and
table_name not like 'RES_3MON_%' and table_name not like 'RES_6MON_%' and table_name <> 'DROP_TABLE_TEMP_LOG'
and table_name not like 'FOREVER_%' ;
begin
for i in object_mingzi loop
if i.object_name like 'RES_1MON_%' and
to_date ( to_char ( sysdate , 'yyyy-dd-mm' ), 'yyyy-dd-mm' ) -
to_date ( to_char ( i.created , 'yyyy-dd-mm' ), 'yyyy-dd-mm' ) >= 30 then
dbms_output.put_line ( i.object_name || ' ---30 day--' );
insert into drop_table_temp_log ( table_name , drop_time , state ) values ( i.object_name , sysdate , 'RES_1MON' );
v_sql := 'drop table ' || i.object_name ;
execute immediate v_sql ;
commit ;
ELSIF i.object_name like 'RES_3MON_%' and
to_date ( to_char ( sysdate , 'yyyy-dd-mm' ), 'yyyy-dd-mm' ) -
to_date ( to_char ( i.created , 'yyyy-dd-mm' ), 'yyyy-dd-mm' ) >= 60 then
dbms_output.put_line ( i.object_name || ' ---90 day--' );
insert into drop_table_temp_log ( table_name , drop_time , state ) values ( i.object_name , sysdate , 'RES_3MON' );
v_sql := 'drop table ' || i.object_name ;
execute immediate v_sql ;
commit ;
ELSIF i.object_name like 'RES_6MON_%' and
to_date ( to_char ( sysdate , 'yyyy-dd-mm' ), 'yyyy-dd-mm' ) -
to_date ( to_char ( i.created , 'yyyy-dd-mm' ), 'yyyy-dd-mm' ) >= 180 then
dbms_output.put_line ( i.object_name || ' ----180 day--' );
insert into drop_table_temp_log ( table_name , drop_time , state ) values ( i.object_name , sysdate , 'RES_6MON' );
v_sql := 'drop table ' || i.object_name ;
execute immediate v_sql ;
commit ;
end if ;
end loop ;
for j in object_other loop
dbms_output.put_line ( j.table_name || '' );
insert into drop_table_temp_log ( table_name , drop_time , state ) values ( j.table_name , sysdate , 'OTHER' );
v_sql := 'drop table ' || j.table_name ;
execute immediate v_sql ;
commit ;
end loop ;
end ;
附件:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30345407/viewspace-2679828/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- ORACLE臨時表空間的清理Oracle
- oracle清理和重建臨時表空間Oracle
- oracle外部表建立以及收集統計資訊以及臨時表Oracle
- 編寫shell指令碼的規範指令碼
- 資料庫建表和上線指令碼常見規範資料庫指令碼
- 定時清理監聽日誌的指令碼 。指令碼
- Oracle 資料庫管理指令碼命名規範Oracle資料庫指令碼
- 介面自動化指令碼設計規範指令碼
- ORACLE臨時表和SQLSERVER臨時表異同OracleSQLServer
- 清理目錄指令碼指令碼
- Oracle 資料庫管理指令碼命名規範(轉)Oracle資料庫指令碼
- MySQL臨時表MySql
- PostgreSQL:臨時表SQL
- oracle臨時表Oracle
- Oracle 臨時表Oracle
- Shell指令碼程式設計規範與變數(shell指令碼必須要知道的規矩!)指令碼程式設計變數
- PHP 規範 - Symfony 程式碼規範PHP
- 編碼規範系列:css規範CSS
- oracle建立臨時表空間和資料表空間以及刪除Oracle
- Promise規範以及手寫PromisePromise
- MySQL 規範 (資料庫表設計規範)MySql資料庫
- 程式碼規範之前端編寫碼規範前端
- shell指令碼之變數定義規範及使用指令碼變數
- Android 程式碼規範 - 命名規範Android
- Android程式碼規範:命名規範Android
- MySQL之臨時表MySql
- mysql 建立臨時表MySql
- SQL建立臨時表SQL
- Oracle的臨時表Oracle
- 臨時表的操作
- 全域性臨時表
- python編碼規範以及推導式的編寫Python
- windows系統垃圾清理指令碼Windows指令碼
- 【SCRIPTS】快速清理Schema中所有表和序列的PL/SQL指令碼SQL指令碼
- 指令碼範例(轉)指令碼
- Shell指令碼基本編輯規範及變數(詳細)指令碼變數
- PHP Composer 以及PSR規範PHP
- 規範Timer以及ThreadPoolthread