Oracle数据库里存放着各种各样的数据,其中有一些数据表会随着时间的推移,越来越大。如交友聊天的日志、 短信收发的日志、生产系统的日志、动态网站发布系统的日志等等。
|
|
|||
一、问题的引出
1.初学数据库时只知道用delete来删除表里的数据。但在Oracle数据库里,大量delete记录后,并不能释放表所占用的物理空间,这里面有一个高水位的概念,所以我们不能用delete来分割表。
2.用重命名(rename)表的方法
(1)先建一个和原来日志表(假如是log)数据结构一模一样的新表(如log_new),建约束、索引及指定字段的默认值;
(2)重命名表log到log_YYYYMM;
要注意的问题是OLTP系统可能会因为DML操作阻碍重命名执行成功,出现ORA-00054资源正忙的错误提示,需要试多次才能成功。
(3)重命名表log_new到log。
这样应用程序不用修改(受影响的时间仅几秒钟),日志表就被截断分割了。
上述步骤可以在Oracle里可以用存储过程来实现它们。
二、用存储过程来分割表
可以看到在重命名表的方法中,步骤(2)是个关键。
下面这个rename_table过程会在有锁阻碍的情况下用递归的方式重试100次。
重命名原始表到目标表的存储过程rename_table:
|
当然您工作环境的日志表可能和我这个做例子的日志表结构上有所不同,约束条件、索引和默认值都不尽相同。 只要稍加修改就可以了。
三、用户需要有create any table系统权限(不是角色里包含的权限)
因为在执行存储过程时,由角色赋予的权限会失效,所以执行log_history的用户一定要有DBA单独赋予的create any table系统权限。
最后在OS里定时每月一号凌晨0:00分执行log_history,让存储过程定期分割表。
如果要分割的日志表很多,模仿log_history可以写很多类似的存储过程来分割不同项目里的日志表。
然后让OS按月,按周或者不定期地执行这些存储过程, 管理员只要查看日志就可以了。
四、其它注意事项
如果应用程序有BUG,可能对在用原始日志表产生长期不能释放的锁,执行log_history重命名会不成功。
这时DBA可以查看数据字典:
select object_id,session_id,locked_mode from v$locked_object; |
如果有长期出现的一模一样的列(包括登录时间),可能是没有释放的锁。
我们要在执行分割日志表的存储过程前,用下面SQL语句杀掉长期没有释放非正常的锁:
alter system kill session 'sid,serial#'; |
五、结束语
用上面介绍的存储过程定期分割日志表有很大的灵活性。历史数据不仅查询方便,转移和备份起来也都很容易。
Unix和Windows平台的都可以使用。对服务器硬盘空间较小的中小型公司意义尤其明显。
·数据库专栏 (4486篇文章)
·数据库处理专题 (7272篇文章)
·城域网专题 (6702篇文章)
·网络存储—光纤通道 (1722篇文章)
·数据库安全技术专题 (11073篇文章)
·数据库安装与卸载 (8977篇文章)
·Oracle 10g基础应用 (4074篇文章)
·服务器存储专栏 (6210篇文章)
·Linux数据库宝典 (11275篇文章)
·VMware下RedHat安装Oracle 9i RAC全攻略 (6213次浏览)
·简单的Oracle存储过程的创建方法(菜鸟级) (5401次浏览)
·Oracle架构的基础知识(入门级) (5181次浏览)
·ORACLE中的各种数据类型详细的介绍 (4937次浏览)
·ORACLE备份一(ORACLE BACKUP STRATEGY) (1919次浏览)
·双机热备Oracle数据库服务器操作实战 (1873次浏览)
·Oracle的初学者入门心得 (1101次浏览)
·Oracle数据库数据操作和控制语言详解 (995次浏览)
·oracle开发中序列的使用 (844次浏览)
·VMware下RedHat安装Oracle 9i RAC全攻略 (6213次浏览)
·简单的Oracle存储过程的创建方法(菜鸟级) (5401次浏览)
·Oracle架构的基础知识(入门级) (5181次浏览)
·ORACLE中的各种数据类型详细的介绍 (4937次浏览)
·ORACLE备份一(ORACLE BACKUP STRATEGY) (1919次浏览)
·双机热备Oracle数据库服务器操作实战 (1873次浏览)
·Oracle的初学者入门心得 (1101次浏览)
·Oracle数据库数据操作和控制语言详解 (995次浏览)
·oracle开发中序列的使用 (844次浏览)
·VMware下RedHat安装Oracle 9i RAC全攻略 (6213次浏览)
·简单的Oracle存储过程的创建方法(菜鸟级) (5401次浏览)
·Oracle架构的基础知识(入门级) (5181次浏览)
·ORACLE中的各种数据类型详细的介绍 (4937次浏览)
·ORACLE备份一(ORACLE BACKUP STRATEGY) (1919次浏览)
·双机热备Oracle数据库服务器操作实战 (1873次浏览)
·Oracle的初学者入门心得 (1101次浏览)
·Oracle数据库数据操作和控制语言详解 (995次浏览)
·oracle开发中序列的使用 (844次浏览)
·赛门铁克Oracle启动Veritas数据中心软件认证 07-23
·在Oracle数据库里用存储过程定期分割表 07-23
·Oracle与FoxPro两数据库的数据转换 07-22
·Oracle数据完整性嵌套事务调用分析研究 07-22
·oracle开发中序列的使用 07-22
·PL/SQL开发中动态SQL的使用方法 07-22
·图文:详解数据库Oracle 11g的基本安装 07-21
·详细讲解容灾技术中的数据一致性 07-21
·Oracle中数据文件大小的限制 07-21
|
|||
| ·win98频道 ·Windows XP频道 ·Windows Vista频道 ·Windows 2000频道 ·win2003频道 ·Freebsd频道 ·Oracle频道 ·安全频道 |
·Linux频道 ·Windows频道 ·邮件服务器专题 ·协议大全 ·数据恢复指南教程 ·FreeBSD使用教程 ·Linux数据库宝典 ·Linux基础知识 |
||
| · 秘密:Vista隐蔽的动态屏保 · 腾讯开发新电子宠物--QQ熊 · 惠普否认2999元PC有价无货 |
· 驱逐Win系统“流氓”文件 · WinXP中获取未使用的IP地址 · 尝试format C:格式化硬盘? |
| · 在DOS下恢复回收站中的文件 · 拯救WinXP崩溃的救命稻草 · Linux系统中超级权限的应用 |
· 搜狗PK谷歌:谁能代言拼... · 昨日重现,一键GHOST轻松.. · 实现Web迅雷在空闲时杀毒 |
| · AVIFile函数制做AVI文件 · VC中链接动态链接库的方法 · 熊猫烧香核心源码(Delphi) |
· DateDiff函数祥解 · JavaScript去除空格的三种 · js效果 图片加载进度实时.. |
| · SQL Server数据库优化方案 · Oracle的初学者入门心得 · JSP连接Mysql数据库 |
· Photoshop为美女做艺术处理 · 用Freehand创建发光字特效 · 设计自己的个性QQ动态表情 |




