講解oracle資料庫逐漸增大時的歸檔處理
在資料庫日漸龐大時應該如何進行歸檔?以下是一些解決的思路:
1.新建乙個表空間存放各表的歷史資料。
1.1寫乙個儲存過程搬資料,資料搬遷到歷史表後,在基表中將搬遷的資料刪除。
2.定期將歷史資料exp到磁帶中去做永久儲存。
3.歷史資料exp之後,可以清空各歷史資料表。這樣,表空間的大小實際上是很容易伸縮及控制的。
在這個過程當中,我們可以看到基本的資料由於可以定期清理到歷史資料表,繼而再清理到磁帶。因此,資料庫不會越來越大。方便備份及減少查詢時間。
具體的實現過程如下:
1.建立臨時表:
create global temporary table scott.archive_rows
(crowid varchar2(20 byte),
primarykey varchar2(15 byte)
)on commit preserve rows
/2.建立歸檔表:
sql>create table emp_archive as select * from emp_b;
3.建立歸檔記錄表:
create table scott.archive_log
(tablename varchar2(50 byte),
recordcount number,
updatedate date
)logging
nocompress
nocache
noparallel
monitoring
/4. procedure:
create or replace procedure archive_emp
(maxarchiverow number) is /* 定義歸檔的記錄數*/
v_crowid archive_rows.crowid%type; /* 存放基表的rowid*/
intloop number; /* 記數器*/
v_primarykey archive_rows.primarykey%type;
cursor c_arch_emp is
select * from archive_rows; /* 建立游標*/
begin
delete from archive_rows; /*先清空臨時表*/
commit;
insert into archive_rows
select rowid,'' from emp_b where rownum < maxarchiverow;
commit; /*將基表中指定行數的rowid插入臨時表*/
intloop:=0;
open c_arch_emp;
loop fetch c_arch_emp into v_crowid,v_primarykey;
intloop:=intloop+1;
exit when c_arch_emp%notfound;
insert into emp_archive select * from emp_b where rowid=v_crowid;
/*根據rowid,將數值插入到歸檔表中*/
commit;
delete from emp_b where rowid=v_crowid; /*將基表已歸檔資料刪除*/
commit;
if mod(intloop,200)=0 /*以200行為界記錄歸檔情況*/
then
insert into archive_log values('emp_b',intloop,sysdate);
commit;
end if;
end loop;
end archive_emp;
/
oracle資料庫資料量增大的優化措施。
oracle 資料庫資料量增大的優化措施。1 硬體優化 2 資料庫表分割槽 範圍分割槽,雜湊分割槽,列表分割槽和復合分割槽。3 分表 4 索引優化 對海量的資料處理,對大表建立索引是必行的,建立索引要考慮到具體情況,例如針對大表的分組 排序等字段,都要建立相應索引,一般還可以建立復合索引,對經常插入...
Oracle資料庫中序列用法講解
序列 sequence 是序列號生成器,可以為表中的行自動生成序列號,產生一組等間隔的數值 型別為數字 其主要的用途是生成表的主鍵值,可以在插入語句中引用,也可以通過查詢檢查當前值,或使序列增至下乙個值。建立序列需要create sequence系統許可權。序列的建立語法如下 quote creat...
史上最全講解 oracle資料庫 續
主外來鍵關係 主表 父表 從表 子表 從表中的外來鍵關聯主表中的主鍵字段 當兩張表存在主從表關係,刪除表的時候,需要注意 預設先刪除從表,再刪除主表 cascade constraints 刪除主表的同時級聯刪除主從表之間約束關係 當兩張表存在主從表關係,刪除資料的時候,需要注意 刪除主表中沒有被從...