日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

使用Oracle Partition Table對日志表進行分區

瀏覽:145日期:2023-11-11 16:53:29

某個系統中有個日志型的表,現在的大小大概超過500MB,與該表相關的語句的執行計劃都是對這個表進行全表掃描。

下面是該表的定義:

01 create table p_siteaccesslog

02 (

03;;logIDvarchar(40) not null,

04;;infoType;;;;;varchar(20) default 'site',

05;;siteId; varchar(30),

06;;columnId;;;;;varchar(30),

07;;infoId; varchar(30),

08;;url;;varchar(300),

09;;location;;;;;varchar(80),

10;;action; varchar(20),

11;;accessDate;;;varchar(10),

12;;accessTime;;;varchar(8),

13;;sessionID;;;;varchar(90),

14;;userName;;;;;varchar(30),

15;;userBrowser;;varchar(50),

16;;userOS; varchar(30),

17;;userIp; varchar(30),

18;;localization;varchar(100),

19;;constraint PK_p_siteaccesslog primary key (logID)

20 )

該表有一個主鍵,為每條日志分配一個主鍵,感覺上一百年都不會用上這個主鍵來查一次數據。所以在新的分區表上將其去掉。

1 test$ora8i@4.20 SQL> l

21* select segment_name,sum(bytes/1048576) MB from user_extents group by segment_name order by 2 desc

3 test$ora8i@4.20 SQL> /

4

5 SEGMENT_NAME;;MB

6 ---------------------------------------- ----------

7 P_SITEACCESSLOG 536

由于是日志型的表,第一感覺就是按照時間分區,并淘汰(切換)舊的數據。

于是沿著這個思路,按照每月一個分區的策略構建分區表:

01 create table my_p_siteaccesslog

02 (

03;;logIDvarchar(40) not null,

04;;infoType;;;;;varchar(20) default 'site',

05;;siteId; varchar(30),

06;;columnId;;;;;varchar(30),

07;;infoId; varchar(30),

08;;url;;varchar(300),

09;;location;;;;;varchar(80),

10;;action; varchar(20),

11;;accessDate;;;varchar(10),

12;;accessTime;;;varchar(8),

13;;sessionID;;;;varchar(90),

14;;userName;;;;;varchar(30),

15;;userBrowser;;varchar(50),

16;;userOS; varchar(30),

17;;userIp; varchar(30),

18;;localization;varchar(100)

19 )

20 partition by range (accessDate)

21 (

22;;partition pbf2009 values less than ('2009-01-01'),

23;;partition p200901 values less than ('2009-02-01'),

24;;partition p200902 values less than ('2009-03-01'),

25;;partition p200903 values less than ('2009-04-01'),

26;;partition p200904 values less than ('2009-05-01'),

27;;partition p200905 values less than ('2009-06-01'),

28;;partition p200906 values less than ('2009-07-01'),

29;;partition p200907 values less than ('2009-08-01'),

30;;partition p200908 values less than ('2009-09-01'),

31;;partition p200909 values less than ('2009-10-01'),

32;;partition p200910 values less than ('2009-11-01'),

33;;partition p200911 values less than ('2009-12-01'),

34;;partition p200912 values less than ('2010-01-01'),

35;;partition p201001 values less than ('2010-02-01'),

36;;partition p201002 values less than ('2010-03-01'),

37;;partition p201003 values less than ('2010-04-01'),

38;;partition p201004 values less than ('2010-05-01'),

39;;partition p201005 values less than ('2010-06-01'),

40;;partition p201006 values less than ('2010-07-01'),

41;;partition p201007 values less than ('2010-08-01'),

42;;partition p201008 values less than ('2010-09-01'),

43;;partition p201009 values less than ('2010-10-01'),

44;;partition p201010 values less than ('2010-11-01'),

45;;partition p201011 values less than ('2010-12-01'),

46;;partition p201012 values less than ('2011-01-01')

47 )

由于數據庫是Oracle 10g,不是11g,無法支持interval分區,只能多創建幾個未來的分區了。

表創建好之后,就導數據流,由于該表不算太大,500多兆的插入還是可以接受的。

1 insert into my_p_siteaccesslog select * from P_SITEACCESSLOG ;

2 commit;

下一步使用分區切換技術,將舊的數據搬走(不是刪掉)

創建用于存放2008年數據大表

01 create table my_p_siteaccesslog_2008

02 (

03;;logIDvarchar(40) not null,

04;;infoType;;;;;varchar(20) default 'site',

05;;siteId; varchar(30),

06;;columnId;;;;;varchar(30),

07;;infoId; varchar(30),

08;;url;;varchar(300),

09;;location;;;;;varchar(80),

10;;action; varchar(20),

11;;accessDate;;;varchar(10),

12;;accessTime;;;varchar(8),

13;;sessionID;;;;varchar(90),

14;;userName;;;;;varchar(30),

15;;userBrowser;;varchar(50),

16;;userOS; varchar(30),

17;;userIp; varchar(30),

18;;localization;varchar(100)

19 );

使用分區切換,將2008年的數據切換出來:

1 ALTER TABLE my_p_siteaccesslog EXCHANGE PARTITION pbf2009 WITH TABLE my_p_siteaccesslog_2008;

創建專門用于存放2009年數據的分區表:

01 create table my_p_siteaccesslog_2009

02 (

03;;logIDvarchar(40) not null,

04;;infoType;;;;;varchar(20) default 'site',

05;;siteId; varchar(30),

06;;columnId;;;;;varchar(30),

07;;infoId; varchar(30),

08;;url;;varchar(300),

09;;location;;;;;varchar(80),

10;;action; varchar(20),

11;;accessDate;;;varchar(10),

12;;accessTime;;;varchar(8),

13;;sessionID;;;;varchar(90),

14;;userName;;;;;varchar(30),

15;;userBrowser;;varchar(50),

16;;userOS; varchar(30),

17;;userIp; varchar(30),

18;;localization;varchar(100)

19 )

20 partition by range (accessdate)

21 (

22;;partition p200901 values less than ('2009-02-01'),

23;;partition p200902 values less than ('2009-03-01'),

24;;partition p200903 values less than ('2009-04-01'),

25;;partition p200904 values less than ('2009-05-01'),

26;;partition p200905 values less than ('2009-06-01'),

27;;partition p200906 values less than ('2009-07-01'),

28;;partition p200907 values less than ('2009-08-01'),

29;;partition p200908 values less than ('2009-09-01'),

30;;partition p200909 values less than ('2009-10-01'),

31;;partition p200910 values less than ('2009-11-01'),

32;;partition p200911 values less than ('2009-12-01'),

33;;partition p200912 values less than ('2010-01-01')

34 )

令人非常郁悶的是Oracle竟然不支持兩個分區表之間的分區切換,一定要借助一個中間表,這個功能連SQL Server都有了啊。

于是創建一個專門用于切換的中間表:

01 create table my_p_siteaccesslog_exchange

02 (

03;;logIDvarchar(40) not null,

04;;infoType;;;;;varchar(20) default 'site',

05;;siteId; varchar(30),

06;;columnId;;;;;varchar(30),

07;;infoId; varchar(30),

08;;url;;varchar(300),

09;;location;;;;;varchar(80),

10;;action; varchar(20),

11;;accessDate;;;varchar(10),

12;;accessTime;;;varchar(8),

13;;sessionID;;;;varchar(90),

14;;userName;;;;;varchar(30),

15;;userBrowser;;varchar(50),

16;;userOS; varchar(30),

17;;userIp; varchar(30),

18;;localization;varchar(100)

19 );

下面就是毫無技術含量并且不斷重復的就借助中間表將my_p_siteaccesslog中的2009年數據切換到中my_p_siteaccesslog_2009中的代碼:

01 ALTER TABLE my_p_siteaccesslog;;;EXCHANGE PARTITION p200901 WITH TABLE my_p_siteaccesslog_exchange;

02 ALTER TABLE my_p_siteaccesslog_2009 EXCHANGE PARTITION p200901 WITH TABLE my_p_siteaccesslog_exchange;

03

04 ALTER TABLE my_p_siteaccesslog;;;EXCHANGE PARTITION p200902 WITH TABLE my_p_siteaccesslog_exchange;

05 ALTER TABLE my_p_siteaccesslog_2009 EXCHANGE PARTITION p200902 WITH TABLE my_p_siteaccesslog_exchange;

06

07 ALTER TABLE my_p_siteaccesslog;;;EXCHANGE PARTITION p200903 WITH TABLE my_p_siteaccesslog_exchange;

08 ALTER TABLE my_p_siteaccesslog_2009 EXCHANGE PARTITION p200903 WITH TABLE my_p_siteaccesslog_exchange;

09

10 ALTER TABLE my_p_siteaccesslog;;;EXCHANGE PARTITION p200904 WITH TABLE my_p_siteaccesslog_exchange;

11 ALTER TABLE my_p_siteaccesslog_2009 EXCHANGE PARTITION p200904 WITH TABLE my_p_siteaccesslog_exchange;

12

13 ALTER TABLE my_p_siteaccesslog;;;EXCHANGE PARTITION p200905 WITH TABLE my_p_siteaccesslog_exchange;

14 ALTER TABLE my_p_siteaccesslog_2009 EXCHANGE PARTITION p200905 WITH TABLE my_p_siteaccesslog_exchange;

15

16 ALTER TABLE my_p_siteaccesslog;;;EXCHANGE PARTITION p200906 WITH TABLE my_p_siteaccesslog_exchange;

17 ALTER TABLE my_p_siteaccesslog_2009 EXCHANGE PARTITION p200906 WITH TABLE my_p_siteaccesslog_exchange;

18

19 ALTER TABLE my_p_siteaccesslog;;;EXCHANGE PARTITION p200907 WITH TABLE my_p_siteaccesslog_exchange;

20 ALTER TABLE my_p_siteaccesslog_2009 EXCHANGE PARTITION p200907 WITH TABLE my_p_siteaccesslog_exchange;

21

22 ALTER TABLE my_p_siteaccesslog;;;EXCHANGE PARTITION p200908 WITH TABLE my_p_siteaccesslog_exchange;

23 ALTER TABLE my_p_siteaccesslog_2009 EXCHANGE PARTITION p200908 WITH TABLE my_p_siteaccesslog_exchange;

24

25 ALTER TABLE my_p_siteaccesslog;;;EXCHANGE PARTITION p200909 WITH TABLE my_p_siteaccesslog_exchange;

26 ALTER TABLE my_p_siteaccesslog_2009 EXCHANGE PARTITION p200909 WITH TABLE my_p_siteaccesslog_exchange;

27

28 ALTER TABLE my_p_siteaccesslog;;;EXCHANGE PARTITION p200910 WITH TABLE my_p_siteaccesslog_exchange;

29 ALTER TABLE my_p_siteaccesslog_2009 EXCHANGE PARTITION p200910 WITH TABLE my_p_siteaccesslog_exchange;

30

31 ALTER TABLE my_p_siteaccesslog;;;EXCHANGE PARTITION p200911 WITH TABLE my_p_siteaccesslog_exchange;

32 ALTER TABLE my_p_siteaccesslog_2009 EXCHANGE PARTITION p200911 WITH TABLE my_p_siteaccesslog_exchange;

33

34 ALTER TABLE my_p_siteaccesslog;;;EXCHANGE PARTITION p200912 WITH TABLE my_p_siteaccesslog_exchange;

35 ALTER TABLE my_p_siteaccesslog_2009 EXCHANGE PARTITION p200912 WITH TABLE my_p_siteaccesslog_exchange;

順便創建存放2010年數據的分區表

01 create table my_p_siteaccesslog_2010

02 (

03;;logIDvarchar(40) not null,

04;;infoType;;;;;varchar(20) default 'site',

05;;siteId; varchar(30),

06;;columnId;;;;;varchar(30),

07;;infoId; varchar(30),

08;;url;;varchar(300),

09;;location;;;;;varchar(80),

10;;action; varchar(20),

11;;accessDate;;;varchar(10),

12;;accessTime;;;varchar(8),

13;;sessionID;;;;varchar(90),

14;;userName;;;;;varchar(30),

15;;userBrowser;;varchar(50),

16;;userOS; varchar(30),

17;;userIp; varchar(30),

18;;localization;varchar(100)

19 )

20 partition by range (accessdate)

21 (

22;;partition p201001 values less than ('2010-02-01'),

23;;partition p201002 values less than ('2010-03-01'),

24;;partition p201003 values less than ('2010-04-01'),

25;;partition p201004 values less than ('2010-05-01'),

26;;partition p201005 values less than ('2010-06-01'),

27;;partition p201006 values less than ('2010-07-01'),

28;;partition p201007 values less than ('2010-08-01'),

29;;partition p201008 values less than ('2010-09-01'),

30;;partition p201009 values less than ('2010-10-01'),

31;;partition p201010 values less than ('2010-11-01'),

32;;partition p201011 values less than ('2010-12-01'),

33;;partition p201012 values less than ('2011-01-01')

34 )

并將1月份的數據切換到表my_p_siteaccesslog_2010中:

1 ALTER TABLE my_p_siteaccesslog;;;EXCHANGE PARTITION p201001 WITH TABLE my_p_siteaccesslog_exchange;

2 ALTER TABLE my_p_siteaccesslog_2010 EXCHANGE PARTITION p201001 WITH TABLE my_p_siteaccesslog_exchange;

經過一輪折騰之后,我們看看現各個表的情況:

01 test$ora8i@4.20 SQL> l

021* select segment_name,sum(bytes/1048576) MB from user_extents group by segment_name order by 2 desc

03 test$ora8i@4.20 SQL> /

04

05 SEGMENT_NAME;;MB

06 ---------------------------------------- ----------

07 P_SITEACCESSLOG 536

08 MY_P_SITEACCESSLOG_2009 435

09 MY_P_SITEACCESSLOG_2008; 51

10 MY_P_SITEACCESSLOG_2010;;45.6875

11 MY_P_SITEACCESSLOG; 35.1875

12 MY_P_SITEACCESSLOG_EXCHANGE.0625

表MY_P_SITEACCESSLOG以后將會改名為P_SITEACCESSLOG正式上線使用,其中僅保留1~2個月的數據用于查詢,當需要查詢舊數據的時候,應用可以不動,然后將舊的數據切換到MY_P_SITEACCESSLOG(也就是以后的P_SITEACCESSLOG)中就可以使用了。

分區表的切換產生的redo非常少,主要都是用于數據字典,因此系統的靈活性變得更高了。

標簽: Oracle 數據庫
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
欧美国产美女| 亚洲天堂一区二区| 97久久亚洲| 午夜天堂精品久久久久| 国产日韩三级| 精品精品国产三级a∨在线| 久久这里只有| 色婷婷精品视频| 日韩一级不卡| 日本v片在线高清不卡在线观看| 国产欧美在线观看免费| 韩国一区二区三区视频| 成人免费电影网址| 免费在线成人网| 国产精品a级| 亚洲麻豆一区| 日韩精品不卡一区二区| 日韩中文字幕高清在线观看| 成人日韩在线| 亚洲调教视频在线观看| 欧美日韩国产一区二区三区不卡| 久久蜜桃资源一区二区老牛| 亚洲午夜黄色| 老鸭窝亚洲一区二区三区| 蜜臀av在线播放一区二区三区| 美日韩精品视频| 久久中文视频| 日韩在线观看一区二区| 日韩1区2区日韩1区2区| 欧美1区2区3| 青青青免费在线视频| 一区二区三区四区在线看| 国产精品婷婷| 99久久精品网| 国产一区久久| 国产欧美69| 日韩欧美少妇| 日韩手机在线| 久久免费国产| 美女高潮久久久| 欧美中文字幕| 男人的天堂久久精品| 福利视频一区| 亚洲人成毛片在线播放女女| 国产一区福利| 视频一区中文字幕精品| 日本精品影院| 日韩视频在线一区二区三区 | 日韩制服丝袜av| 国产美女精品视频免费播放软件| 国产一区二区三区亚洲综合| 亚洲成人一区| 国产精品亚洲综合色区韩国| 日韩欧美少妇| 日韩av网站在线观看| 成人精品久久| 91久久黄色| 久久成人福利| 怡红院精品视频在线观看极品| 婷婷精品在线| 欧美片第1页| 91精品国产一区二区在线观看| 视频二区不卡| 欧美日韩夜夜| 性欧美69xoxoxoxo| 国产精品毛片视频| 亚洲欧美日韩专区| av最新在线| 日本精品另类| 91成人福利| 欧美日韩国产高清| 欧美久久亚洲| 四虎884aa成人精品最新| 午夜天堂精品久久久久| 91tv亚洲精品香蕉国产一区| 97久久亚洲| 久久久成人网| 国产精品一区二区三区美女| 欧美不卡在线| 精品国产美女a久久9999| 免费在线观看成人| 极品裸体白嫩激情啪啪国产精品| 国产精品亚洲综合在线观看| 中日韩男男gay无套| 日韩成人精品一区| 日韩av黄色在线| 红桃视频欧美| 国产精品99一区二区三| 日韩国产高清在线| 影音先锋国产精品| 久久一区二区三区喷水| 国产欧洲在线| 国产精东传媒成人av电影| 蜜臀av性久久久久蜜臀aⅴ四虎 | 欧美日韩中文一区二区| 国产精品99久久免费| 日韩一二三区在线观看| 国户精品久久久久久久久久久不卡| 久久影视三级福利片| 亚洲精品大全| 欧美日韩一区二区三区四区在线观看| 欧美久久天堂| 99久久久久久中文字幕一区| 久久精品av| 亚洲欧美日韩高清在线| 91久久久久| 蜜桃视频一区二区三区在线观看| 亚洲一区二区动漫| 蜜桃久久av一区| 日韩中文字幕| 国产日韩亚洲欧美精品| 你懂的国产精品永久在线| 精品久久中文| 日本免费一区二区三区四区| 国产videos久久| 一区二区三区四区日本视频| 久久久精品午夜少妇| 伊人久久亚洲热| 综合亚洲色图| 欧美日本不卡| 久久精品国产99| 欧美香蕉视频| 日韩午夜av在线| 日韩三级一区| 另类欧美日韩国产在线| 高清一区二区三区av| 秋霞国产精品| 99国产精品久久久久久久| 美女日韩在线中文字幕| 亚洲狼人精品一区二区三区| 高清av不卡| 久久中文字幕二区| 久久久久久久久丰满| 久久精品123| 亚洲h色精品| 深夜日韩欧美| 欧美1区2区3| 欧美日韩国产高清电影| 日韩高清电影免费| 国产精品久久久久蜜臀| 欧美不卡高清| 日本aⅴ免费视频一区二区三区| 国产一区二区三区四区五区| 99精品在线免费在线观看| 亚洲欧美日韩精品一区二区| 日本视频在线一区| 黑人精品一区| 蜜桃伊人久久| 精品成av人一区二区三区| 伊人影院久久| 国产精品久久久久久久久久妞妞 | 91一区二区三区四区| 久久一区二区三区喷水| 最新亚洲国产| 丰满少妇一区| 亚洲免费网址| 欧美成人一二区| 亚洲精品午夜av福利久久蜜桃| 日韩和欧美一区二区| 日韩免费在线| 日本一区二区三区中文字幕| 日韩欧美精品一区| 天堂va在线高清一区| 久久毛片亚洲| 亚洲日本三级| 人人精品亚洲| 国产伦精品一区二区三区视频| 人在线成免费视频| 日韩国产欧美在线播放| 久久免费国产| 国产精品亚洲欧美| 国产亚洲在线观看| 国产一区二区三区四区大秀| 蜜桃视频一区二区三区| 在线精品亚洲欧美日韩国产| 日韩在线观看一区二区三区| 久久久777| 欧美国产中文高清| 亚洲女人av| 欧美成a人免费观看久久| 国产日韩欧美一区在线| 狠狠爱成人网| 日韩1区2区| 国产情侣久久| 免费成人性网站| 天堂日韩电影| 狂野欧美性猛交xxxx| 久久亚洲一区| 日韩大片在线观看| 国产免费av国片精品草莓男男| 亚洲免费播放| 久久电影tv| 老司机精品视频在线播放| 亚洲人成毛片在线播放女女| 久久在线视频免费观看| 国产精品成久久久久| 久久精品999| 日韩av一区二| 精品久久精品| 婷婷亚洲成人|