在数据库日渐庞大时进行归档
在数据库日渐庞大时应该如何进行归档?*P0q o/s1~)s/G
程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛7b;V4u9`$e'q
以下是一些解决的思路:
$P#a7C6p'wtech.techweb.com.cn&u/k$n(y0g:W3i
◆1.新建一个表空间存放各表的历史数据。
*A!E:f:A3w程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛*E/b1f9v6k
1.1写一个存储过程搬数据,数据搬迁到历史表后,在基表中将搬迁的数据删除。
8K%~;u!U)f2]._4l1e4V程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛"p6U&a4n:M'Q2{)r
◆2.定期将历史数据exp到磁带中去做永久保存。
7q5|%q:~:g,S6_!{*q!U!i程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛
&e*N3r9`4E k(N&v程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛 ◆3.历史数据exp之后,可以清空各历史数据表。这样,表空间的大小实际上是很容易伸缩及控制的。
$N+W6I.c1|&i%e程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛
0Y1X(@$A:P/J2b'P/J.W程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛 在这个过程当中,我们可以看到基本的数据由于可以定期清理到历史数据表,继而再清理到磁带。因此,数据库不会越来越大。方便备份及减少查询时间。
3V/o"i5K(?#D-Utech.techweb.com.cn
#U!H$G6v$A'X3{ 具体的实现过程如下:
.z8N/R%d9Y:Z1Y8o,i+a&s3\5K1e+~
1.创建临时表: CREATE GLOBAL TEMPORARY TABLE SCOTT.ARCHIVE_ROWSTechWeb-技术社区 s"A E:E*k(z
(
.v1|:U-F)@3O9~$LTechWeb-技术社区 CROWID VARCHAR2(20 BYTE),tech.techweb.com.cn6W&@2h$f8x8q
PRIMARYKEY VARCHAR2(15 BYTE)TechWeb-技术社区/J/W0p0T%N/?.c's:r5V'\$\
):n5@#a j-d-X2r3b
ON COMMIT PRESERVE ROWS 0d1B }-G:P8u(E
5}1v(t.T7N4j)P0x$v
程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛"l4Y:x3~1}(o%H'],Y%i
2.创建归档表: sql>create table emp_archive as select * from emp_b;
!?/R"a0q;n0}!D'R
&N)K'E'_-a0c'V2H&hTechWeb-技术社区
4\5m!M9C;K9y:p.k 3.创建归档记录表: CREATE TABLE SCOTT.ARCHIVE_LOG
9K3U(B'[7o U8S"]&_3}5|tech.techweb.com.cn (/@'g8u8J&W
TABLENAME VARCHAR2(50 BYTE),TechWeb-技术社区5A(X \)I5N)W
RECORDCOUNT NUMBER,
;e&C(n:g0w1v-k%r+w)M/g UPDATEDATE DATE6{-W(@7T$]-r-u
)*M8j/k-L+_)_'h2Q2F
LOGGING/A9T5|3M/n%U&|!P'w
NOCOMPRESS
!e5{1@'C0t.KTechWeb-技术社区 NOCACHETechWeb-技术社区$|5u+V#|4d3l;Y
NOPARALLEL
:H:X)b)J/e&I-M4m8d @%| MONITORING 程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛&o6O(Z0d/k N1e
){%V0V(a I)g0m!D
(V$T5S$v&Q*F/r(\ 4. procedure: CREATE OR REPLACE PROCEDURE archive_emp
0b8y"U9l(R#O.d5d (maxarchiverow number) IS /* 定义归档的记录数*/
$P5y(g+z;n;K-xtech.techweb.com.cn v_crowid archive_rows.crowid%type; /* 存放基表的rowid*/
*Q6u0Q"^(h,X9` intLoop number; /* 记数器*/
,H'?3F;?6~tech.techweb.com.cn v_primarykey archive_rows.PRIMARYKEY%type;程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛&I$C.p/}3]!N/s Z
CURSOR C_ARCH_EMP IS)k(w!T#a E$Y"A!~
SELECT * FROM ARCHIVE_ROWS; /* 创建游标*/
(i0]/Z(k8F+D:}%C#~2s BEGIN
5~.i;m%c$x;rtech.techweb.com.cn DELETE FROM ARCHIVE_ROWS; /*先清空临时表*/
3T-\3V"` Z6f,` COMMIT;tech.techweb.com.cn$J2[)m({6a
INSERT INTO ARCHIVE_ROWS程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛+z%z&V8E"j#r
SELECT ROWID,'' FROM EMP_B WHERE ROWNUM < MAXARCHIVEROW;2J+U&H1x:H5E
COMMIT; /*将基表中指定行数的rowid插入临时表*/
5C6N!}3Q3O5h)j7H3~'N INTLOOP:=0;2u*T&S9X+Z9I-a/g
OPEN C_ARCH_EMP;
&x*P/T7^(u(m LOOP FETCH C_ARCH_EMP INTO V_CROWID,V_PRIMARYKEY;)v#a%O#e3]2g/N
INTLOOP:=INTLOOP+1;
+k)r:_,a%|(M!_ YTechWeb-技术社区 EXIT WHEN C_ARCH_EMP%NOTFOUND;
5s"V%L8F#V#a-j7p3@8Xtech.techweb.com.cn INSERT INTO EMP_ARCHIVE SELECT * FROM EMP_B WHERE ROWID=V_CROWID;
;n$D7t O;Z%a5N /*根据rowid,将数值插入到归档表中*//M7w.x4T*E/X7@
COMMIT;
#H7T;X)H7B*U)^ DELETE FROM EMP_B WHERE ROWID=V_CROWID; /*将基表已归档数据删除*/'U)X2o1o#|#x7^
COMMIT;1`(g5T7m6])Q!D4g(f
IF MOD(INTLOOP,200)=0 /*以200行为界记录归档情况*/程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛"U.z"V-E3A0|7k9]9`
THEN/\(a'D*T2U6_!i
INSERT INTO ARCHIVE_LOG VALUES('EMP_B',INTLOOP,SYSDATE);
%B'y%g/q&h!_)L.S-Y程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛 COMMIT;
;N3`+z2j9J6z;]程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛 END IF;.d$o"s5c7e'w,D6{-B*q,A;e7c
END LOOP;程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛,g)k.F!i5F6o3Y/V
END ARCHIVE_EMP;
|