亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么理解ORACLE?MOVE?表空間

發布時間:2021-11-12 09:19:15 來源:億速云 閱讀:120 作者:柒染 欄目:關系型數據庫

怎么理解ORACLE MOVE 表空間,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

move一個表到另外一個表空間時,索引不會跟著一起move,而且會失效(LOB類型例外)。做表空間轉移之前,被轉移表的用戶必須在目的表空間上有使用表空間的權限,否則會報錯:ORA-01950: no privileges on tablespace...
表move分為
1.普通表move
2.分區表move
3.LONG
4.LOB大字段類型move
5.索引的move通過rebuild來實現
一、move普通表、索引
1、基本語法:
a、alter table table_name tmove tablespace xxx;
b、alter index index_name rebuild tablespace xxx;
move過的普通表,在不用到失效的索引的操作語句中,語句執行正常,但如果操作的語句用到了索引(主鍵當做唯一索引),則此時報告用到的索引失效,語句執行失敗,其他如外鍵,非空約束,缺省值等不會失效。
2、重新創建主鍵或索引基本語法為:
a、alter index index_name rebuild;
b、alter index pk_name rebuild;
3、move索引用rebuild語法:
a、alter index index_name rebuild tablespace tbs_name;
b、alter index pk_name rebuild tablespace tbs_name;
二、move分區表及索引
和普通表一樣,分區表索引會失效,區別的僅僅是語法而已。
1、分區基本語法
注:如果是單級分區,則使用關鍵字PARTITION,如果是多級分區,則使用SUBPARTITION替代PARTITION。
如果分區或分區索引比較大,可以使用并行move或rebuild,PARALLEL (DEGREE 2);
如:
ALTER TABLE PART_ALARM move SUBPARTITION p_01 TABLESPACE usersPARALLEL (DEGREE 2);
--全局索引
ALTER INDEX GX1_ PART_ALARM REBUILD tablespace usersPARALLEL (DEGREE 2);
--分區索引
ALTER INDEX LX1_ PART_ALARM REBUILD SUBPARTITION p_01 TABLESPACE users1PARALLEL (DEGREE 2);
ALTER INDEX LX1_ PART_ALARM REBUILD SUBPARTITION p_02 TABLESPACE users2PARALLEL (DEGREE 2);
………………
ALTER INDEX LX1_ PART_ALARM REBUILD SUBPARTITION p_0n TABLESPACE usersnPARALLEL (DEGREE 2);
2、移動表的某個分區
ALTER TABLE tab_name move PARTITION partition_name TABLESPACE tbs_name;
3、重建全局索引
ALTER INDEX global_index REBUILD;

ALTER INDEX global_index REBUILD tablespace tbs_name;
4、重建局部索引
ALTER TABLE tab_name MODIFY PARTITION partition_name REBUILD UNUSABLE LOCAL INDEXES;

ALTER INDEX local_index_name REBUILD PARTITION partition_name TABLESPACE tbs_name;

提示:
USER_PART_TABLES
USER_IND_PARTITIONS
USER_IND_SUBPARTITIONS
USER_LOB_PARTITIONS
USER_LOB_SUBPARTITIONS
USER_PART_INDEXES
USER_PART_LOBS
user_segments
三、move LONG類型
可以使用DBMS_REDEFINITION包可以提供一些方便,不過沒用過。
long類型不能通過MOVE來傳輸。特別提示,盡量不要用LONG類型,特難管理。
1、LONG不能使用insert into ... select ...等帶select的模式。

create table t123 (id int,en long);

insert into t123(id,en) select * from t123;
報告錯誤,可以用pl/sql來幫助解決,如:
declare
cursor cur_t123 is select * from t123;
use_t123 cur_t123%rowtype;
begin

open cur_t123;
loop
fetch cur_t123 into use_t123;
exit when cur_t123%notfound;

insert into t123(id,en) values (use_t123.id,use_t123.en);

end loop;
close cur_t123;

end;
/
2、LONG類型字段的表的轉移
1.)create新表的方法。
a.create一個新的表,存儲在需要轉移的表空間。
b.創建新的索引(使用tablespace子句指定新的表空間)。
c.把數據轉移過來
2.)用COPY的方法
copy from bigboar/bigboar@bigboar_sid insert t123(id,en) using select id,en from t123;
3、直接就把LONG轉換成CLOB類型
create table t321(id int,en clob) tablespace users;
insert into t321(id,en) select id,to_lob(en) from t123;
4、exp/imp
exp bigboar/bigboar file=a.dat tables=t123
imp bigboar/bigboar file=a.dat full=y IGNORE =y
a.drop掉舊表。
b.rename新表為舊表表名。
四、LOB類型
在建立含有lob字段的表時,oracle會自動為lob字段建立兩個單獨的segment,一個用來存放數據(segment_type=LOBSEGMENT),另一個用來存放索引(segment_type=LOBINDEX)。默認它們會存儲在和表一起的表空間。我們對表MOVE時,LOG類型字段和該字段的索引不會跟著MOVE,必須要單獨來進行MOVE,語法如下如:
alter table t321 move tablespace users;
alter table t321 move lob(en) store as (tablespace users);
大家都知道在我們建立含有lob字段的表時,oracle會自動為lob字段建立兩個單獨的segment,一個用來存放數據,另一個用來存放索引,并且它們都會存儲在對應表指定的表空間中。但是當我們用alter table tb_name move tablespace tbs_name;來對表做空間遷移時只能移動非lob字段以外的數據,而如果我們要同時移動lob相關字段的數據,我們就必需用如下的含有特殊參數據的文句來完成:
alter table tb_name move tablespace tbs_name lob (col_lob1,col_lob2) store as(tablesapce tbs_name);
五、實際工作操作示例
1、說明
把SOURCE_TABLESPACE表空間上的表移動到DEST_TABLESPACE表空間上,刪除SOURCE_TABLESPACE,釋放磁盤空間,重新再建一個比原先小的SOURCE_TABLESPACE表空間,再把表移回SOURCE_TABLESPACE。
2、步驟
1.)檢查表空間表字段有沒有分區、包含LOB字段和LONG字段等

2.) 檢查表空間有什么內容(包括表、索引、分區等)
select segment_name,segment_type from dba_segments where tablespace_name='SOURCE_TABLESPACE';

3.) 移動表和索引
alter table IBSS.TB_CM_MSPARAM_HIST move tablespace DEST_TABLESPACE;
alter table IBSS.TB_CM_SPRESENT_HIST move tablespace DEST_TABLESPACE;
alter table IBSS.TB_CM_MSSRVLTD_HIST move tablespace DEST_TABLESPACE;
alter table IBSS.TB_CM_MSITEM_HIST move tablespace DEST_TABLESPACE;
alter table IBSS.TB_CM_MSOBJECT_HIST move tablespace DEST_TABLESPACE;
alter table IBSS.TB_CM_MSOBJGRP_HIST move tablespace DEST_TABLESPACE;
alter table IBSS.TB_CM_SERVACCT_HIST move tablespace DEST_TABLESPACE;
alter table IBSS.TB_CM_BANKACCT_HIST move tablespace DEST_TABLESPACE;
alter table IBSS.TB_CM_ACCT_HIST move tablespace DEST_TABLESPACE;
alter table IBSS.TB_CM_MSINFO_HIST move tablespace DEST_TABLESPACE;
alter table IBSS.TB_CM_MSITEMR_HIST move tablespace DEST_TABLESPACE;

alter index IBSS.IX_CM_MSINFOUST rebuild tablespace DEST_TABLESPACE;
alter index IBSS.IX_CM_MSINMSINF rebuild tablespace DEST_TABLESPACE;
alter index IBSS.IX_CM_MSIN _DISC rebuild tablespace DEST_TABLESPACE;
alter index IBSS.IX_CM_MSITEMNG rebuild tablespace DEST_TABLESPACE;
alter index IBSS.IX_CM_MSOBJE ID rebuild tablespace DEST_TABLESPACE;
alter index IBSS.IX_CM_M_MSINFO rebuild tablespace DEST_TABLESPACE;
alter index IBSS.IX_CM_MSOBJET rebuild tablespace DEST_TABLESPACE;
alter index IBSS.IX_CM_MSPRINFO rebuild tablespace DEST_TABLESPACE;

4.) 刪除表空間SOURCE_TABLESPACE
DROP TABLESPACE HPMDBS1 INCLUDING CONTENTS and DATAFILES;

5.) 重新創建表空間
CREATE TABLESPACE HPMDBS1 DATAFILE
 '/opt/oracle/oradata1/tbs0101.dbf' SIZE 6192M AUTOEXTEND OFF;

6.) 重新移動表和索引到原空間
alter table IBSS.TB_CM_MSPARAM_HIST move tablespace SOURCE_TABLESPACE;
alter table IBSS.TB_CM_SPRESENT_HIST move tablespace SOURCE_TABLESPACE;
alter table IBSS.TB_CM_MSSRVLTD_HIST move tablespace SOURCE_TABLESPACE;
alter table IBSS.TB_CM_MSITEM_HIST move tablespace SOURCE_TABLESPACE;
alter table IBSS.TB_CM_MSOBJECT_HIST move tablespace SOURCE_TABLESPACE;
alter table IBSS.TB_CM_MSOBJGRP_HIST move tablespace SOURCE_TABLESPACE;
alter table IBSS.TB_CM_SERVACCT_HIST move tablespace SOURCE_TABLESPACE;
alter table IBSS.TB_CM_BANKACCT_HIST move tablespace SOURCE_TABLESPACE;
alter table IBSS.TB_CM_ACCT_HIST move tablespace SOURCE_TABLESPACE;
alter table IBSS.TB_CM_MSINFO_HIST move tablespace SOURCE_TABLESPACE;
alter table IBSS.TB_CM_MSITEMR_HIST move tablespace SOURCE_TABLESPACE;

alter index IBSS.IX_CM_MSINFOUST rebuild tablespace SOURCE_TABLESPACE;
alter index IBSS.IX_CM_MSINMSINF rebuild tablespace SOURCE_TABLESPACE;
alter index IBSS.IX_CM_MSIN _DISC rebuild tablespace SOURCE_TABLESPACE;
alter index IBSS.IX_CM_MSITEMNG rebuild tablespace SOURCE_TABLESPACE;
alter index IBSS.IX_CM_MSOBJE ID rebuild tablespace SOURCE_TABLESPACE;
alter index IBSS.IX_CM_M_MSINFO rebuild tablespace SOURCE_TABLESPACE;
alter index IBSS.IX_CM_MSOBJET rebuild tablespace SOURCE_TABLESPACE;
alter index IBSS.IX_CM_MSPRINFO rebuild tablespace SOURCE_TABLESPACE;

7.) 檢查原先表和索引是否正確,檢查表空間索引有沒有無效。
SELECT index_name,index_type, STATUS,partitioned, table_name
FROM User_Indexes
Where status=’UNUSABLE’;

六、常用SQL
     該方法可以用來釋放被表空間占用的大量的磁盤空間,如果數據對象非常多就很麻煩。可以用以下的SQL來批量處理。
1、重建分區/普通表和索引的拼接sql語句
SELECT 'ALTER INDEX '||t1.owner||'.'||segment_name||' REBUILD '||''||
      CASE WHEN t1.segment_type = 'INDEX PARTITION' THEN 'PARTITION '||partition_name
           WHEN t1.segment_type = 'INDEX SUBPARTITION' THEN 'SUBPARTITION '||partition_name
      ELSE ''
      END
      ||' tablespace '||'&DEST_TABLESPACE'||';'
FROM dba_segments t1
WHERE tablespace_name='&SOURCE_TABLESPACE' AND segment_type IN ('INDEX','INDEX PARTITION','INDEX SUBPARTITION')
UNION
SELECT 'ALTER TABLE '||t1.owner||'.'||segment_name||' MOVE '||''||
      CASE WHEN t1.segment_type = 'TABLE PARTITION' THEN 'PARTITION '||partition_name
           WHEN t1.segment_type = 'TABLE SUBPARTITION' THEN 'SUBPARTITION '||partition_name
      ELSE ''
      END
      ||' tablespace '||'&DEST_TABLESPACE'||';'
FROM dba_segments t1
WHERE tablespace_name='&SOURCE_TABLESPACE' AND segment_type IN ('TABLE','TABLE PARTITION')
ORDER BY 1 DESC;

2、轉移LOB字段SQL
SELECT 'ALTER TABLE '||t2.owner||'.'||t2.table_name||' move lob ('||t1.segment_name||')'||' STORE AS ('||' tablespace '||&end_tablespace||');'
FROM dba_segments t1,dba_lobs t2
WHERE t1.segment_name=t2.segment_name AND tablespace_name='&source_tablespace' AND segment_type IN ('LOBINDEX','LOBSEGMENT','LOB PARTITION');

看完上述內容,你們掌握怎么理解ORACLE MOVE 表空間的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宕昌县| 读书| 绥棱县| 同仁县| 桂平市| 钦州市| 江川县| 周口市| 漳州市| 绥德县| 大名县| 平陆县| 临城县| 日土县| 三门峡市| 洱源县| 前郭尔| 湄潭县| 巴里| 绍兴市| 兰州市| 博客| 张家港市| 饶平县| 墨脱县| 韩城市| 阿合奇县| 枞阳县| 长沙县| 昌平区| 屏东市| 西贡区| 临汾市| 江津市| 新邵县| 兴安县| 荣成市| 锡林郭勒盟| 玛多县| 东港市| 平遥县|