电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

如何在Oracle里用存儲(chǔ)過程定期分割表

瀏覽:11日期:2023-11-12 12:42:33
Oracle數(shù)據(jù)庫(kù)里存放著各種各樣的數(shù)據(jù),其中有一些數(shù)據(jù)表會(huì)隨著時(shí)間的推移,越來(lái)越大。如交友聊天的日志、短信收發(fā)的日志、生產(chǎn)系統(tǒng)的日志、動(dòng)態(tài)網(wǎng)站發(fā)布系統(tǒng)的日志等等。這樣的信息又和時(shí)間緊密相關(guān),有沒有辦法讓這些日志表能按時(shí)間自動(dòng)分割成歷史年月(如log200308,log200309)的表呢? 請(qǐng)看看我用存儲(chǔ)過程定期分割表的方法吧。 一、問題的引出 1.初學(xué)數(shù)據(jù)庫(kù)時(shí)只知道用delete來(lái)刪除表里的數(shù)據(jù)。但在Oracle數(shù)據(jù)庫(kù)里,大量delete記錄后,并不能釋放表所占用的物理空間,這里面有一個(gè)高水位的概念,所以我們不能用delete來(lái)分割表。 2.用重命名(rename)表的方法 (1) 先建一個(gè)和原來(lái)日志表(假如是log)數(shù)據(jù)結(jié)構(gòu)一模一樣的新表(如log_new),建約束、索引及指定字段的默認(rèn)值; (2) 重命名表log到log_YYYYMM; 要注重的問題是OLTP系統(tǒng)可能會(huì)因?yàn)镈ML操作阻礙重命名執(zhí)行成功,出現(xiàn)ORA-00054資源正忙的錯(cuò)誤提示,需要試多次才能成功。 (3) 重命名表log_new到log。 這樣應(yīng)用程序不用修改(受影響的時(shí)間僅幾秒鐘),日志表就被截?cái)喾指盍恕?上述步驟可以在Oracle里用存儲(chǔ)過程來(lái)實(shí)現(xiàn)。 二、用存儲(chǔ)過程來(lái)分割表 可以看到在重命名表的方法中,步驟(2)是個(gè)要害。下面這個(gè)rename_table過程會(huì)在有鎖阻礙的情況下用遞歸的方式重試100次。 重命名原始表到目標(biāo)表的存儲(chǔ)過程rename_table: create or replace procedure rename_table(source_name in varchar2,target_name in varchar2,times in out number) isquery_str varchar2(4000);source_name1 varchar2(64);target_name1 varchar2(64);cursor c1 is select segment_name from user_segments where segment_name=upper(source_name);dummy c1%rowtype; cursor c2 is select segment_name from user_segmentswhere segment_name=upper(target_name);dummy2 c2%rowtype; beginsource_name1:=source_name;target_name1:=target_name;open c1;fetch c1 into dummy;-- if c1%found then-- dbms_output.put_line(source_name1'exist!');-- end if;open c2;fetch c2 into dummy2;-- if c2%notfound then-- dbms_output.put_line(target_name1'not exist!');-- end if;if c2%notfound and c1%found thenquery_str :='alter table 'source_name1' rename to 'target_name1;execute immediate query_str;dbms_output.put_line('rename sUCcess!');end if;close c1;close c2;exceptionWHEN OTHERS THEN times:=times+1;if times<100 then-- dbms_output.put_line('times:'times);rename_table(source_name1,target_name1,times);elsedbms_output.put_line(SQLERRM);dbms_output.put_line('error over 100 times,exit');end if;end;/截?cái)喾指頻og表的存儲(chǔ)過程log_history: create or replace procedure log_historyisquery_str varchar2(32767);year_month varchar2(8);times number;beginselect to_char(sysdate-15,'YYYYMMDD') into year_month from dual;times:=0;query_str :='create table log_new pctfree 10 pctused 80as select * from log where 1=2';execute immediate query_str;query_str :='alter table log_new add constraints log_'year_month'_pkprimary key (id) tablespace indx nologging pctfree 10';execute immediate query_str; query_str :='alter table log_his modify logtime default sysdate';execute immediate query_str; query_str :='create index log_'year_month'_logtime on log(logtime)tablespace indx nologging pctfree 10';execute immediate query_str; rename_table('log','log'year_month,times);query_str :='alter table log_new rename to log';execute immediate query_str;end;/當(dāng)然您工作環(huán)境的日志表可能和我這個(gè)做例子的日志表結(jié)構(gòu)上有所不同,約束條件、索引和默認(rèn)值都不盡相同。只要稍加修改就可以了。 三、用戶需要有create any table系統(tǒng)權(quán)限(不是角色里包含的權(quán)限) 因?yàn)樵趫?zhí)行存儲(chǔ)過程時(shí),由角色賦予的權(quán)限會(huì)失效, 所以執(zhí)行l(wèi)og_history的用戶一定要有DBA單獨(dú)賦予的create any table系統(tǒng)權(quán)限。 最后在OS里定時(shí)每月一號(hào)凌晨0:00分執(zhí)行l(wèi)og_history,讓存儲(chǔ)過程定期分割表。 假如要分割的日志表很多,模擬log_history可以寫很多類似的存儲(chǔ)過程來(lái)分割不同項(xiàng)目里的日志表。然后讓OS按月,按周或者不定期的執(zhí)行這些存儲(chǔ)過程, 治理員只要查看日志就可以了。 四、其它注重事項(xiàng) 假如應(yīng)用程序有BUG,可能對(duì)在用原始日志表產(chǎn)生長(zhǎng)期不能釋放的鎖,執(zhí)行l(wèi)og_history重命名會(huì)不成功。 這時(shí)DBA可以查看數(shù)據(jù)字典: select object_id,session_id,locked_mode from v$locked_object;select t2.username,t2.sid,t2.serial#,t2.logon_time from v$locked_object t1,v$session t2 where t1.session_id=t2.sid order by t2.logon_time;假如有長(zhǎng)期出現(xiàn)的一模一樣的列(包括登錄時(shí)間),可能是沒有釋放的鎖。 我們要在執(zhí)行分割日志表的存儲(chǔ)過程前,用下面SQL語(yǔ)句殺掉長(zhǎng)期沒有釋放非正常的鎖: alter system kill session 'sid,serial#'; 五、結(jié)束語(yǔ) 用上面介紹的存儲(chǔ)過程定期分割日志表有很大的靈活性。歷史數(shù)據(jù)不僅查詢方便,轉(zhuǎn)移和備份起來(lái)也都很輕易。Unix和Windows平臺(tái)的都可以使用。對(duì)服務(wù)器硬盤空間較小的中小型公司意義尤其明顯。
主站蜘蛛池模板: 净化车间装修_合肥厂房无尘室设计_合肥工厂洁净工程装修公司-安徽盛世和居装饰 | 振动筛-交叉筛-螺旋筛-滚轴筛-正弦筛-方形摇摆筛「新乡振动筛厂家」 | 微水泥_硅藻泥_艺术涂料_艺术漆_艺术漆加盟-青岛泥之韵环保壁材 武汉EPS线条_EPS装饰线条_EPS构件_湖北博欧EPS线条厂家 | 曙光腾达官网-天津脚手架租赁-木板架出租-移动门式脚手架租赁「免费搭设」 | 芜湖厨房设备_芜湖商用厨具_芜湖厨具设备-芜湖鑫环厨具有限公司 控显科技 - 工控一体机、工业显示器、工业平板电脑源头厂家 | 柔性输送线|柔性链板|齿形链-上海赫勒输送设备有限公司首页[输送机] | 耐磨焊丝,堆焊焊丝,耐磨药芯焊丝,碳化钨焊丝-北京耐默公司 | 撕碎机,撕破机,双轴破碎机-大件垃圾破碎机厂家 | 复合肥,化肥厂,复合肥批发,化肥代理,复合肥品牌-红四方 | 长江船运_国内海运_内贸船运_大件海运|运输_船舶运输价格_钢材船运_内河运输_风电甲板船_游艇运输_航运货代电话_上海交航船运 | 福州仿石漆加盟_福建仿石漆厂家-外墙仿石漆加盟推荐铁壁金钢(福建)新材料科技有限公司有保障 | 世纪豪门官网 世纪豪门集成吊顶加盟电话 世纪豪门售后电话 | 温室大棚建设|水肥一体化|物联网系统 | 合肥触摸一体机_触摸查询机厂家_合肥拼接屏-安徽迅博智能科技 | 篷房|仓储篷房|铝合金篷房|体育篷房|篷房厂家-华烨建筑科技官网 知名电动蝶阀,电动球阀,气动蝶阀,气动球阀生产厂家|价格透明-【固菲阀门官网】 | 高效节能电机_伺服主轴电机_铜转子电机_交流感应伺服电机_图片_型号_江苏智马科技有限公司 | 全国国际化学校_国际高中招生_一站式升学择校服务-国际学校网 | 成都租车_成都租车公司_成都租车网_众行宝 | 贵州成人高考网_贵州成考网 | 气力输送_输送机械_自动化配料系统_负压吸送_制造主力军江苏高达智能装备有限公司! | 瓶盖扭矩测试仪-瓶盖扭力仪-全自动扭矩仪-济南三泉中石单品站 | 消防泵-XBD单级卧式/立式消防泵-上海塑泉泵阀(集团)有限公司 | 上海小程序开发-小程序制作-上海小程序定制开发公司-微信商城小程序-上海咏熠 | 无锡装修装潢公司,口碑好的装饰装修公司-无锡索美装饰设计工程有限公司 | 合肥升降机-合肥升降货梯-安徽升降平台「厂家直销」-安徽鼎升自动化科技有限公司 | 地脚螺栓_材质_标准-永年县德联地脚螺栓厂家 | 铣刨料沥青破碎机-沥青再生料设备-RAP热再生混合料破碎筛分设备 -江苏锡宝重工 | 合肥展厅设计-安徽展台设计-合肥展览公司-安徽奥美展览工程有限公司 | 电池高低温试验箱-气态冲击箱-双层电池防爆箱|简户百科 | SMN-1/SMN-A ABB抽屉开关柜触头夹紧力检测仪-SMN-B/SMN-C-上海徐吉 | 空压机网_《压缩机》杂志 | 电子厂招聘_工厂招聘_普工招聘_小时工招聘信息平台-众立方招工网 | 雨水收集系统厂家-雨水收集利用-模块雨水收集池-徐州博智环保科技有限公司 | 拖鞋定制厂家-品牌拖鞋代加工厂-振扬实业中国高端拖鞋大型制造商 | 变色龙云 - 打包app_原生app_在线制作平台_短链接_ip查询 | 飞扬动力官网-广告公司管理软件,广告公司管理系统,喷绘写真条幅制作管理软件,广告公司ERP系统 | 水篦子|雨篦子|镀锌格栅雨水篦子|不锈钢排水篦子|地下车库水箅子—安平县云航丝网制品厂 | 展厅设计公司,展厅公司,展厅设计,展厅施工,展厅装修,企业展厅,展馆设计公司-深圳广州展厅设计公司 | 水上浮桥-游艇码头-浮动码头-游船码头-码瑞纳游艇码头工程 | 考勤系统_人事考勤管理系统_本地部署BS考勤系统_考勤软件_天时考勤管理专家 | 雄松华章(广州华章MBA)官网-专注MBA/MPA/MPAcc/MEM辅导培训 |