簡體   English   中英

如何更改 Oracle 中架構的默認表空間

[英]How to change the default tablespace of the schema in Oracle

有一個名為 Docker 的模式,其中有名為 TABLE2、TABLE3 的表。

例子

SELECT * FROM all_all_tables WHERE TABLE_name= 'TABLE3';

此外,Docker 模式屬於 DEFAULT TABLESPACE SYSTEM 表空間。

select 
    username
,   default_tablespace from dba_users WHERE USERNAME = 'DOCKER';

以下語法用於更改模式的默認表空間。 (TS3 表空間已經存在)

ALTER USER docker DEFAULT tablespace TS3;

然后,當我再次搜索時,我發現 DEFAULT TABLESPACE 已更改。

select 
    username
,   default_tablespace from dba_users WHERE USERNAME = 'DOCKER';

而且,當然,我以為指定了TABLE2和TABLE3的表空間也會改成TS3,於是執行了下面的語句。

但是,該表的表空間是 SYSTEM,而不是 TS3。 我很好奇為什么它沒有改變,我想知道如何。 SELECT * FROM all_all_tables WHERE TABLE_name='TABLE3';

默認表空間就是這樣——創建段時的默認值(通常是表或索引,但段可以是表的分區、物化視圖或其他任何需要空間的東西)並且不指定表空間。 一旦您創建了一個段並將其分配給特定的表空間,除非您移動它,否則它將保留在該表空間中。

假設您使用的是 12.2 或更高版本,因此可以選擇在線移動(在其他版本中,您需要刪除online關鍵字)

alter table table3
  move online tablespace ts3;

你需要為每張桌子這樣做。 如果system表空間中也有索引,您也需要移動這些索引

alter index index_name
  rebuild online tablespace ts3;

根據涉及的表和索引的數量,您可能需要編寫一些動態 SQL 來為您生成各種alter tablealter index語句。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM