国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Oracle 非分區表轉換為分區表

IT那活兒 / 2481人閱讀
Oracle 非分區表轉換為分區表

點擊上方“IT那活兒”,關注后了解更多內容,不管IT什么活兒,干就完了!!!





11g環境




1. 創建實驗表和實驗數據


----------
SQL> create table test_p (id number);
Table created.
SQL> declare
i number:=1;
begin
for i in 1..3000 loop
insert into scott.test_p values(i);
commit;
end loop;
end;
/
PL/SQL procedure successfully completed.
2. 通過CTAS重建表為分區表
1)簡答易用,采用DDL語句,產生的redo較少;
2)數據一致性差;
3)適于修改不頻繁的表。
----------
SQL> create table test_p2
partition by range (id)
(
partition p1 values less than (1000
),
partition p2 values less than (2000),
partition p3 values less than (3000),
partition p4 values less than (maxvalue)
)
as
select * from test_p
;
Table created.
3. 在線重定義online redefinition
3.1 為實驗表創建索引
----------
SQL> create index t_p on test_p(id);
Index created.


3.2 檢查實驗表是否可以在線重定義

1)保證數據的一致性;
2)表必須有主鍵;
3)需要有中間表;
4)必須有足夠兩份表數據的空間。
通過報錯了解,當前表缺少主鍵:
----------
SQL> exec dbms_redefinition.can_redef_table( scott,test_p,dbms_redefinition.cons_use_pk);
BEGIN dbms_redefinition.can_redef_table( scott,test_p,dbms_redefinition.cons_use_pk); END;
*
ERROR at line 1:
ORA-12089: cannot online redefine table "SCOTT"."TEST_P" with no primary key
ORA-06512: at "SYS.DBMS_REDEFINITION", line 143
ORA-06512: at "SYS.DBMS_REDEFINITION", line 1635
ORA-06512: at line 1
3.3 創建主鍵重新檢查通過
----------
SQL> alter table test_p add constraint pt_p primary key(id);
Table altered.
SQL> exec dbms_redefinition.can_redef_table( scott,test_p,dbms_redefinition.cons_use_pk);
PL/SQL procedure successfully completed.
3.4 新建臨時分區表并添加主鍵約束
----------
SQL> create table p_temp (id number)
partition by range (id)
(
partition p1 values less than(1000
),
partition p2 values less than(2000),
partition p3 values less than(3000),
partition p4 values less than(maxvalue)
)
;
Table created.
SQL> alter table p_temp add constraint pp_temp primary key(id);
Table altered.
3.5 啟動在線重定義
----------
SQL> exec dbms_redefinition.start_redef_table(scott, test_p, p_temp);
PL/SQL procedure successfully completed.
3.6 結束在線重定義并檢查結果
----------
SQL> exec dbms_redefinition.finish_redef_table(scott, test_p, p_temp);
PL/SQL procedure successfully completed.
SQL> select table_name,partition_name from user_tab_partitions where table_name=TEST_P;
TABLE_NAME PARTITION_NAME
------------------------------ ------------------------------
TEST_P P1
TEST_P P2
TEST_P P3
TEST_P P4






12c環境下



相對于11g中的方法,12c的新特性更方便使用(利用12c的新特性)。
存在的部分限制:
  • 它不能被用來分割一個索引有序的表(IOT);
  • 如果表有域索引,就不能使用它;
  • 只能在脫機模式下將表轉換為reference-partitioned子表。
1. 創建實驗表和數據
----------
SQL> create table test_p (id number);
Table created.
SQL> declare
i number:=1;
begin
for i in 1..3000 loop
insert into scott.test_p values(i);
commit;
end loop;
end;
/
PL/SQL procedure successfully completed.
2. 查看當前表的分區情況
----------
SQL> select table_name,partition_name from user_tab_partitions where table_name=TEST_P;
no rows selected
3. 為實驗表添加主鍵約束
----------
SQL> alter table test_p add constraint tp_p primary key (id);
Table altered.
4. 利用12c的新特性更改非分區表
----------
SQL> alter table test_p modify
partition by range (id)
(
partition p1 values less than (1000
),
partition p2 values less than (2000),
partition p3 values less than (3000),
partition p4 values less than (maxvalue)
)
update indexes (tp_p global)
;
Table altered.
5. 查看當前表的分區情況
----------
SQL> select table_name,partition_name from user_tab_partitions where table_name=TEST_P;
TABLE_NAME PARTITION_NAME
------------------------------
TEST_P P1
TEST_P P2
TEST_P P3
TEST_P P4






對分區表進行擴展的兩種情況



1. 當最大的分區的值有界限
1.1 創建實驗表
----------
SQL> create table test_p2 (id number)
partition by range (id)
(
partition p1 values less than (1000),
partition p2 values less than (2000),
partition p3 values less than (3000)
);
Table created.
1.2 查看當前分區情況:
----------
SQL> select table_name,partition_name from user_tab_partitions where table_name=TEST_P2;
TABLE_NAME PARTITION_NAME
------------------------------ ------------------------------
TEST_P2 P1
TEST_P2 P2
TEST_P2 P3
1.3 添加分區:
----------
SQL> alter table test_p2 add partition p4 values less than (4000);
Table altered.
1.4 查看添加后的分區:
----------
SQL> select table_name,partition_name from user_tab_partitions where table_name=TEST_P2;
TABLE_NAME PARTITION_NAME
------------------------------ ------------------------------
TEST_P2 P1
TEST_P2 P2
TEST_P2 P3
TEST_P2 P4
2. 當最大分區的值為maxvalue時
這時直接添加分區會返回報錯,因為添加的分區的值應該大于上一個分區,但上一個分區為maxvalue顯然通過這個方法無法實現分區的添加。
----------
SQL> alter table test_p add partition p5 values less than (4000);
alter table test_p add partition p5 values less than (4000)
*
ERROR at line 1:
ORA-14074: partition bound must collate higher than that of the last partition


此時,可以通過分割存在maxvalue的分區來實現對分區的增加:


----------
SQL> alter table test_p split partition p4 at (4000) into (partition p5,partition p4);
Table altered.






Dblink的創建



1. 配置tns文件
2. 查看當前用戶的權限
SQL> conn scott/oracle
Connected.
SQL> select * from user_sys_privs;
USERNAME PRIVILEGE ADM
------------------------------ ---------------------------------------- ---
SCOTT UNLIMITED TABLESPACE NO


賦予當前用戶創建dblink的權限:


----------
SQL> grant create public database link to scott;
Grant succeeded.
SQL> grant create database link to scott;
Grant succeeded.
再次確認權限:
----------
SQL> select * from user_sys_privs;

USERNAME PRIVILEGE ADM
------------------------------ ---------------------------------------- ---
SCOTT CREATE DATABASE LINK NO
SCOTT UNLIMITED TABLESPACE NO
SCOTT CREATE PUBLIC DATABASE LINK NO
3. 創建公共dblink
4. 查看創建結果并測試



本文作者:王 剛

本文來源:IT那活兒(上海新炬王翦團隊)

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/129605.html

相關文章

  • DBASK問答集萃(2)

    摘要:新晉技術專家下面是墨天輪部分新晉的技術專家。大家可以點擊往期閱讀墨天輪技術專家邀請函了解詳情,申請成為我們的技術專家,加入專家團隊,與我們一起創建一個開放互助的數據庫技術社區。新關聯公眾號墨天輪是一個開放互助的數據庫技術社區。 引言 近期我們在DBASK小程序增加了數據庫 MongoDB、Redis、 Elasticsearch、DB2、Weblogic 等新的的專題欄目和一些新的技術...

    liuchengxu 評論0 收藏0

發表評論

0條評論

IT那活兒

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<