<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      之乎者也,阿彌陀佛

      軟件設計的原則就是,化繁為簡,化難為易,把人的思維集中在簡單的領域,然后通過有序的組合實現復雜的邏輯。

        博客園  :: 首頁  :: 新隨筆  :: 聯系 :: 訂閱 訂閱  :: 管理

      首先明確分區表和表分區的區別:表分區是一種思想,分區表示一種技術實現。當表的大小過G的時候可以考慮進行表分區,提高查詢效率,均衡IO。oracle分區表是oracle數據庫提供的一種表分區的實現形式。表進行分區后,邏輯上仍然是一張表,原來的查詢SQL同樣生效,同時可以采用使用分區查詢來優化SQL查詢效率,不至于每次都掃描整個表。

      一、分區表:

          隨著表的不斷增大,對于新紀錄的增加、查找、刪除等(DML)的維護也更加困難。對于數據庫中的超大型表,可通過把它的數據分成若干個小表,從而簡化數據庫的管理活動。對于每一個簡化后的小表,我們稱為一個單個的分區。

       

          對于分區的訪問,我們不需要使用特殊的SQL查詢語句或特定的DML語句,而且可以單獨的操作單個分區,而不是整個表。同時可以將不同分區的數據放置到不同的表空間,比如將不同年份的銷售數據,存放在不同的表空間,即年的銷售數據存放到TBS_2001,2002年的銷售數據存放到TBS_2002,依次類推,從而實現了分散存儲,這將大大的簡化大容量表的管理,提高查詢性能及I/O并發等。

         

          對于外部應用程序來說,雖然存在不同的分區,且數據位于不同的表空間,但邏輯上仍然是一張表

           

          可以使用SQL*Loader,IMPDP,EXPDP,Import,Export等工具來裝載或卸載分區表中的數據

         

          關于分區表的功能實際上同SQL server 中的分區表是同樣的概念,只不過SQL server中的數據存放到了文件組,相當于Oracle概念中的表空間,

          有興趣的可以參考:

              SQL server 2005基于已存在的表創建分區

              SQL server 2005 切換分區表

       

      二、何時分區

          當表達到GB大小且繼續增長

          需要將歷史數據和當前的數據分開單獨處理,比如歷史數據僅僅需要只讀,而當前數據則實現DML

         

      三、分區的條件及特性

          共性:不同的分區之間必須有相同的邏輯屬性,比如表名,列名,數據類型,約束等,

         

          個性:各個分區可以有不同的物理屬性,比如pctfree, pctused, and tablespaces.

       

        分區獨立性:即使某些分區不可用,其他分區仍然可用。

       

        特殊性:含有LONG、LONGRAW數據類型的表不能進行分區

       

      四、分區的優點

          1、提高查詢性能:只需要搜索特定分區,而非整張表,提高查詢速度

          2、節約維護時間:單個分區的數據裝載,索引重建,備份,維護等將遠小于整張表的維護時間。

          3、節約維護成本:可以單獨備份和恢復每個分區

          4、均衡I/O:將不同的分區映射到不同的磁盤以平衡I/O,提高并發

       

      五、ORACLE分區類型:

          范圍分區、散列分區、列表分區、組合分區

          可以對索引和表分區,全局索引只能按范圍分區,可以將其定義在任何類型的分區或非分區表上。

          通常全局索引比局部索引需要更多的維護

          局部索引與基礎表是等同分區的,用于反映其基礎表的結構

         

          1.Range分區:行映射到基于列值范圍的分區

              Range 分區,又成為范圍分區,基于分區鍵值的范圍將數據映射到所建立的分區上。這是最通用的分區類型。

              創建范圍分區時,必須指定以下內容

                  分區方法:range

                  分區列

                  標識分區邊界的分區描述

                 

              使用Range 分區的時候,要記住幾條規則:

                  每個分區都包含VALUES LESS THAN字名,定義了分區的上層邊界。任何等于和大于分區鍵值的二進制值都被添加到下一個高層分區中。

                  所有的分區,除了第一個,如果低于VALUES LESS THAN所定義的下層邊界,都放在前面的分區中。

                  MAXVALUE可以用來定義最高層的分區。MAXVALUE表示了虛擬的無限值

       

              示例:

                  create table sal_range   

                  (salesman_id number(5),

                  salesman_name varchar2(30),

                  sales_amount number(10),

                  sales_date date)

                  partition by range (sales_date)   --創建基于日期的范圍分區并存儲到不同的表空間

                  (

                  partition sal_jan2000 values less than(to_date('02/01/2000',

                      'DD/MM/YYYY')) tablespace sal_range_jan2000,

                  partition sal_feb2000 values less than(to_date('03/01/2000',

                      'DD/MM/YYYY')) tablespace sal_range_feb2000,

                  partition sal_mar2000 values less than(to_date('04/01/2000',

                      'DD/MM/YYYY')) tablespace sal_range_mar2000,

                  partition sal_apr2000 values less than(to_date('05/01/2000',

                      'DD/MM/YYYY')) tablespace sal_range_apr2000

                  );

       

                  create table r      --創建基于值范圍的分區,分區子句未指定表空間時則位于缺省的表空間

                  (a int)

                  partition by range (a)

                  (

                      partition p1 values less than (10),

                      partition p2 values less than (20),

                      partition p3 values less than (30),

                      partition p4 values less than (maxvalue)

                  );

       

                  select * from r partition (p1)    --查看分區中的數據

             

                  一個分區的損壞不會影響其它分區的數據:

                  alter table r drop partiton p1

                  select * from r

                  select * from r partition (p4)

                  除分區數據不見外,其它都正常

       

              partition by 用于指定分區方式

              range 表示分區的方式是范圍劃分

              partition pn 用于指定分區的名字

              values less than 指定分區的上界(上限)

       

              添加分區:

                  ALTER TABLE r

                  add partition p5 values less than (xxx ) tablespace xx;

       

              查看分區表相關信息:

                  SELECT table_name,partition_name,subpartition_count,

                  tablespace_name,user_stats from user_tab_partitions;

       

              獲取創建分區表的元數據:

                    set long 10000

                    select dbms_metadata.get_ddl('TABLE','R','SCOTT') from dual;

                                              表  表名  用戶名   區分大小寫

       

          2.Hash分區:散列分區

              Hash分區能夠很容易對數據進行分區,因為語法很簡單,很容易實現。在下面這種

              情況下,使用hash分區比range分區更好:

                  事先不知道需要將多少數據映射到給定范圍的時候

                  分區的范圍大小很難確定,或者很難平衡的時候

                  Range分區使數據得到不希望的聚集時

                  性能特性,如并行DML、分區剪枝和分區連接很重要的時候

              創建散列分區時,必須指定以下信息

                  分區方法:hash

                  分區列

                  分區數量或單獨的分區描述

       

              分裂、刪除和合并分區不能應用于Hash分區,但是,Hash分區能夠合并和添加。

       

              創建hash分區有兩種方法:一種方法是指定分區數量,另一種方法是指定分區的名字,

              但兩者不能同時指定。

       

              方法一:指定分區數量

              create table dept2 (deptno number,deptname varchar2(32))

              partition by hash(deptno) partitions 4;

       

              方法二:指定分區的名字

              create table dept3 (deptno number,deptname varchar2(32))

              partition by hash(deptno)             

              (partition p1 tablespace p1,

              partition p2 tablespace p2);

       

              create table sales_hash

              (salesman_id number(5),

              salesman_name varchar2(30),

              sales_amount number(10),

              week_no number(2))

              partition by hash (salesman_id)

              partitions 4

              store in (data1,data2,data3,data4)

             

              data1,data2,data3,data4 為表空間名。

              散列分區表的每個分區都被存儲在單獨的段中。

             

          3.List分區:列表分區

              List分區可以控制如何將行映射到分區中去。可以在每個分區的鍵上定義離散的值

              不同于Range分區和Hash分區,

                  Range分區與分區相關聯,為分區列假設了一個值的自然范圍,故不可能將該值的范圍以外的分區組織到一起。

                  hash分區時不允許對數據的劃分進行控制,因為系統使用的是散列函數來劃分數據的。

              List分區的優點在于按照自然的方式將無序和不相關的數據集合分組。

              List分區不支持多列分區,如果將表按列分區,那么分區鍵就只能有表的一個單獨列組成。

              Range分區和Hash分區可以對多列進行分區。

              List分區時必須指定的以下內容

                  分區方法:list

                  分區列

                  分區描述,每個描述指定一串文字值(值的列表),它們是分區列(它們限定將被包括在分區中的行)的離散值

             

              示例:

              create table sales_list

              (salesman_id number(5),

              salesman_name varchar2(30),

              sales_state varchar2(20),

              sales_amount number(10),

              sales_date date)

              partition by list (sales_state)

              (

              partition sales_west values ('California','Hawaii') tablespace x,

              partition sales_east values ('New York','Virginia') tablespace y,

              partition sales_central values ('Texas','Illinois') tablespace z,

              partition sales_other values(DEFAULT) tablespace o

              );

       

              添加分區:

                 alter table sales3 add partition hk values ('HK') tablespace xx

       

          4.Composite Partitioning:合成分區、組合分區

              組合分區使用range方法分區,在每個子分區中使用hash方法進行再分區。

              組合分區比range分區更容易管理,充分使用了hash分區的并行優勢。組合分區支持歷史數據和條塊數據兩者。

              如添加新的RANGE分區,同時為DML操作提供更高層的并行性。

              創建組合分區時,需要指定如下內容:

                  分區方法:range

                  分區列

                  標識分區邊界的分區描述

                  子分區方法:hash

                  子分區列

                  每個分區的子分區數量,或子分區的描述

             

              create table sales_composite

              (salesman_id number(5),

              salesman_name varchar2(30),

              sales_amount number(10),

              sales_date date)

              partition by range(sales_date)

              subpartition by hash(salesman_id)

              subpartitions 4

              store in (tbs1,tbs2,tbs3,tbs4)

              (partition sales_jan2000 values less than(to_date('02/01/2000','DD/MM/YYYY')),

              partition sales_feb2000 values less than(to_date('03/01/2000','DD/MM/YYYY')),

              partition sales_mar2000 values less than(to_date('04/01/2000','DD/MM/YYYY'))

              );

       

              create table T_TRACK 

              (

                  N_TRACK_ID           NUMBER(20)     NOT NULL, 

                  C_COMP_CDE           VARCHAR2(6),

                  T_TRACK_TM           DATE           NOT NULL,

                  C_CAR_NO             VARCHAR2(50)

              )

              partition by range(T_TRACK_TM)

              subpartition by list(C_COMP_CDE)

              (

                  partition P_2009_11 values less than (to_date('2009-12-01','yyyy-MM-dd'))

                          (

                          subpartition P_2009_11_P1013 values('P1013')

                          )

              );

       

      六、表分區后的相關操作

          1.添加分區

              alter table T_TRACK add partition P_2005_04

              values less than(to_date('2005-05-01','yyyy-MM-dd'))

              (

                  subpartition P_2005_04_P1013 values('P1013'),

                  subpartition P_2005_04_P1013 values('P1014'),

                  subpartition P_2005_04_P1013 values('P1015'),

                  subpartition P_2005_04_P1013 values('P1016')

              )

       

          2.刪除分區

              alter table T_TRACK drop partition p_2005_04;

       

          3.添加子分區

              alter table T_TRACK

              modify partition P_2005_01

              add subpartition P_2005_01_P1017 values('P1017');

       

          4.刪除子分區

              alter table T_TRACK drop subpartition p_2005_01_p1017;

       

          5.截斷一個分區表中的一個分區的數據:

              alter table sales3  truncate partition sp1

                  這種方式會使全局分區索引無效

              alter table sales3 truncate partition sp1 update indexes

                  這種方式全局分區索引不會無效

       

          6.截斷分區表的子分區

              alter table comp truncate subpartition sub1

       

          7.截斷帶有約束的分區表

              a、禁用約束

                alter table sales disable constraint dname_sales1

              b、截斷分區

                alter table sales truncate partitoin dec

              c、啟用約束

                alter table sales enable constraint dname_sales1

       

          8.查看一個表是不是分區表

              select table_name,partitioned from user_tables;

              TABLE_NAME                     PAR

              ------------------------------ ---

              DEPT                           NO

              DEPT3                          YES

       

          9.將一個表的分區從一個表空間移動到另一個表空間

              a、查看分區在哪個表空間

                SELECT TABLE_OWNER,TABLE_NAME,PARTITION_NAME,TABLESPACE_NAME,

                SUBPARTITION_COUNT

                FROM DBA_TAB_PARTITIONS WHERE TABLE_OWNER='SCOTT';

       

              b、移動分區

                alter table sales move partiton sp1 tablespace tp;

       

              c、檢查是否移動成功

                SELECT TABLE_OWNER,TABLE_NAME,PARTITION_NAME,TABLESPACE_NAME,

                SUBPARTITION_COUNT

                FROM DBA_TAB_PARTITIONS WHERE TABLE_OWNER='SCOTT';

       

              移動表空間后,要重建索引,否則索引會變得無效

              alter index xxx rebuild

       

       

          10.合并分區:

              alter table sales3 merge partitons sp1,sp3 into partition sp3

              合并后的分區名,不能是邊界值較低的那個

       

          11.刪除分區:

              alter table scott.sales_composite drop partition SALES_JAN2000;

       

          與分區表相關的數據字典視圖:

              DBA_TAB_PARTITIONS

              DBA_IND_PARTITIONS

              DBA_TAB_SUBPARTITIONS

              DBA_IND_SUBPARTITIONS

       

             

              Oracle關于分區的在線文檔:http://download.oracle.com/docs/cd/B19306_01/server.102/b14220/partconc.htm#sthref2604

       

      七、更多參考

       

      Oracle 冷備份

       

      SPFILE錯誤導致數據庫無法啟動

       

      Oracle 用戶、對象權限、系統權限

       

      Oracle 角色、配置文件

       

        Oracle 聯機重做日志文件(ONLINE LOG FILE)

       

        Oracle 控制文件(CONTROLFILE)

       

        Oracle 表空間與數據文件

       

      Oracle 歸檔日志

      轉自:http://blog.csdn.net/leshami/article/details/5925572

       

      posted on 2014-02-03 09:36  搏擊的小船  閱讀(310)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 99久久国产成人免费网站| 国产又色又爽又黄的网站免费| 国产一区二区三区不卡观| 久久综合亚洲色一区二区三区| 深夜在线观看免费av| 国产情侣一区二区三区| 中文字幕有码高清日韩| 亚洲中文字幕av天堂| 国产免费视频一区二区| 亚洲一区二区国产av| 伊人久久精品无码麻豆一区| 宣城市| 久久久久成人精品无码中文字幕| 中文字幕无线码在线观看| 亚洲国产精品无码一区二区三区| 亚洲综合伊人五月天中文| 国产真实精品久久二三区| 无码人妻精品一区二区三区蜜桃| 日本一区不卡高清更新二区| 视频一区视频二区在线视频| 欧美疯狂三p群体交乱视频| 人妻少妇精品专区性色av| 99国产精品白浆无码流出| 极品粉嫩小泬无遮挡20p| 暖暖影院日本高清...免费| av在线播放国产一区| 亚洲精品国产自在现线最新| 国产伦一区二区三区久久| 9久久精品视香蕉蕉| a∨变态另类天堂无码专区| 网友偷拍视频一区二区三区| 国产精品三级中文字幕| jizz国产免费观看| 欧美三级欧美成人高清| 国产激情一区二区三区成人| 元码人妻精品一区二区三区9 | 久久婷婷国产精品香蕉| 东方av四虎在线观看| 亚洲全网成人资源在线观看| 亚洲一区二区三区自拍公司| 人妻日韩人妻中文字幕|