网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库 > SQL技巧
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Sybase教程,Access教程,DB2教程,数据库安全,数据库文摘
本月文章推荐
.如何对非系统表空间的数据文件进.
.高级复制中mlog$表的HWM过高导致.
.用一条SQL实现:一行多个字段数据.
.数据库查询结果的动态排序(2).
.比较一下看看自己掌握了多少SQL快.
.保持多台服务器数据的一致性.
.一个容易忽视的存储过程问题.
.sql 语句 更改默认的sql server .
.实例讲解如何实现互联网上数据库.
.microsoft sql server认证方式的.
.SQL 2005日志文件损坏后应当如何.
.实例讲解SQL Server中非常有用EX.
.SQL语句导入导出大全.
.讲解数据库变慢的三种情况及具体.
.SQL Server 2005 提供的分页查询.
.SAVEPOINT和ROLLBACK TO SAVEPOI.
.SQL Server2008数据库引擎功能的.
.Sql Server2005登录失败.
.触发器中的inserted表和deleted表.
.在Windows xp系统上安装了SQL se.

在数据库日渐庞大时进行归档的解决思路

发表日期:2008-7-17



问:在数据库日渐庞大时应该如何进行归档?


答:以下是一些解决的思路:

 

◆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;

/

上一篇:Microsoft SQL Server 2005数据库镜像语句 人气:926
下一篇:讲解设计应用程序时避免阻塞的八个准则 人气:461
浏览全部数据库的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐