[英]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 table
和alter index
語句。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.