導航:首頁 > 網路數據 > oracleinsert大數據

oracleinsert大數據

發布時間:2022-12-28 02:40:30

1. Oracle中怎麼插入大數據量記錄

1、你的同步方式是insert還是update,還是兩者都有? 2、你是從jcpttest同步到test,還是反過來?還是兩者都有?內 3、如果單純的從一個實例容中的一張表,插入到另一個實例中的一張表,不會有數據丟失問題的,建議你查看資料庫性能方面的問題。 4、單主鍵,插入時是不是有重復記錄?所以丟棄掉了。你怎麼確定數據丟失嚴重?select count(*) from test;確認的數據量?如果遇到重復的肯定就丟棄掉了。

2. oracle 大數據插入效率問題

select * from mytable t where 1=1 and t.name='abc'
select * from mytable t where t.name='abc'

我實例測試了一來下,這兩句執自行效率結果是一樣的

對於上面千萬數據集我覺得你的方法很好了。
如果說最快的話你只能刪除表重建,如:
Create table B as
select * from A
這應該是最快的了。但是不知道是否能符合你的要求

3. 淺談Oracle中大數據量表的管理

簡介

隨著信息業的發展 在企業級資料庫應用中 經常會有一些幾十GB 上百GB的數據表 這些大數據量表的設計 維護及其備份都是資料庫管理中的重點及其難點 本文就從設計 維護及其備份方面探討一下大數據量表的管理

設計

大表時效性

大數據量表的數據量一般來說是跟時間成正比的 時間越久 數據量越大 在設計階段首先要考慮這些大表的時效性

通常情況 在一定的時間區間 數據的訪問頻度比較大 超過這個區間 數據的訪問頻度極小 這個時間區間根據不同的應用類型而不同 通常是幾個月 超過這個時間區間的數據可以認為是歷史數據 數據訪問的可能性不打 在企業應用中 並不是所有的數據都需要保留在生產資料庫中 對於這些歷史數據 可以考慮離線存放 或者是存放在另外的資料庫中 比如數據倉庫等

大表的時效性可以通過在表上加時間戳列來實現

使用分區表

Oracle 以後提供了分區表的功能 分區表可以把一個表的數據從物理和邏輯上分割成小的區域 Oracle支持非常大的分區表 一個對象可以允許多達 個分區 對於大表來說 使用分區表是首選方案 分區表可以改善表的維護 備份 恢復及查詢性能

分區表有 種分區方式

n Range Partitioning

n Hash Partitioning

n Composite Partitioning

n List Partitioning

對於有時效性的大表 可以採用按時間分區的 Range Partitioning表 例如按天分區的分區表

CREATE TABLE Test(

DATATIME DATE NOT NULL

P NUMBER NULL

P NUMBER NULL

P NUMBER NULL

P NUMBER NULL

P NUMBER NULL

P NUMBER NULL

P NUMBER NULL

P NUMBER NULL

CONSTRAINT PK_TEST PRIMARY KEY (datatime p p ) USING INDEX LOCAL TABLESPACE USERINDEX

)

PARTITION BY RANGE (DATATIME)

(PARTITION Test_ VALUES LESS THAN (TO_DATE( YYYY MM DD ))

(PARTITION Test_ VALUES LESS THAN (TO_DATE( YYYY MM DD ))

……

);

對於按時間分區仍然不能滿足性能需求的表 還可以根據應用需求 使用子分區對表進一步細化

應用設計中 要充分利用分區表的特性 對大表的訪問要完全避免全表訪問 縮小訪問范圍 在查詢條件中 盡量使用分區的列

維護

大表的維護工作比較繁瑣 索引的維護 存儲空間的維護 歷史數據的清理等等 使用分區表可以簡化大表的維護工作 但是如果表很多的話 手動的創建 刪除分區也是一件很繁瑣 而且容易出錯的事情

此章節以按天分區的分區表為例討論大表的自動維護

分區表的命名規則

分區表分區的命名應當按照一定的規則命名 以利於自動維護的實現 本例採用按天分區的分區表 分區的命名方式為TABLENAME_YYMMDD 例如 TEST表的 年 月 日的分區命名為TEST _

維護字典

在資料庫中創建維護字典表 存放需要自動維護的分區表的信息 包括表名 schema 表的類型 數據在資料庫中的保留時間等信息

Table Name: H_RETENTION

Column Type Null? Description

tablename Varchar ( ) Not null 表名

schemaname Varchar ( ) Not null Schema

typeid Varchar ( ) Not null 表類型 PARTITION NORMAL …

retention Number( ) Not null 該表的保存天數

自動創建分區

對於按時間分區的分區表 若不能及時創建新的數據分區 會導致數據無法插入到分區表的嚴重後果 資料庫會產生報錯信息ORA : inserted partition key does not map to any partition 插入失敗

創建分區可以手工創建 也可以根據維護字典 通過系統的任務調度來創建分區 通常是在月底創建下個月的分區

自動創建分區實現如下

/**************************************************************************

Program Name:Add_Partition

Description:

創建某個用戶下個月的所有分區

***************************************************************************/

PROCEDURE add_partition (v_schema IN VARCHAR )

IS

CURSOR c_td_table

IS

SELECT tablename

FROM h_retention

WHERE typeid = PARTITION

AND schemaname = UPPER (v_schema)

ORDER BY tablename;

v_cur BINARY_INTEGER;

v_int BINARY_INTEGER;

v_partition VARCHAR ( );

v_date DATE;

v_days NUMBER;

sql_stmt VARCHAR ( ); String used to save sql statement

err_msg VARCHAR ( );

BEGIN

v_date := TRUNC (ADD_MONTHS (SYSDATE ) MM );

v_days :=

TO_NUMBER (TO_CHAR (LAST_DAY (ADD_MONTHS (SYSDATE )) DD ));

v_cur := DBMS_SQL open_cursor;

FOR v_table IN c_td_table

LOOP

v_date := TRUNC (ADD_MONTHS (SYSDATE ) MM );

v_partition := v_table tablename;

FOR i IN v_days

LOOP

BEGIN

sql_stmt :=

ALTER TABLE

|| v_schema

||

|| v_table tablename

|| ADD PARTITION

|| v_partition

|| _

|| TO_CHAR (v_date YYMMDD )

||

|| VALUES LESS THAN (TO_DATE(

|| TO_CHAR (v_date + YYYY MM DD )

|| YYYY MM DD )) ;

DBMS_SQL parse (v_cur sql_stmt DBMS_SQL native);

v_int := DBMS_SQL EXECUTE (v_cur);

EXCEPTION

WHEN OTHERS

THEN

err_msg :=

v_partition

|| : Create

|| TO_CHAR (v_date YYMMDD )

|| partition unsuccessfully! Error Information:

|| SQLERRM;

log_insert (err_msg); You can define your own log_insert function

MIT;

END;

v_date := v_date + ;

END LOOP;

END LOOP;

DBMS_SQL close_cursor (v_cur);

END;

自動刪除過期分區

為了釋放存儲空間並提高大表的性能 要從資料庫中刪除大表中過期的歷史數據 刪除操作可以手工執行 也可以通過系統的任務調度來自動刪除 分區表數據刪除只需要刪除相應的數據分區 與delete相比 有如下好處

u 速度快

u 佔用回滾表空間少

u 產生日誌量少

u 釋放空間

如果有global的索引 刪除分區後需要重建索引

自動刪除分區實現如下

lishixin/Article/program/Oracle/201311/18275

4. oracle怎麼批量insert數據

80萬條,直接執行不就可以了嗎?
比如你的數據在tablename2中。
insert into tablename1(c1,c2,...)
slect * from tablename2(ca,cb,...);
不知道你的數據現在在哪裡,如果在別處的話,就用代碼唄。或者用procere吧。
可以讀一條插一條,80萬數據也不是很多呀。
代碼大概這樣吧:
sprintf(str_sql,insert into tablename1(c1,c2,c3,..) values (:v1,:v2,:v3,..));
EXEC SQL prepare s1 from :str_sql;
EXEC SQL EXECUTE s1 USING a1,a2,a3...;
不知道我說的對你有用不,但願能幫助你,就是擔心我沒有搞清楚,是要直接在PLSQL中執行的話,我覺得就直接插入就可以了呀。

5. oracle 大量數據insert操作怎麼提高效率

1、使用hint提示:/*+append*/,減少redo的生成
2、臨時disable掉表上的索引,約束,觸發器等
3、系統壓力不大多cpu情況下,可以考慮開並發
4、可以考慮單獨建一個回滾段給這個事務使用

6. Oracle insert插入超400欄位

用clob即可。
不過插入超過4000字元的字元串的話,需要用讀文件方式來插入,即把這個超過4000的字元串寫入一個文件中,然後插入這個文件到clob欄位中,可以查查clob插入的有關資料。

7. 如何向Oracle資料庫表中進行大數據量的插入並提交

一次折騰幾千萬的話, 那麼設置一下, 有 20W了, 就自動提交一下。
set autocommit on;
set autocommit 200000;

然後,假如你回的目標資料庫, 是歸檔的答話, 可以

INSERT /*+ append */ INTO 目標表 nologging SELECT * FROM 源表@DBLINK;

commit;
set autocommit off;

假如你的 目標表 上面, 有 索引的話, 建議先刪除 索引。
等 上面的 INSERT 語句執行完畢後, 再重建索引。

8. 在Oracle中,通過一個INSERT ALL語句批量插入數據

Oracle:
INSERT ALL
INTO A(field_1,field_2) VALUES (value_1,value_2)
INTO A(field_1,field_2) VALUES (value_3,value_4)
INTO A(field_1,field_2) VALUES (value_5,value_6)
SELECT 1 FROM DUAL;

在Mybatis中使用
<insert id="insertData" parameterType="java.util.List"
useGeneratedKeys="false">
INSERT ALL
<foreach item="item" index="index" collection="list">
INTO T_GZL_BZ
(
ID,
JGH,
JGMC,
DW,
JGLX,
BZLB,
JGZWLB,
EDGZL,
ZGGZL,
BZ,
CJRBH,
CJRXM,
CJSJ,
SFSZ
) VALUES
(
#{item.id,jdbcType=VARCHAR},
#{item.teacherId,jdbcType=VARCHAR},
#{item.teacherName,jdbcType=VARCHAR},
#{item.departmentId,jdbcType=VARCHAR},
#{item.teacherType,jdbcType=VARCHAR},
#{item.compilationCategory,jdbcType=VARCHAR},
#{item.jobCategory,jdbcType=VARCHAR},
#{item.ratedWorkload,jdbcType=NUMERIC},
#{item.maxWorkload,jdbcType=NUMERIC},
#{item.remark,jdbcType=VARCHAR},
#{item.creator,jdbcType=VARCHAR},
#{item.creatorName,jdbcType=VARCHAR},
#{item.createTime,jdbcType=DATE},
#{item.settings,jdbcType=VARCHAR}
)
</foreach>
SELECT 1 FROM DUAL
</insert>

mapper:
/**
* @param createList
* @return
*/
int insertData(@Param("list") List<WorkloadStandardDto> createList);

9. oracle 如何復制大數據量的數據

Oracle 9/10
可以使用 exp 導出 Imp 導入

===== 導出、導入 單個表的情況。

導出 TEST_MAIN,TEST_SUB 這2個表
EXP test/test@源資料庫 file=test.dmp tables=(TEST_MAIN,TEST_SUB)

導入 TEST_MAIN,TEST_SUB 這2個表
IMP test2/test2@目標資料庫 file=test.dmp tables=(TEST_MAIN,TEST_SUB)

==============================

Oracle 10g 開始, 新增數據泵工具 導出導入 的工具.

前面需要一些 環境配置

數據泵工具導出的步驟:
1、創建DIRECTORY
create directory dir_dp as 'C:/OracleData'

2、授權
Grant read,write on directory dir_dp to obpos;

EXPDP 按表導出:

EXPDP obpos/obpos tables="OBPOS"."ROOM","OBPOS"."ROOMBOOKD" mpfile=expdp_Room.dmp logfile=expdp_Room.log directory=dir_dp job_name=my_job

授權
Grant read,write on directory dir_dp to test;

IMPDP 按表導入:
impdp obpos/obpos mpfile=obpos.dmp logfile=obpos.log directory=dir_dp tables=MR_USER job_name=my_job

10. oracle的大量數據insert操作怎麼提高效率

1、使用hint提示:/*+append*/,減少redo的生成x0dx0a2、臨時disable掉表上的索引,約束,觸發器等x0dx0a3、系統壓力不大多cpu情況下,可以考慮開並發x0dx0a4、可以考慮單獨建一個回滾段給這個事務使用

閱讀全文

與oracleinsert大數據相關的資料

熱點內容
社區版本 瀏覽:738
怎麼查微信公眾號什麼時候開通的 瀏覽:717
安裝三菱編程閃退怎麼回事 瀏覽:488
手機怎麼創建word文件格式 瀏覽:694
c語言連接資料庫 瀏覽:887
數據線粉色和白色哪個是正 瀏覽:775
vb編程應注意什麼 瀏覽:855
js循環添加控制項 瀏覽:615
學習計算機網路的作用 瀏覽:235
access資料庫最新內容怎麼調 瀏覽:203
上古世紀新版本跑商 瀏覽:267
iphone5國際漫遊設置 瀏覽:107
ipodwatch如何安裝app 瀏覽:114
誰有微信搶紅包的群號 瀏覽:872
word07頁碼從任意頁開始 瀏覽:791
js禁止滑動事件 瀏覽:800
蘋果查序號怎麼看不是 瀏覽:61
linux在txt文件 瀏覽:568
ps如何導入文件匹配 瀏覽:201
轉轉app怎麼把自己的賬號租出去 瀏覽:828

友情鏈接