Oracle 的 MOVE 操作是否重建表?

Oracle 的 MOVE 操作是否重建表?

Oracle 的 ALTER TABLE ... MOVE 操作實質上是重建表的物理存儲結構,但保留表的邏輯定義不變。

MOVE 操作的本質

  1. 物理重建

    • 創建新的數據段(物理存儲結構)
    • 將原表數據按順序重新插入到新段中
    • 刪除原數據段
    • 更新數據字典指向新段
  2. 邏輯不變

    • 表名、列定義、約束等邏輯結構保持不變
    • 表的對象ID(OBJECT_ID)會發生變化
    • 依賴對象(如視圖、同義詞)不受影響

重建的具體表現

  1. 數據重組
    -- 執行前數據塊狀態
    SELECT extent_id, block_id, blocks 
    FROM dba_extents 
    WHERE segment_name = 'YOUR_TABLE';-- 執行MOVE
    ALTER TABLE your_table MOVE;-- 執行后數據塊狀態(完全改變)
    

輸出示例:

SQL> SELECT extent_id, block_id, blocks FROM dba_extents WHERE segment_name = 'T1' and OWNER='TEST';EXTENT_ID   BLOCK_ID     BLOCKS
---------- ---------- ----------0       2496          81       4696          82       4704          83       4712          84       4720          85       4728          86       6016          87       6024          88       6032          89       6040          810       6048          811       6056          812       6064          813       6072          814       6080          815       6088          816       6272        12817       6400        12818       6528        12819       6656        12820       6784        12821       6912        12822       7040        12823       7168        12824       7296        12825       7424        12826       7552        12827 rows selected.SQL> ALTER TABLE t1 MOVE;Table altered.SQL> SELECT extent_id, block_id, blocks FROM dba_extents WHERE segment_name = 'T1' and OWNER='TEST';EXTENT_ID   BLOCK_ID     BLOCKS
---------- ---------- ----------0      10080          81      10088          82      10096          83      10104          84      10240          85      10248          86      10256          87      10264          88      10272          89      10280          810      10288          811      10296          812      10304          813      10312          814      10320          815      10328          816      10368        12817      10496        12818      10624        12819      10752        12820      10880        12821      11008        12822      11136        12823      14336        12824      14464        12825      14592        12826      14720        12827 rows selected.
  1. DATA_OBJECT_ID變化
    -- 執行前
    

select object_id,data_object_id,object_name,to_char(created,‘yyyy-mm-dd hh24:mi:ss’) created from dba_objects where object_name = ‘T1’ and owner=‘TEST’ ;

– 執行后(新DATA_OBJECT_ID)


輸出示例:```sql
SQL> select object_id,data_object_id ,object_name,to_char(created,'yyyy-mm-dd hh24:mi:ss') created from dba_objects where object_name = 'T1' and owner='TEST' ;OBJECT_ID DATA_OBJECT_ID OBJECT_NAME     CREATED
---------- -------------- --------------- -------------------75061          75870 T1              2025-02-04 23:15:05SQL> ALTER TABLE t1 MOVE;Table altered.SQL> select object_id,data_object_id ,object_name,to_char(created,'yyyy-mm-dd hh24:mi:ss') created from dba_objects where object_name = 'T1' and owner='TEST' ;OBJECT_ID DATA_OBJECT_ID OBJECT_NAME     CREATED
---------- -------------- --------------- -------------------75061          75871 T1              2025-02-04 23:15:05
  1. ROWID變化
    • 所有行的ROWID都會改變
    • 基于ROWID的應用程序需要調整

與真正"重建表"的區別

特性MOVE操作完全重建表(CREATE AS SELECT)
表定義保留所有屬性需要手動重建約束、觸發器等
對象依賴關系自動保持需要手動重建
權限保留原有權限需要重新授權
執行速度較快較慢
高水位線重置完全重置完全重置
索引狀態需要重建需要重建

需要特別注意的影響

  1. 索引處理

    -- MOVE后必須重建索引
    ALTER INDEX your_index REBUILD;
  2. 依賴對象

    • 物化視圖日志會被清除
    • 基于ROWID的物化視圖需要刷新
    • 某些類型的約束可能需要重新驗證
  3. 在線操作限制

    -- 12C開始支持有限制的在線MOVE
    ALTER TABLE your_table MOVE ONLINE;
    -- 但仍有部分鎖限制,可能阻塞DML
    

何時應該使用MOVE

  1. 典型場景

    • 表碎片化嚴重(超過30%空閑空間)
    • 需要遷移到其他表空間
    • 需要改變存儲參數(如壓縮)
    • 高水位線遠高于實際數據位置
  2. 替代方案比較

    • 對于小型表:CREATE TABLE new_table AS SELECT * FROM old_table
    • 對于最小化停機:DBMS_REDEFINITION在線重定義
    • 對于部分優化:SHRINK SPACE(不改變ROWID)

MOVE操作是Oracle提供的一種高效的"表重建"機制,它在保持邏輯結構不變的前提下,完全重建表的物理存儲結構,是維護Oracle數據庫性能的重要工具。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/82653.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/82653.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/82653.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

數據庫中表的設計規范

表的結構 列:由多個字段構成,每個字段存儲單一數據項,列的先后順序對表沒有影響 行:記錄,一個表中不能存在完全相同的兩行,行的順序對表沒有影響 主鍵:primary key 表中的一列或多列組合起來…

[學習]C語言指針函數與函數指針詳解(代碼示例)

C語言指針函數與函數指針詳解 文章目錄 C語言指針函數與函數指針詳解一、引言二、指針函數(函數返回指針)定義與語法典型應用場景注意事項 三、函數指針(指向函數的指針)定義與聲明初始化與調用賦值方式調用語法 高級應用回調函數…

Python 實現桶排序詳解

1. 核心原理 桶排序是一種非比較型排序算法,通過將數據分配到多個“桶”中,每個桶單獨排序后再合并。其核心步驟包括: 分桶:根據元素的范圍或分布,將數據分配到有限數量的桶中。桶內排序:對每個非空桶內的…

brep2seq 論文筆記

Brep2Seq: a dataset and hierarchical deep learning network for reconstruction and generation of computer-aided design models | Journal of Computational Design and Engineering | Oxford Academic 這段文本描述了一個多頭自注意力機制(MultiHead Attenti…

在 LangGraph 中集成 Mem0 記憶系統教程

簡介 LangGraph 是一個強大的對話流程編排框架,而 Mem0 則是一個高效的記憶系統。本教程將介紹如何將兩者結合,創建一個具有記憶能力的客服助手系統。 環境準備 首先安裝必要的依賴: pip install langgraph mem0 langchain openai基礎配置…

ceph 報錯 full ratio(s) out of order

full ratio(s) out of order你遇到的錯誤信息: full ratio(s) out of order說明你設置的 OSD 空間使用閾值之間的數值順序不正確,即: nearfull_ratio ≤ backfillfull_ratio ≤ full_ratio ≤ osd_failsafe_full_ratio如果它們的關系不滿足這個順序,Ceph 就會報這個錯誤。…

NB-IoT NPUSCH(三)-資源映射

資源映射單獨做一章節,是因為NPUSCH的資源映射比較復雜。與LTE不同,為了提高數據傳輸的質量,NB-IoT的數據會有重復傳輸。NPUSCH一開始生成的TBS只與子載波個數、RU個數有關,與重復次數沒有關系。初始產生的數據為 個時隙&#xff…

華為OD機試真題——荒島求生(2025B卷:200分)Java/python/JavaScript/C/C++/GO最佳實現

2025 B卷 200分 題型 本專欄內全部題目均提供Java、python、JavaScript、C、C++、GO六種語言的最佳實現方式; 并且每種語言均涵蓋詳細的問題分析、解題思路、代碼實現、代碼詳解、3個測試用例以及綜合分析; 本文收錄于專欄:《2025華為OD真題目錄+全流程解析+備考攻略+經驗分…

centos7安裝MySQL(保姆級教學)

在 Linux 系統的軟件管理中,YUM(Yellowdog Updater, Modified)包管理器是不可或缺的工具,而 YUM 源的選擇與配置直接影響著軟件安裝與更新的效率。本文將深入解析網絡 YUM 源的分類,詳細介紹如何使用知名平臺提供的 YU…

DeepSeek 賦能教育游戲化:AI 重構學習體驗的技術密碼

目錄 一、引言:教育游戲化與 DeepSeek 的相遇二、DeepSeek 技術剖析2.1 核心架構2.2 關鍵技術 三、教育游戲化設計的奧秘3.1 概念與意義3.2 常見方法與元素3.3 成功案例借鑒 四、DeepSeek 在教育游戲化設計中的多面應用4.1 個性化學習路徑打造4.2 智能教學輔助工具4…

WPF命令與MVVM模式:打造優雅的應用程序架構

?? 打造優雅的應用程序架構 1. ?? 命令系統基礎1.1 ?? 為什么需要命令?1.2 ??? ICommand接口1.3 ??? 實現基本命令2. ??? MVVM模式詳解2.1 ?? MVVM三大組件2.2 ??? 創建ViewModel基類2.3 ?? 典型ViewModel示例3. ?? 命令綁定實戰3.1 ?? View中的命令…

真實案例拆解:智能AI客服系統中的兩類緩存協同

真實案例拆解:智能客服系統中的兩類緩存協同 在AI客服系統中,“響應速度”與“語義準確性”是一對天然的矛盾體。為了實現秒級應答與智能理解的雙重目標,系統需要在技術架構中融合精確命中的緩存系統(如Redis)與模糊語義識別的向量數據庫(如Milvus)。這兩種能力的結合,…

FastAPI與MongoDB分片集群:異步數據路由與聚合優化

title: FastAPI與MongoDB分片集群:異步數據路由與聚合優化 date: 2025/05/26 16:04:31 updated: 2025/05/26 16:04:31 author: cmdragon excerpt: FastAPI與MongoDB分片集群集成實戰探討了分片集群的核心概念、Motor驅動配置技巧、分片數據路由策略、聚合管道高級應用、分片…

一起學數據結構和算法(三)| 字符串(線性結構)

字符串(String) 字符串是由字符組成的有限序列,在計算機中通常以字符數組形式存儲,支持拼接、查找、替換等操作。 簡介 字符串是計算機科學中最常用的數據類型之一,由一系列字符組成的有限序列。在大多數編程語言中&…

2025電工杯數學建模競賽A題 光伏電站發電功率日前預測問題 保姆級教程講解|模型講解

完整內容請看文章最下面的推廣群 2025電工杯數學建模競賽 A題保姆級分析完整思路代碼數據教學 2025電工杯 A題保姆級教程思路分析 DS數模-全國大學生電工數學建模(電工杯) A題保姆級教程思路分析 A題:光伏電站發電功率日前預測問題 下面我…

React Native 拼音及拼音首字母搜索組件開發

寫在前面 “用戶說找不到聯系人?拼音搜索功能必須安排上!” —— 當產品經理第N次提出這個需求時,我意識到需要開發一個強大的拼音搜索組件。本文將詳細介紹如何開發一個支持拼音匹配、首字母搜索的React Native搜索組件,讓你的應…

springboot--實戰--大事件--用戶接口開發

開發模式&環境搭建 開發模式: 前后端分離開發 前端程序員寫前端頁面,后端程序員寫后端的接口,前端工程發送請求來訪問后臺,后臺處理完請求后要給前端相應對應的數據。 還需要一套標準來約束即接口文檔,在接口文…

html使用JS實現賬號密碼登錄的簡單案例

目錄 案例需求 思路 錯誤案例及問題 修改思路 案例提供 所需要的組件 <input>標簽&#xff0c;<button>標簽&#xff0c;<script>標簽 詳情使用參考&#xff1a;HTML 教程 | 菜鳥教程 案例需求 編寫一個程序&#xff0c;最多允許用戶嘗試登錄 3 次。…

小米玄戒O1架構深度解析(一):十核異構設計與緩存層次詳解

前言 這兩天&#xff0c;小米的全新SOC玄戒O1橫空出世&#xff0c;引發了科技數碼圈的一次小地震&#xff0c;那么小米的這顆所謂的自研SOC&#xff0c;內部究竟有著什么不為人知的秘密呢&#xff1f;我們一起一探究竟。 目錄 前言1 架構總覽1.1 基本構成1.2 SLC缺席的原因探…

VSCode如何像Pycharm一樣“““回車快速生成函數注釋文檔?如何設置文檔的樣式?autoDocstring如何設置自定義模板?

文章目錄 ?? 介紹 ???? 演示環境 ???? 讓VSCode擁有PyCharm級注釋生成能力 ???? 實現方案??? 備用方案?? 自定義注釋文檔格式樣式 ???? 切換主流注釋風格? 深度自定義模板??? 類型提示與注釋聯動優化?? 相關鏈接 ???? 介紹 ?? 用PyCharm寫P…