--==================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中
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的書...
文章定位: