24h購物| | PChome| 登入
2015-10-06 14:03:53| 人氣1,482| 回應1 | 上一篇 | 下一篇

Oracle_刪除資料與匯出匯入

推薦 0 收藏 0 轉貼0 訂閱站台

--==================20151006的挑戰===================
刪除資料
delete from TBDJJOURNAL where JOURNALID < (select ((sysdate-to_date('19700101','YYYYMMDD')-288)*24*60*60*1000) from dual);
commit;
刪除資料不宜過多, 超過1萬筆就會卡住(卡卡的...)導致要刪session...
因為刪除時, 為了可以undo回去所以系統會作幾件事
1. delete表格中資料
2. 把刪除的資料塞進undo表格空間中(請見 儲存 >表格空間 > UNDOTBS1)
3. 如果UNDO表格空間快滿了, 系統會自動判斷並自動延伸表格空間
undo空間要一段時間之後才會釋放...
這些, 都會讓delete速度變慢......
不然就用truncate 會快很多
通常因為delete會很久, 所以徐大哥有教幾種做法 也可以快速做出只留我們要的資料的table
1. 把資料匯出做個備分, 然後create table as Select table的方式 建立一個新資料表, 裡面的資料是濾過後的資料
把原有的table rename掉, 新的table rename成舊table的名稱
2. 如果這個table原有的資料都不要了, 把資料匯出做個備份, truncate掉他~!
總之, 一定要備份就對了~!

刪除資料
delete from AAA;
commit;

刪除資料不宜過多, 超過1萬筆就會卡住(卡卡的...)導致要刪session...因為刪除時, 為了可以undo回去所以系統會作幾件事
1. delete表格中資料
2. 把刪除的資料塞進undo表格空間中(請見 儲存 >表格空間 > UNDOTBS1)
3. 如果UNDO表格空間快滿了, 系統會自動判斷並自動延伸表格空間

undo空間要一段時間之後才會釋放...這些, 都會讓delete速度變慢......

不然就用truncate 會快很多

通常因為delete會很久, 所以前輩有教幾種做法 也可以快速做出只留我們要的資料的table
在刪除資料之前, 一定要先備份~!
如果該table是靜態table, 沒有會異動的問題的話, 就
1. 把資料匯出做個備分, 然後create table as Select table的方式 建立一個新資料表, 裡面的資料是濾過後的資料
把原有的table rename掉, 新的table rename成舊table的名稱
2. 如果這個table原有的資料都不要了, 把資料匯出做個備份, truncate掉他~!
如果該table是個異動頻繁的table, 又有敏感性資料(如金額)之類的 為避免匯出匯入會有時間差導致資料亂掉
建議還是用delete的方式 少量少量慢慢刪, 讓系統去handle資料的正確性為佳

 --==================20151007的挑戰====================
利用匯出匯入 快速做出只留我們要的資料的table
如果該table是靜態table, 沒有會異動的問題的話, 就
1. 把資料匯出做個備分, 然後create table as Select table的方式 建立一個新資料表, 裡面的資料是濾過後的資料
ex.Create table AAA_20151008_20 as Select * from AAA WHERE rownum <=20;
把原有的table rename掉, 新的table rename成舊table的名稱
ex. 
alter table AAA rename to AAA_50;
alter table AAA_20151008_20 rename to AAA;
2. 如果這個table原有的資料都不要了, 把資料匯出做個備份, truncate掉他~! 確認真的沒在用了(先備份喔) Drop掉它!
如果該table是個異動頻繁的table, 又有敏感性資料(如金額)之類的 為避免匯出匯入會有時間差導致資料亂掉
建議還是用delete的方式 少量少量慢慢刪, 讓系統去handle資料的正確性為佳
--================201510008的挑戰======================
rename語法再練習一次
--================201510012的挑戰======================
如果匯出匯入到一半發現不對, 可以用Ctrl+C, 來中斷掉
如果原本的DB沒有該TABLE, 直接用DMP匯進來的話會全部幫你建到好, 包含自動建立TABLE, INDEX與表格定義也都會一併匯入.
用Create table as Select * from table where 過濾條件, 再rename掉table 的方式固然ok
但是新的table只會有資料, 沒有辦法把index一併匯過去
所以前輩建議以下的方式
1. 過濾好資料的table建好後, 去OEM看原本TABLE的INDEX有哪些, 一個一個建立到新TABLE中
建立索引語法

可以看這一篇的語法

OracleDB Index相關指令(create alter) 
Create index INDEX名稱 on TABLE名稱 (欄位) tablespace 指定tablespace名稱 (如果沒有指定tablespace名稱, index就會存入預設tablespace喔)
EX.Create index idx_TABLEAA_01 on TABLEAA (ColumnAA) tablespace SYSTEM;

2. 用以下步驟
1. 用Create table as Select * from table where 過濾條件語法, 建立出我們要的 濾過資料的table
2. 用Create table as Select * from table 的語法, 複製出一個跟原本一樣資料的table, 但這個TABLE 沒有index
3. (最好先匯出備份一份), 然後TRUNCATE 掉原始表格, 這樣這個表格會沒有資料, 但是原本的表格定義, 包含INDEX都會在
4. 用INSERT Select 語法, 把剛做好的, 濾過資料的table, 塞進原始表格中
3. 用以下做法
1. 用Create table as Select * from table 的語法, 複製出一個跟原本一樣資料的table, 但這個TABLE 沒有index
2. (最好先匯出備份一份), 然後TRUNCATE 掉原始表格, 這樣這個表格會沒有資料, 但是原本的表格定義, 包含INDEX都會在
3. 用INSERT table Select * from table where 過濾條件 語法, 把剛複製的table, 過濾過的資料塞進原始表格中
--================201510013的挑戰======================
查出DB中 TABLE的數量有幾個
Drop掉原本的INDEX語法
--================201510013的挑戰======================
有沒有介紹OEM的書...

台長: nut
人氣(1,482) | 回應(1)| 推薦 (0)| 收藏 (0)| 轉寄
全站分類: 心情日記(隨筆、日記、心情手札) | 個人分類: 我的工作 |
此分類下一篇:同事推薦的網路導論聖經
此分類上一篇:工作的態度_關於司儀

春藥
2020-01-11 11:54:43
是 (若未登入"個人新聞台帳號"則看不到回覆唷!)
* 請輸入識別碼:
請輸入圖片中算式的結果(可能為0) 
(有*為必填)
TOP
詳全文