我對數據庫非常陌生。我想爲oracle中的現有大型數據庫表執行系統分區。有人可以建議 如何在Oracle數據庫中實現對現有表的系統分區?如何在Oracle 11g中進行系統分區?
請注意我只是在尋找系統分區不尋找範圍或散列或複合分區。
我對數據庫非常陌生。我想爲oracle中的現有大型數據庫表執行系統分區。有人可以建議 如何在Oracle數據庫中實現對現有表的系統分區?如何在Oracle 11g中進行系統分區?
請注意我只是在尋找系統分區不尋找範圍或散列或複合分區。
據我所知,現有的表不能分區。你將不得不重新創建它。 對於這種情況,有一個稱爲dbms_redefinition
的Oracle包(詳情請參閱https://docs.oracle.com/database/121/ARPLS/d_redefi.htm),但我將提供一個非常簡單的示例,而不使用此包。
假設你有以下的非分區表:
create table T_TABLE
(
pkey NUMBER not null,
t_data VARCHAR2(250) not null,
partitionkey NUMBER not null
);
如果你想分區表,第一步就是重命名錶:
alter table t_table rename to old_table;
然後,創建新表
create table T_TABLE
(
pkey NUMBER not null,
t_data VARCHAR2(250) not null,
partitionkey NUMBER not null
)
partition by system
(
partition p1 tablespace users,
partition p2 tablespace users,
partition p3 tablespace users
);
現在您可以將舊錶中的表格行插入新表。你的application/sql需要告訴服務器在哪個分區中插入。 例如,像這樣:
insert into t_table partition (p1) select * from old_table where partitionkey = 1;
insert into t_table partition (p2) select * from old_table where partitionkey = 2;
insert into t_table partition (p3) select * from old_table where partitionkey = 3;
commit;
現在你可以刪除舊錶。
drop table old_table;
Fyi,Oracle [在12.2中引入了分區非分區表](https://docs.oracle.com/en/cloud/paas/exadata-express-cloud/csdbf/oracle-database-12-2-new -features.html#GUID-D5D9C311-3597-4494-B8DE-CE33EE4FA546) – Boneist
酷 - 感謝提示。儘管可能需要幾年時間才能使用該新功能。 –
是的,我在同一條船上(我願意爲12.2擴展的to_char/to_number/etc函數獲得我的雙手!),但我認爲這是值得分享的信息* {:-)我相信博客,我讀了它,除了我不記得現在誰發佈了它! – Boneist
什麼是「系統分區」? –
這是應用程序邏輯控制分區結構的Oracle數據庫分區方法。 –
請參閱[this](https://docs.oracle.com/cd/E11882_01/server.112/e25523/partition.htm#BABFCBHC)和[this](https://docs.oracle.com/cd/E11882_01 /server.112/e41084/statements_7002.htm#BABJBDCC)...但不確定這真的有助於解釋OP在這裏要做什麼。 –