DM7,DM8和ORACLE中對分割槽split的區別

huiwenshu發表於2020-07-29

在oracle中,我們可以透過如下的命令去split分割槽,可以保留原分割槽名。達夢7和達夢8不能保留原分割槽名,我們用如下的命令來進行測試:

oracle 11g:

CREATE TABLE HC.PARTITION_HB 

   (  PID NUMBER NOT NULL , 

      PITEM VARCHAR2(200), 

      PDATA DATE NOT NULL 

   ) 

  PARTITION BY RANGE (PID) 

 (PARTITION PART_01  VALUES LESS THAN (5) , 

 PARTITION PART_02  VALUES LESS THAN (10)  , 

 PARTITION PART_03  VALUES LESS THAN (20) , 

 PARTITION PART_MAX  VALUES LESS THAN (MAXVALUE) ) ;

 

BEGIN

FOR I IN 1..150 LOOP

INSERT INTO HC.PARTITION_HB  VALUES(I,'AA'||I,sysdate);

COMMIT;

END LOOP;

END;



alter table hc.partition_hb SPLIT PARTITION part_max AT(150) INTO

(PARTITION PART_04,PARTITION PART_MAX);


select * from hc.partition_hb partition(part_max);


ALTER TABLE hc.partition_hb RENAME PARTITION part_max TO part_max1;


執行成功,可以用rename來重新命名分割槽

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

DM7 中:


create user hc identified by dameng123;

grant dba to hc;


CREATE TABLE HC.PARTITION_HB 

   (  PID NUMBER NOT NULL ENABLE, 

      PITEM VARCHAR2(200), 

      PDATA DATE NOT NULL ENABLE

   ) 

  PARTITION BY RANGE (PID) 

 (PARTITION PART_01  VALUES LESS THAN (5) , 

 PARTITION PART_02  VALUES LESS THAN (10)  , 

 PARTITION PART_03  VALUES LESS THAN (20) , 

 PARTITION PART_MAX  VALUES LESS THAN (MAXVALUE) ) ;

 

BEGIN

FOR I IN 1..150 LOOP

INSERT INTO HC.PARTITION_HB  VALUES(I,'AA'||I,sysdate);

COMMIT;

END LOOP;

END;


select count(1) from hc.partition_hb partition(part_max);


alTer table hc.partition_hb SPLIT PARTITION part_max AT(150) INTO

(PARTITION PART_04,PARTITION PART_MAX1);


ALTER TABLE hc.partition_hb RENAME PARTITION part_max1 TO part_max;


[執行語句1]:

ALTER TABLE hc.partition_hb RENAME PARTITION part_max1 TO part_max;

執行失敗(語句1)

第 1 行, 第 74 列[PARTITION]附近出現錯誤[-2007]: 

語法分析出錯


可以看到達夢7不支援rename,也不支援物件重名,也就是split後的分割槽在原始表中不能有,故只能改成part_max1;

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

dm8:


[root@dm8os tool]# ./disql sysdba/dameng123

disql V8

SQL> show user;

未知的 SHOW 選項 user

SQL> select user;

未連線

SQL> conn sysdba/dameng123


伺服器[LOCALHOST:5236]:處於普通配置狀態

登入使用時間: 4.958(毫秒)

SQL> create user hc identified by dameng123;

grant dba to hc;

create user hc identified by dameng123;

[-510]:系統處於MOUNT狀態.

已用時間: 21.042(毫秒). 執行號:0.

SQL> grant dba to hc;

[-510]:系統處於MOUNT狀態.

已用時間: 2.532(毫秒). 執行號:0.

SQL> 

SQL> CREATE TABLE HC.PARTITION_HB 

2      (  PID NUMBER NOT NULL ENABLE, 

3         PITEM VARCHAR2(200), 

4         PDATA DATE NOT NULL ENABLE

5      ) 

6     PARTITION BY RANGE (PID) 

7    (PARTITION PART_01  VALUES LESS THAN (5) , 

8    PARTITION PART_02  VALUES LESS THAN (10)  , 

9    PARTITION PART_03  VALUES LESS THAN (20) , 

10   PARTITION PART_MAX  VALUES LESS THAN (MAXVALUE) ) ;

CREATE TABLE HC.PARTITION_HB 

   (  PID NUMBER NOT NULL ENABLE, 

      PITEM VARCHAR2(200), 

      PDATA DATE NOT NULL ENABLE

   ) 

  PARTITION BY RANGE (PID) 

 (PARTITION PART_01  VALUES LESS THAN (5) , 

 PARTITION PART_02  VALUES LESS THAN (10)  , 

 PARTITION PART_03  VALUES LESS THAN (20) , 

 PARTITION PART_MAX  VALUES LESS THAN (MAXVALUE) ) ;

[-510]:系統處於MOUNT狀態.

已用時間: 3.614(毫秒). 執行號:0.

SQL> alter database open;

操作已執行

已用時間: 00:00:01.924. 執行號:0.

SQL> create user hc identified by dameng123;

create user hc identified by dameng123;

第1 行附近出現錯誤[-2124]:物件[HC]已存在.

已用時間: 1.310(毫秒). 執行號:0.

SQL> grant dba to hc;

操作已執行

已用時間: 11.131(毫秒). 執行號:4.

SQL> 

SQL> CREATE TABLE HC.PARTITION_HB 

2      (  PID NUMBER NOT NULL ENABLE, 

3         PITEM VARCHAR2(200), 

4         PDATA DATE NOT NULL ENABLE

5      ) 

6     PARTITION BY RANGE (PID) 

7    (PARTITION PART_01  VALUES LESS THAN (5) , 

8    PARTITION PART_02  VALUES LESS THAN (10)  , 

9    PARTITION PART_03  VALUES LESS THAN (20) , 

10   PARTITION PART_MAX  VALUES LESS THAN (MAXVALUE) ) ;

操作已執行

已用時間: 28.160(毫秒). 執行號:5.

SQL>  

2   BEGIN

3   FOR I IN 1..150 LOOP

4   INSERT INTO HC.PARTITION_HB  VALUES(I,'AA'||I,sysdate);

5   COMMIT;

6   END LOOP;

7   END;

8   /

DMSQL 過程已成功完成

已用時間: 257.421(毫秒). 執行號:6.

SQL> select count(1) from hc.partition_hb partition(part_max);


行號     COUNT(1)            

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

1          131


已用時間: 2.695(毫秒). 執行號:7.

SQL> alTer table hc.partition_hb SPLIT PARTITION part_max AT(150) INTO

2   (PARTITION PART_04,PARTITION PART_MAX);

alTer table hc.partition_hb SPLIT PARTITION part_max AT(150) INTO

(PARTITION PART_04,PARTITION PART_MAX);

第2 行附近出現錯誤[-2622]:分割槽名與資料庫物件名稱衝突.

已用時間: 0.757(毫秒). 執行號:0.

SQL> alTer table hc.partition_hb SPLIT PARTITION part_max AT(150) INTO

2   (PARTITION PART_04,PARTITION PART_MAX1);

操作已執行

已用時間: 90.611(毫秒). 執行號:8.

SQL> ALTER TABLE hc.partition_hb RENAME PARTITION part_max1 TO part_max;

操作已執行

已用時間: 117.870(毫秒). 執行號:9.

SQL> 


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

總結: split分割槽時,oracle可以使用原有分割槽名,DM中不可以,DM8支援rename partition操作,dm7不支援。

高版本還是功能更完善啊^_^



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23288301/viewspace-2707818/,如需轉載,請註明出處,否則將追究法律責任。

相關文章