日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ORACLE对表批处理操作

發布時間:2024/1/8 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ORACLE对表批处理操作 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
--oracle常用系統表 /* dba_開頭.....? dba_users ? ?數據庫用戶信息 dba_segments 表段信息 dba_extents ? 數據區信息 dba_objects ? 數據庫對象信息 dba_tablespaces ?數據庫表空間信息 dba_data_files ? 數據文件設置信息 dba_temp_files ?臨時數據文件信息 dba_rollback_segs ?回滾段信息 dba_ts_quotas ?用戶表空間配額信息 dba_free_space數據庫空閑空間信息 dba_profiles ?數據庫用戶資源限制信息 dba_sys_privs ?用戶的系統權限信息 dba_tab_privs用戶具有的對象權限信息 dba_col_privs用戶具有的列對象權限信息 dba_role_privs用戶具有的角色信息 dba_audit_trail審計跟蹤記錄信息 dba_stmt_audit_opts審計設置信息 dba_audit_object ?對象審計結果信息 dba_audit_session會話審計結果信息 dba_indexes用戶模式的索引信息 user_開頭 user_objects ?用戶對象信息 user_source ?數據庫用戶的所有資源對象信息 user_segments ?用戶的表段信息 user_tables ? 用戶的表對象信息 user_tab_columns ?用戶的表列信息 user_constraints ?用戶的對象約束信息 user_sys_privs ?當前用戶的系統權限信息 user_tab_privs ?當前用戶的對象權限信息 user_col_privs ?當前用戶的表列權限信息 user_role_privs ?當前用戶的角色權限信息 user_indexes ?用戶的索引信息 user_ind_columns用戶的索引對應的表列信息 user_cons_columns ?用戶的約束對應的表列信息 user_clusters ?用戶的所有簇信息 user_clu_columns 用戶的簇所包含的內容信息 user_cluster_hash_expressions ? 散列簇的信息 v$開頭 v$database ? 數據庫信息 v$datafile ?數據文件信息 v$controlfile控制文件信息 v$logfile ?重做日志信息 v$instance ?數據庫實例信息 v$log ?日志組信息 v$loghist 日志歷史信息 v$sga ?數據庫SGA信息 v$parameter 初始化參數信息 v$process ?數據庫服務器進程信息 v$bgprocess ?數據庫后臺進程信息 v$controlfile_record_section ?控制文件記載的各部分信息 v$thread ?線程信息 v$datafile_header ?數據文件頭所記載的信息 v$archived_log歸檔日志信息 v$archive_dest ?歸檔日志的設置信息 v$logmnr_contents ?歸檔日志分析的DML DDL結果信息 v$logmnr_dictionary ?日志分析的字典文件信息 v$logmnr_logs ?日志分析的日志列表信息 v$tablespace ?表空間信息 v$tempfile ?臨時文件信息 v$filestat ?數據文件的I/O統計信息 v$undostat ?Undo數據信息 v$rollname ?在線回滾段信息 v$session ?會話信息 v$transaction 事務信息 v$rollstat ? 回滾段統計信息 v$pwfile_users ?特權用戶信息 v$sqlarea ? ?當前查詢過的sql語句訪問過的資源及相關的信息 v$sql ? ? ? ? 與v$sqlarea基本相同的相關信息 v$sysstat ? 數據庫系統狀態信息 all_開頭 all_users ?數據庫所有用戶的信息 all_objects ?數據庫所有的對象的信息 all_def_audit_opts ?所有默認的審計設置信息 all_tables ?所有的表對象信息 all_indexes所有的數據庫對象索引的信息 session_開頭 session_roles ? 會話的角色信息 session_privs ? 會話的權限信息 index_開頭 index_stats ?索引的設置和存儲信息 偽表 dual ?系統偽列表信息 */
--刪除表對象 select 'drop table '||segment_name from dba_segments where owner='VPMUSER' and segment_type='TABLE'; --創建表對象 select? 'create table '||segment_name || ' as select * from '||segment_name ||'@DBLINK'? from dba_segments where owner='VPMUSER' and segment_type='TABLE';
檢查表是否完整導入 select segment_name from dba_segments@aaa where owner='VPMUSER' and segment_type='TABLE' ? and (segment_name not like 'BIN$%' and segment_name not like '%201%') minus select segment_name from dba_segments where owner='VPMUSER' and segment_type='TABLE' ?and segment_name not like 'BIN$%'

如何加速Oracle大批量數據處理?


一、提高DML操作的辦法:

簡單說來:

1、暫停索引,更新后恢復.避免在更新的過程中涉及到索引的重建.

2、批量更新,每更新一些記錄后及時進行提交動作.避免大量占用回滾段和或臨時表空間.

3、創建一臨時的大的表空間用來應對這些更新動作.

4、批量更新,每更新一些記錄后及時進行提交動作.避免大量占用回滾段和或臨時表空間.

5、創建一臨時的大的表空間用來應對這些更新動作.

6、加大排序緩沖區

alter session set sort_area_size=100000000;

insert into tableb select * from tablea;

commit;

如果UPDATE的是索引字段,就會涉及到索引的重建,暫停索引不會提高多少的速度,反而有可能降低UPDATE速度,

因為在更新是索引可以提高數據的查詢速度,重建索引引起的速度降低影響不大。

ORACLE優化修改參數最多也只能把性能提高15%,大部分都是SQL語句的優化!

update總體來說比insert要慢 :

幾點建議:

1、如果更新的數據量接近整個表,就不應該使用index而應該采用全表掃描

2、減少不必要的index,因為update表通常需要update index

3、如果你的服務器有多個cpu,采用parellel hint,可以大幅度的提高效率

另外,建表的參數非常重要,對于更新非常頻繁的表,建議加大PCTFREE的值,以保證數據塊中有足夠的空間用于UPDATE, 從而降低CHAINED_ROWS。

二、各種批量DML操作:

(1)、oracle批量拷貝:

set arraysize 20

set copycommit 5000

copy from username/password@oraclename append table_name1

using select * from table_name2;

(2)、常規插入方式:

insert into t1 select * from t;

為了提高速度可以使用下面方法,來減少插入過程中產生的日志:

alter table t1 nologging;

insert into t1 select * from t;

commit;

(3)、CTAS方式:

create table t1

as

select * from t;

為了提高速度可以使用下面方法,來減少插入過程中產生的日志,并且可以制定并行度:

create table t1 nologging parallel(degree 2) as select * from t;

?

(4)、Direct-Path插入:

insert /*+append*/ into t1 select * from t;

commit;

為了提高速度可以使用下面方法,來減少插入過程中產生的日志:

alter table t1 nologging;

insert /*+append*/ into t1 select * from t;

Direct-Path插入特點:

1、 append只在insert … select …中起作用,像insert /*+ append */ into t values(…)這類的語句是不起作用的。在update、delete操作中,append也不起作用。

2、 Direct-Path會使數據庫不記錄直接路徑導入的數據的重做日志,會對恢復帶來麻煩。

3、 Direct-Path直接在表段的高水位線以上的空白數據塊中寫數據,不會重用高水位線以下的空間,會對空間的使用造成一定的浪費,對查詢的性能也會造成一定的影響。而常規插入會優先考慮使用高水位線之下有空閑空間存在的數據塊。因此理論上Direct-Path插入會比常規插入速度更快,因為Direct-Path直接使用新數據塊,而常規插入要遍歷freelist獲取可用空閑數據塊,如果同 nologging 配合,這種速度優勢會更加明顯。

4、 以append方式插入記錄后,要執行commit,才能對表進行查詢。否則會出現錯誤:ORA-12838: 無法在并行模式下修改之后讀/修改對象。

5、 用append導入數據后,如果沒有提交或者回滾,在其他會話中任何對該表的DML都會被阻塞(不會報錯),但對該表的查詢可以正常執行。

6、 在歸檔模式下,要把表設置為nologging,然后以append方式批量添加記錄,才會顯著減少redo數量。在非歸檔模式下,不必設置表的 nologging屬性,即可減少redo數量。如果表上有索引,則append方式批量添加記錄,不會減少索引上產生的redo數量,索引上的redo 數量可能比表的redo數量還要大。

7、 數據直接插入數據文件,繞過buffer cache并且忽略了引用完整性約束。

8、 不管表是否在nologging 下,只要是 direct? insert,就不會對數據內容生成undo。

9、 Oracle在Direct-Path INSERT 操作末尾,對具有索引的表執行索引維護,這樣就避免了在drop掉索引后,再rebuild。

10、Direct-Path INSERT比常規的插入需要更多的空間。因為它將數據插入在高水位之上。并行插入非分區表需要更多的空間,因為它需要為每一個并行線程創建臨時段。

11、在插入期間,數據庫在表上獲得排他鎖,用戶不能在表上執行并行插入、更新或者刪除操作,并行的索引創建和build也不被允許。但卻可以并行查詢,但查詢返回的是插入之前的結果集。

(5)、并行DML:

如果你的服務器有多個cpu,采用parellel hint,可以大幅度的提高效率

ALTER SESSION ENABLE PARALLEL DML;

INSERT /*+ PARALLEL(tableA, 2) */INTO tableA

SELECT * FROM tableB;

為了提高速度可以使用下面方法,來減少插入過程中產生的日志:

INSERT /*+ PARALLEL(tableA, 2) */INTO tableA NOLOGGING

SELECT * FROM tableB;

oracle默認并不會打開PDML,對DML語句必須手工啟用。即需要執行

alter table enable parallel dml命令。

并行DML特點:

1、在并行DML模式中,默認的就是DIRECT-PATH插入,為了運行并行DML模式,必須滿足以下條件:

a、必須是Oracle企業版;

b、必須在session中使并行DML生效,執行以下sql語句:

ALTER SESSION { ENABLE | FORCE } PARALLEL DML;

c、必須指定table的并行屬性,在創建的時候或者其他時候,或者在insert操作時使用“PARALLEL”提示。

d、為了使Direct-Path Insert模式失效,在INSERT語句中指定“NOAPPEND”提示,覆蓋并行DML模式。

2、并行Direct-Path INSERT到分區表:

類似于serial Direct-Path INSERT,每個并行操作分配給一個或者多個分區,每個并行操作插入數據到各自的分區段的高水位標志之上,commit之后,用戶就能看到更新的數據。

3、并行Direct-Path INSERT到非分區表:

每個并行執行分配一個新的臨時段,并插入數據到臨時段。當commit運行后,并行執行協調者合并新的臨時段到主表段,用戶就能看到更新的數據。

4、Direct-Path INSERT可以使用Log或者不使用Log。

5、另外不得不說的是,并行不是一個可擴展的特性,只有在數據倉庫或作為DBA等少數人的工具在批量數據操作時利于充分利用資源,而在OLTP環境下使用并行需要非常謹慎。事實上PDML還是有比較多的限制的,例如不支持觸發器,引用約束,高級復制和分布式事務等特性,同時也會帶來額外的空間占用,PDDL同 樣是如此。

轉載于:https://my.oschina.net/u/229524/blog/49105

總結

以上是生活随笔為你收集整理的ORACLE对表批处理操作的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。