兩種方法:
創新互聯專注于網站建設,為客戶提供成都網站設計、做網站、網頁設計開發服務,多年建網站服務經驗,各類網站都可以開發,品牌網站制作,公司官網,公司展示網站,網站設計,建網站費用,建網站多少錢,價格優惠,收費合理。
1、插入之前,把檔案盒這個表格生成datatable,然后就可以用C#對datatable里面的ARCHIVES_ID,FILE_ID值進行調整,生成最終的datatable之后用SqlBulkCopy批量處理插入oracle
2、在oracle里面寫存儲過程,對每一行插入的數據的ARCHIVES_ID,FILE_ID進行處理,得到你想要的值
首先不知道你的數據庫在什么系統下:
window:
找到數據文件存放的位置,比如D:\存放的是oracle的數據文件,如果表空間采用的是自動管理方式,考慮將一些數據文件移到其他盤符下,比如:e:\等
linux/unix
du -sk * 查看oracle數據庫相關文件夾下每個文件的空間使用情況,刪除垃圾文件
如果沒有垃圾文件,嘗試整理表空間,可以釋放一些空間,只是暫時解決文件
增加裸設備
如果使用asm的方式管理的,考慮將asm里增加pv。
以上,希望能幫助你!
歸檔日志(ArchiveLog)是非活動的重做日志備份.通過使用歸檔日志,可以保留所有重做歷史記錄,當數據庫處于ARCHIVELOG模式并進行日志切換式,后臺進程ARCH會將重做日志的內容保存到歸檔日志中.當數據庫出現介質失敗時,使用數據文件備份,歸檔日志和重做日志可以完全恢復數據庫.
日志操作模式:ARCHIVELOGNOARCHIVELOG
1,改變日志操作模式:
檢查當前日志操作模式
SELECTlog_modefromv$database;
關閉數據庫,然后裝載數據庫
SHUTDOWNIMMEDIATE
STARTUPMOUNT
改變日志操作模式,然后打開數據庫
ALTERDATABASEARCHIVELOG;
ALTERDATABASEOPEN;
2,執行手工歸檔
從oracledatabase10g開始,當將日志操作模式轉變未ARCHIVELOG模式時,oracle會自動啟動ARCH進程.如果要使用手工歸檔.那么在改變日志操作模式時必須使用命令ALTERDATABASEARCHIVELOGMANUAL.
需要注意,使用手工歸檔方式,數據庫管理員必須手工執行歸檔命令.如果沒有執行手工歸檔命令,日志組的原有內容將不能被覆蓋.ALTERDATABASEARCHIVELOGMANUAL命令是為了與先前的版本兼容而保留的,.將來的oracle版本會淘汰該命令,使用手工歸檔方式是,數據庫管理員可以執行以下命令歸檔重做日志:
SLTERSYSTEMARCHIVELOGALL;
3,配置歸檔進程
初始化參數LOG_ARCHIVE_MAX_PROCESSES用于指定例程初始啟動的最大歸檔進程個數,當將數據庫轉變為ARCHIVELOG模式時,默認情況下oracle會自動啟動兩個歸檔進程.通過改變初始化參數LOG_ARCHIVE_MAX_PROCESS的值,可以動態地增加或降低歸檔進程的個數:
ALTERSYSTEMSETLOG_ARCHIVE_MAX_PROCESSES=3;
配置歸檔位置和文件格式
當數據庫處于ARCHIVELOG模式時,如果進行日志切換,后臺進程將自動生成歸檔日志,歸檔日志的默認位置為%oracle_home%rdbms,在oracledatabase10g中,歸檔日志的默認文件格式為ARC%S_%R.%T.為了改變歸檔日志的位置和名稱格式,必須改變相應的初始化參數,
1,初始化參數LOG_ARCHIVE_FORMAT用于指定歸檔日志的文件名格式,設置該初始化參數時,可以指定以下匹配符:
%s:日志序列號:
%S:日志序列號(帶有前導0)
%t:重做線程編號.
%T:重做線程編號(帶有前導0)
%a:活動ID號
%d:數據庫ID號
%rRESETLOGS的ID值.
從10g開始,配置歸檔日志文件格式時,必須帶有%s,%t和%r匹配符,配置了歸檔文件格式后,必須重啟數據庫.
2,使用LOG_ARCHIVE_DEST配置歸檔位置
如果不使用備用數據庫,只需要將歸檔日志存放到本地目錄.配置本地歸檔位置可以使用初始化參數LOG_ARCHIVE_DEST和LOG_ARCHIVE_DUPLEX_DEST,其中,第一個參數用于設置第一個歸檔位置,第二個參數用于指定第二個歸檔位置.
ALTERSYSTEMSETlog_archive_dest=’d:demoarchive1’;
ALTERSYSTEMSETlog_archive_duplex_dest=’d:demoarchive2’;
3,使用LOG_ARCHIVE_DEST_n配置多個歸檔位置.
初始化參數LOG_ARCHIVE_DEST_n用于指定多個歸檔位置,該參數最多可以指定10個歸檔位置.通過使用初始化參數LOG_ARCHIVE_DEST_n,不僅可以配置本地歸檔位置,還可以配置遠程歸檔位置.
如果既要在主節點上生成歸檔日志,又要將歸檔日志傳遞到備用節點,那么必須使用參數LOG_ARCHIVE_DEST_n.該參數與LOG_ARCHIVE_DEST具有如下區別;
初始化參數LOG_ARCHIVE_DEST_n可以配置本地歸檔位置和遠程歸檔位置,而初始化參數LOG_ARCHIVE_DEST和LOG_ARCHIVE_DUPLEX_DEST只能配置本地歸檔位置.
初始化參數LOG_ARCHIVE_DEST_n可以配置多達10個歸檔位置,而初始化參數LOG_ARCHIVE_DEST和LOG_ARCHIVE_DUPLEX_DEST最多只能配置兩個歸檔位置.
初始化參數LOG_ARCHIVE_DEST_n不能與初始化參數LOG_ARCHIVE_DEST和LOG_ARCHIVE_DUPLEX_DEST同時使用.
因為初始化參數LOG_ARCHIVE_DEST_n不能與初始化參數LOG_ARCHIVE_DEST和LOG_ARCHIVE_DUPLEX_DEST同時使用,所以必須禁用初始化參數LOG_ARCHVE_DEST和LOG_ARCHIVE_DUPLEX_DEST.當使用初始化參數LOG_ARCHIVE_DEST_n配置本地歸檔位置時,需要指定LOCALTION選項.當配置遠程歸檔位置時,需要指定SERVICE選項.
示例如下:
ALTERSYSTEMSETlog_archive_duplex_dest=’’;
ALTERSYSTEMSETlog_archive_dest=’’;
ALTERSYSTEMSETlog_archive_dest_1=’location=d:demoarchive1’;
ALTERSYSTEMSETlog_archive_dest_2=’location=d:demoarchive2’;
ALTERSYSTEMSETlog_archive_dest_3=’location=d:demoarchive3’;
ALTERSYSTEMSETlog_archive_dest_4=’service=standby’;
配置遠程歸檔位置時,SERVICE選項需要指定遠程數據庫的網絡服務名(在tnsnames.ora文件中配置)
4,使用LOG_ARCHIVE_DEST_n選項
使用初始化參數LOG_ARCHIVE_DEST_n配置歸檔位置時,可以在歸檔位置上指定OPTIONAL或MANDATORY選項.指定MANDATORY選項時,可以設置REOPEN屬性.
OPTIONAL:該選項是默認選項.使用該選項時,無論歸檔是否成功,都可以覆蓋重做日志.
MANDATORY:強制歸檔.使用該選項時,只有在歸檔成功之后,重做日志才能被覆蓋.
REOPEN:該屬性用于指定重新歸檔的時間間隔,默認值為300秒,必須跟在MANDATORY后.
例:
Altersystemsetlog_archive_dest_1=’location=d:demoarchive1mandatory’;
Altersystemsetlog_archive_dest_2=’location=d:demoarchive2mandatoryreopen=500’;
Altersystemsetlog_archive_dest_3=’location=d:demoarchive3optional’;
5,控制本地歸檔成功的最小個數.
使用初始化參數LOG_ARCHIVE_MIN_SUCCEED_DEST控制本地歸檔的最小成功個數
Altersystemsetlog_archive_min_succeed_dest=2;
6,使用初始化參數LOG_ARCHIVE_DEST_STATE_n控制歸檔位置的可用性.設置該參數為ENABLE(默認值),表示會激活相應的歸檔位置;設置該參數為DEFER,表示禁用相應歸檔位置.當歸檔日志所在磁盤損壞或填滿時,DBA需要暫時禁用該歸檔位置.
Altersystemsetlog_archive_dest_state_3=defer;(禁用)
Altersystemsetlog_archive_dest_state_3=enable;(啟用)
顯示歸檔日志信息
1,使用ARCHIVELOGLIST命令可以顯示日志操作模式,歸檔位置,自動歸檔機器要歸檔的日志序列號等信息.
2顯示日志操作模式
SELECTname,log_modeFROMv$database;
3,顯示歸檔日志信息.
Colnameformata40
Selectname,swquence#,first_change#FROMv$archived_log;
Name用于表示歸檔日志文件名,sequence#用于表示歸檔日志對應的日志序列號,firs_change#用于標識歸檔日志的起始SCN值.
4執行介質恢復時,需要使用歸檔日志文件,此四必須準確定位歸檔日志的存放位置.通過查詢動態性能視圖v$archive_dest可以取得歸檔日志所在目錄.
SELECTdestinationFROMv$archivedest;
5,顯示日志歷史信息
SELECT*FROMv$loghist;
THREAD#用于標識重做線程號,SEQUNCE#用于標識日志序列號,FIRST_CHANGE#用于標識日志序列號對應的起始SCN值,FIRST_TIME用于標識起始SCN的發生時間.SWICTH_CHANGE#用于標識日志切換的SCN值.
6.顯示歸檔進程信息.
進行日志切換時,ARCH進程會自動將重做日志內容復制到歸檔日志中,為了加快歸檔速度,應該啟用多個ARCH進程.通過查詢動態性能視圖V$ARCHIVE_PROCESSES可以顯示所有歸檔進程的信息!
SELECT*FROMv$archive_processes;
Porcess用于標識ARCH進程的編號,status用于標識ARCH進程的狀態(ACTIVE:活動,STOPPED:未啟動),log_sequence用于標識正在進行歸檔的日志序列號,state用于標識ARCH進程的工作狀態
online redo log file:
查看redo日志組:
select * from v$log;
查看redo日志文件:
select * from v$logfile;
/app/oracle/oradata/orcl/redo01.log
/app/oracle/oradata/orcl/redo02.log
/app/oracle/oradata/orcl/redo03.log
修改:
shutdown immediate
startup mount
mv /app/oracle/oradata/orcl/redo01.log /home/oradata/orcl/redo01.log
mv /app/oracle/oradata/orcl/redo02.log /home/oradata/orcl/redo02.log
mv /app/oracle/oradata/orcl/redo03.log /home/oradata/orcl/redo03.log
alter database rename file '/app/oracle/oradata/orcl/redo01.log' to '/home/oradata/orcl/redo01.log';
alter database rename file '/app/oracle/oradata/orcl/redo02.log' to '/home/oradata/orcl/redo02.log';
alter database rename file '/app/oracle/oradata/orcl/redo03.log' to '/home/oradata/orcl/redo03.log';
alter database open;
驗證redo日志文件:
select * from v$logfile;
====================================
data file:
查看
select file_name from dba_data_files;
select file_name from dba_temp_files;
修改:
shutdown immediate
startup mount
mv /app/oracle/oradata/orcl/users01.dbf
mv /app/oracle/oradata/orcl/undotbs01.dbf
mv /app/oracle/oradata/orcl/sysaux01.dbf
mv /app/oracle/oradata/orcl/system01.dbf
mv /app/oracle/oradata/orcl/temp01.dbf
alter database rename file '/app/oracle/oradata/orcl/users01.dbf' to '/home/oradata/orcl/users01.dbf' ;
alter database rename file '/app/oracle/oradata/orcl/undotbs01.dbf' to '/home/oradata/orcl/undotbs01.dbf' ;
alter database rename file '/app/oracle/oradata/orcl/sysaux01.dbf'
alter database rename file '/app/oracle/oradata/orcl/system01.dbf'
alter database rename file '/app/oracle/oradata/orcl/temp01.dbf'
alter database open;
驗證:
select file_name from dba_data_files;
select file_name from dba_temp_files;
===========================
control file:
查看:
show parameter control_files
shutdown immediate
create pfile from spfile;
修改initorcl.ora里面的control_files='/home/oradata/control01.ctl'
mv /app/oracle/oradata/orcl/control01.ctl /home/oradata/control01.ctl
rm -f /app/oracle/fast_recovery_area/orcl/control02.ctl
create spfile from pfile;
alter database mount;
alter database open;
驗證:
show parameter control_files
一. 碎片是如何產生的
當創建一個數據庫實例時,會分成稱為表空間(tablespace)的多個邏輯段(segment),如系統(system)表空間,臨時(temporary)表空間等。一個表空間可以包含多個數據范圍(extent)和一個或多個自由范圍塊,即自由空間(free space)。
表空間、段、范圍、自由空間的邏輯關系如下:
當表空間中生成一個段時,將從表空間有效自由空間中為這個段的初始范圍分配空間。在這些初始范圍充滿數據時,段會請求增加另一個范圍。這樣的擴展過程會一直繼續下去,直到達到最大的范圍值,或者在表空間中已經沒有自由空間用于下一個范圍。
最理想的狀態就是一個段的數據可被存在單一的一個范圍中。這樣,所有的數據存儲時靠近段內其它數據,并且尋找數據可少用一些指針。但是一個段包含多個范圍的情況是大量存在的,沒有任何措施可以保證這些范圍是相鄰存儲的。 當要滿足一個空間要求時,數據庫不再合并相鄰的自由范圍(除非別無選擇), 而是尋找表空間中最大的自由范圍來使用。這樣將逐漸形成越來越多的離散的、分隔的、較小的自由空間,即碎片。
表空間(tableSpace) 段(segment) 盤區(extent) 塊(block) 關系
二. 碎片對系統的影響
2.1 導致系統性能減弱
如上所述,當要滿足一個空間要求時,數據庫將首先查找當前最大的自由范圍,而"最大"自由范圍逐漸變小,要找到一個足夠大的自由范圍已變得越來越困難,從而導致表空間中的速度障礙,使數據庫的空間分配愈發遠離理想狀態;
2.2 浪費大量的表空間
部分extent無法得以自動合并,浪費了大量的表空間。
三. 自由范圍的碎片計算
由于自由空間碎片是由幾部分組成,如范圍數量、最大范圍尺寸等,我們可用FSFI(free space fragmentation index:自由空間碎片索引)值來直觀體現:
FSFI=100*sqrt(max(extent)/sum(extents))*1/sqrt(sqrt(count(extents)))
可以看出,FSFI的最大可能值為100(一個理想的單文件表空間)。隨著范圍的增加,FSFI值緩慢下降,而隨著最大范圍尺寸的減少,FSFI值會迅速下降。
可以使用如下SQL可以用來計算FSFI值:
/* Formatted on 2011/01/27 14:12:43 (QP5 v5.115.810.9015) */
SELECT tablespace_name,
SQRT (MAX (blocks) / SUM (blocks))
* (100 / SQRT (SQRT (COUNT (blocks))))
FSFI
FROM dba_free_space
GROUP BY tablespace_name
ORDER BY 1;
比如,在某數據庫運行上面SQL,得到以下FSFI值:
TABLESPACE_NAME FSFI
------------------------------ ----------
QS_OA 54.3794714
RBS 59.4603558
SYSAUX 84.0138802
SYSTEM 70.5946502
UNDOTBS1 20.0110492
USERS 100
XEZF 6.52482383 --碎片較多
XEZF_INDEX 32.1055286
8 rows selected.
四. 碎片整理
4.1 盤區(extent)的碎片整理
使用命令: alter tablespace temp coalesce;
/* Formatted on 2011/01/27 14:23:46 (QP5 v5.115.810.9015) */
SELECT 'alter tablespace ' || TABLESPACE_NAME || ' coalesce ;'
FROM DBA_FREE_SPACE_COALESCED
WHERE PERCENT_EXTENTS_COALESCED 100 OR PERCENT_BLOCKS_COALESCED 100;
4.2 段(segment)的碎片整理
段由extent組成。在有些情況下,有必要對段的碎片進行整理。要查看段的有關信息,可查看數據字典dba_segments,segment的信息可查看數據字典dba_extents。
段可以有表段,索引段等。 每種段都可以碎片的整理。
(1)表段碎片整理
如果段的碎片過多, 將其數據壓縮到一個范圍的最簡單方法便是用正確的存儲參數將這個段重建,然后將舊表中的數據插入到新表,同時刪除舊表。這個過程可以用import/export工具來完成。
export命令有一個(壓縮)標志,這個標志在讀表時會引發export確定該表所分配的物理空間量,它會向輸出轉儲文件寫入一個新的初始化存儲參數--等于全部所分配空間。若這個表關閉, 則使用import命令重新生成。這樣,它的數據會放入一個新的、較大的初始段中。例如:
exp user/password file=exp.dmp compress=y
grants=y indexes=y tables=(table1,table2);
導出成功后,在庫中刪除這兩張表,在導入數據:
imp user/password file=exp.dmp commit=y buffer=64000 tables=(table1,table2);
除了用exp/imp,還可以使用shrink table 或者alter table tbname move 來實現。
具體參考:
Oracle 10g Shrink Table 詳解
一個小腳本:
--1.整理空間碎片;
tmp_val VARCHAR2 (500);
BEGIN
FOR REC IN (SELECT TABLE_NAME FROM USER_TABLES )
LOOP
tmp_val:='ALTER TABLE '||user.TABLE_NAME ||' MOVE';
BEGIN
EXECUTE IMMEDIATE tmp_val;
DBMS_OUTPUT.put_line (tmp_val);
EXCEPTION
WHEN OTHERS
THEN
DBMS_OUTPUT.put_line ('Error: ' || tmp_val || '!');
END;
END LOOP;
(2). 索引段碎片整理
把索引重建(碎片整理后,很多索引會變成UNUSABLE狀態,必須重建后,讓它變成void狀態)
FOR REC IN (SELECT INDEX_NAME FROM USER_INDEXES ) --WHERE STATUS='UNUSABLE'
LOOP
tmp_val:='ALTER INDEX '||REC.INDEX_NAME ||' REBUILD';
BEGIN
EXECUTE IMMEDIATE tmp_val;
DBMS_OUTPUT.put_line (tmp_val);
EXCEPTION
WHEN OTHERS
THEN
DBMS_OUTPUT.put_line ('Error: ' || tmp_val || '!');
END;
END LOOP;
END;
新聞名稱:oracle怎么自動整理,Oracle設置自動提交
鏈接分享:http://m.kartarina.com/article36/hegipg.html
成都網站建設公司_創新互聯,為您提供網站設計、用戶體驗、全網營銷推廣、網站收錄、外貿建站、網站建設
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯