oracle快速向表插入大量數據

来源:https://www.cnblogs.com/dongchao3312/archive/2020/05/08/12843870.html
-Advertisement-
Play Games

當需要對一個非常大的表INSERT的時候,會消耗非常多的資源,因為update表的時候,oracle需要生成 redo log和undo log;此時最好的解決辦法是用insert, 並且將表設置為nologging;當把表設為nologging後,並且使用的insert時,速度是最快的,這個時候o ...


   當需要對一個非常大的表INSERT的時候,會消耗非常多的資源,因為update表的時候,oracle需要生成 redo log和undo log;此時最好的解決辦法是用insert, 並且將表設置為nologging;當把表設為nologging後,並且使用的insert時,速度是最快的,這個時候oracle只會生成最低限度的必須的redo log,而沒有一點undo信息。如果有可能將index也刪除,重建
   1.alter table table_name nologging;
   2. insert into table_name select * from xxxx; 

對此有了更好的解決方法:

  1、alter table nologging;
     註釋:Nologging的設置跟資料庫的運行模式有關
       a、查詢當前資料庫的歸檔狀態:
            select name,log_mode from v$database;
            預設為 NOARCHIVELOG 非歸檔
       b、nologging在歸檔模式下有效,非歸檔模式nologging不起什麼作用
       c、為了提高插入的速度,我們可以對錶關閉寫log功能。 SQL 如下:

            sql> alter table table_name NOLOGGING; 
            插入/修改,完數據後,再修改表寫日誌:  
            sql> alter table table_name LOGGING;
       d、沒有寫log, 速度會塊很多,但是也增加了風險,如果出現問題就不能恢復。   e,或    create table table_name nologging as (select * from ...);

  2、drop掉索引約束之類的;

  3、 使用直接插入的方式

     insert/*+append+*/into tb_name select colnam1,colname2 from table_name;    

     a,資料庫處於歸檔模式:當表模式為logging狀態時,無論是否使用append模式,都會生成redo.當表模式為nologging狀態時,只有append模式,不會生成redo。

           資料庫處於非歸檔模式:無論是在logging還是nologing的模式下,append的模式都不會生成redo,而no append模式下都會生成redo。  

     b,建議不要經常使用append,這樣表空間會一直在高水位上,除非你這個表只插不刪

     c,在使用了append選項以後,insert數據會直接加到表的最後面,而不會在表的空閑塊中插入數據。

         使用append會增加數據插入的速度。

         的作用是在表的高水位上分配空間,不再使用表的extent中的空餘空間

         append 屬於direct insert,歸檔模式下append+table nologging會大量減少日誌,
        非歸檔模式append會大量減少日誌,append方式插入只會產生很少的undo

         不去尋找 freelist 中的free block , 直接在table HWM 上面加入數據。

   4,總結
      測試證明:

         1. 不管哪種模式下append要與nologging方式聯用才能達到很好的效果。

         2. 非歸檔與歸檔方式,只用NOLOGGING是不起效果的。

         3. 非歸檔下append已達到不錯的效果,但不及與nologging的聯用方式。

         4. 歸檔下單append起不到效果。

        NOLOGGING插完後最好做個備份。

        另外,如果庫處在FORCELOGGING模式下,此時的nologging方式是無效的。

原文鏈接:http://blog.sina.com.cn/s/blog_61cd89f60102e7gi.html   歸檔模式與非歸檔模式

  Oracle資料庫有聯機重做日誌,這個日誌是記錄對資料庫所做的修改,比如插入,刪除,更新數據等,對這些操作都會記錄在聯機重做日誌里。一般資料庫至少要有2個聯機重做日誌組。當一個聯機重做日誌組被寫滿的時候,就會發生日誌切換,這時聯機重做日誌組2成為當前使用的日誌,當聯機重做日誌組2寫滿的時候,又會發生日誌切換,去寫聯機重做日誌組1,就這樣反覆進行。
  如果資料庫處於非歸檔模式,聯機日誌在切換時就會丟棄. 而在歸檔模式下,當發生日誌切換的時候,被切換的日誌會進行歸檔。比如,當前在使用聯機重做日誌1,當1寫滿的時候,發生日誌切換,開始寫聯機重做日誌2,這時聯機重做日誌1的內容會被拷貝到另外一個指定的目錄下。這個目錄叫做歸檔目錄,拷貝的文件叫歸檔重做日誌。
  資料庫使用歸檔方式運行時才可以進行災難性恢復。
    1.歸檔日誌模式和非歸檔日誌模式的區別
非歸檔模式只能做冷備份,並且恢復時只能做完全備份.最近一次完全備份到系統出錯期間的數據不能恢復.
歸檔模式可以做熱備份,並且可以做增量備份,可以做部分恢復.

原文鏈接:https://www.cnblogs.com/tdskee/p/8607474.html

redo與undo

1. 什麼是redo(用於重做數據)

redo也就是重做日誌文件(redo log file),Oracle維護著兩類重做日誌文件:線上(online)重做日誌文件和歸檔(archived)重做日誌文件。這兩類重做日誌文件都用於恢復;其主要目的是,萬一實例失敗或介質失敗,它們能夠恢複數據。 由於資料庫緩衝,對磁碟數據的更新不是實時的,但是對redo日誌的更新會在commit之後確切發生。 如果在事務提交之後,磁碟數據更新之前,系統發生故障,比如斷電,系統重啟之後會將那些已經寫入redo,但是沒有更新到磁碟的數據進行重做,這樣系統就恢復到故障點之前了。 redo日誌預設3組,迴圈寫入,第一組(每個組所有成員同時寫入同樣的信息)滿了,切換到第二個,第二個滿了切換到第三個,當所有組都寫滿之後,日誌進程再次開始寫第一個,後面的數據覆蓋前面的數據,即為非歸檔模式。 鑒於redo如此重要,需要將已寫滿的日誌歸檔,即複製內容到其他地方,即開啟歸檔日誌模式,但是會影響系統性能。

2. 什麼是undo(用於回滾數據)

從概念上講,undo正好與redo相對。你對數據執行修改時,資料庫會生成undo信息,這樣萬一你執行的事務或語句由於某種原因失敗了,或者如果你用一條ROLLBACK語句請求回滾,就可以利用這些undo信息將數據放回到修改前的樣子。redo用於在失敗時重放事務(即恢復事務),undo則用於取消一條語句或一組語句的作用。 undo保存在undo表空間中,且包含在redo日誌中。 當執行DML操作時,舊數據會寫入undo中。 事務回滾,未提交時,rollback,把undo中的舊數據重新寫回數據段中;已提交時,進行閃回(flashback)操作 ,大多都是基於undo數據實現的。讀一致性:用戶檢索數據時,ORACLE總是使用戶只能看到被提交過的數據(當前事務中的其他語句可以看到未提交的數據),或者特定時間點的數據(select語句時間點)。當某個用戶在此查詢點之後修改了數據,此查詢讀到這個數據時,就是通過在undo中讀取來實現的。 oracle使用scn來實現讀一致性,系統變化號(SCN)是一個數據結構,它定義了一個給定時刻提交的資料庫版本,SCN可以被認為是oracle的邏輯時鐘,每一次提交數值都要增加。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 八、mysql 基礎優化 索引管理 1、課程大綱 索引介紹 索引管理 2、執行計劃獲取及分析 mysql mysql資料庫中索引的類型介紹 BTREE:B+樹索引 (主要) HASH:HASH索引 FULLTEXT:全文索引 RTREE:R樹索引 索引管理: 索引建立的在表的列上(欄位)的。 在wh ...
  • 七、MySQL 客戶端工具及SQL入門 1、課程大綱: mysql客戶端命令介紹; mysql獲取幫助的方法細講; DDL語句之管理資料庫; DDL語句之管理表與案例介紹; DML語句之管理表中的數據; SELECT 檢索數據; 2、mysql介面程式使用及SQL入門 2、伺服器端命令(SQL) ( ...
  • 1、官網 https://www.navicat.com.cn/ 2、安裝教程(厚著臉皮,貼上大佬教程) Navicat15安裝教程: https://www.cnblogs.com/xuexianqi/p/12797170.html ...
  • 幫人分析解決一個YourSQLDba備份報錯問題,個人覺得有點意思,順手記錄一下分析思路,大體解決思路如下: 首先,找到YourSQLDba作業YourSQLDba_FullBackups_And_Maintenance的報錯郵件或者作業的錯誤日誌信息,檢查YourSQLDba出錯的詳細信息。 YO... ...
  • @2020.5.8 題目: 1、查詢所有的課程的名稱以及對應的任課老師姓名 2、查詢學生表中男女生各有多少人 3、查詢物理成績等於100的學生的姓名 4、查詢平均成績大於八十分的同學的姓名和平均成績 5、查詢所有學生的學號,姓名,選課數,總成績 6、 查詢姓李老師的個數 7、 查詢沒有報李平老師課的 ...
  • 【目錄】(其餘均為瞭解知識) 一 視圖 二 觸發器 三 事務(掌握) 四 存儲過程 五 函數 六 流程式控制制 七、索引理論 一、視圖 1、什麼是視圖 視圖是一個虛擬表(非真實存在),其本質是【根據SQL語句獲取動態的數據集,併為其命名】,用戶使用時只需使用【名稱】即可獲取結果集,可以將該結果集當做表來 ...
  • Redis 作為一個publish/subscribe server,起到了消息路由的功能。訂閱者可以通過subscribe和psubscribe命令向Redis server訂閱自己感興趣的消息類型,當發佈者通過publish命令向Redis server發送特定類型的消息時。訂閱該消息類型的全部 ...
  • 來源:http://www.postgres.cn/docs/11/ 13.2.1. 讀已提交隔離級別 讀已提交是PostgreSQL中的預設隔離級別。 當一個事務運行使用這個隔離級別時, 一個查詢(沒有FOR UPDATE/SHARE子句)只能看到查詢開始之前已經被提交的數據, 而無法看到未提交的 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...