兩種方法:
創(chuàng)新互聯(lián)專注于網(wǎng)站建設(shè),為客戶提供成都網(wǎng)站設(shè)計、做網(wǎng)站、網(wǎng)頁設(shè)計開發(fā)服務(wù),多年建網(wǎng)站服務(wù)經(jīng)驗(yàn),各類網(wǎng)站都可以開發(fā),品牌網(wǎng)站制作,公司官網(wǎng),公司展示網(wǎng)站,網(wǎng)站設(shè)計,建網(wǎng)站費(fèi)用,建網(wǎng)站多少錢,價格優(yōu)惠,收費(fèi)合理。
1、插入之前,把檔案盒這個表格生成datatable,然后就可以用C#對datatable里面的ARCHIVES_ID,FILE_ID值進(jìn)行調(diào)整,生成最終的datatable之后用SqlBulkCopy批量處理插入oracle
2、在oracle里面寫存儲過程,對每一行插入的數(shù)據(jù)的ARCHIVES_ID,FILE_ID進(jìn)行處理,得到你想要的值
首先不知道你的數(shù)據(jù)庫在什么系統(tǒng)下:
window:
找到數(shù)據(jù)文件存放的位置,比如D:\存放的是oracle的數(shù)據(jù)文件,如果表空間采用的是自動管理方式,考慮將一些數(shù)據(jù)文件移到其他盤符下,比如:e:\等
linux/unix
du -sk * 查看oracle數(shù)據(jù)庫相關(guān)文件夾下每個文件的空間使用情況,刪除垃圾文件
如果沒有垃圾文件,嘗試整理表空間,可以釋放一些空間,只是暫時解決文件
增加裸設(shè)備
如果使用asm的方式管理的,考慮將asm里增加pv。
以上,希望能幫助你!
歸檔日志(ArchiveLog)是非活動的重做日志備份.通過使用歸檔日志,可以保留所有重做歷史記錄,當(dāng)數(shù)據(jù)庫處于ARCHIVELOG模式并進(jìn)行日志切換式,后臺進(jìn)程ARCH會將重做日志的內(nèi)容保存到歸檔日志中.當(dāng)數(shù)據(jù)庫出現(xiàn)介質(zhì)失敗時,使用數(shù)據(jù)文件備份,歸檔日志和重做日志可以完全恢復(fù)數(shù)據(jù)庫.
日志操作模式:ARCHIVELOGNOARCHIVELOG
1,改變?nèi)罩静僮髂J?
檢查當(dāng)前日志操作模式
SELECTlog_modefromv$database;
關(guān)閉數(shù)據(jù)庫,然后裝載數(shù)據(jù)庫
SHUTDOWNIMMEDIATE
STARTUPMOUNT
改變?nèi)罩静僮髂J?然后打開數(shù)據(jù)庫
ALTERDATABASEARCHIVELOG;
ALTERDATABASEOPEN;
2,執(zhí)行手工歸檔
從oracledatabase10g開始,當(dāng)將日志操作模式轉(zhuǎn)變未ARCHIVELOG模式時,oracle會自動啟動ARCH進(jìn)程.如果要使用手工歸檔.那么在改變?nèi)罩静僮髂J綍r必須使用命令A(yù)LTERDATABASEARCHIVELOGMANUAL.
需要注意,使用手工歸檔方式,數(shù)據(jù)庫管理員必須手工執(zhí)行歸檔命令.如果沒有執(zhí)行手工歸檔命令,日志組的原有內(nèi)容將不能被覆蓋.ALTERDATABASEARCHIVELOGMANUAL命令是為了與先前的版本兼容而保留的,.將來的oracle版本會淘汰該命令,使用手工歸檔方式是,數(shù)據(jù)庫管理員可以執(zhí)行以下命令歸檔重做日志:
SLTERSYSTEMARCHIVELOGALL;
3,配置歸檔進(jìn)程
初始化參數(shù)LOG_ARCHIVE_MAX_PROCESSES用于指定例程初始啟動的最大歸檔進(jìn)程個數(shù),當(dāng)將數(shù)據(jù)庫轉(zhuǎn)變?yōu)锳RCHIVELOG模式時,默認(rèn)情況下oracle會自動啟動兩個歸檔進(jìn)程.通過改變初始化參數(shù)LOG_ARCHIVE_MAX_PROCESS的值,可以動態(tài)地增加或降低歸檔進(jìn)程的個數(shù):
ALTERSYSTEMSETLOG_ARCHIVE_MAX_PROCESSES=3;
配置歸檔位置和文件格式
當(dāng)數(shù)據(jù)庫處于ARCHIVELOG模式時,如果進(jìn)行日志切換,后臺進(jìn)程將自動生成歸檔日志,歸檔日志的默認(rèn)位置為%oracle_home%rdbms,在oracledatabase10g中,歸檔日志的默認(rèn)文件格式為ARC%S_%R.%T.為了改變歸檔日志的位置和名稱格式,必須改變相應(yīng)的初始化參數(shù),
1,初始化參數(shù)LOG_ARCHIVE_FORMAT用于指定歸檔日志的文件名格式,設(shè)置該初始化參數(shù)時,可以指定以下匹配符:
%s:日志序列號:
%S:日志序列號(帶有前導(dǎo)0)
%t:重做線程編號.
%T:重做線程編號(帶有前導(dǎo)0)
%a:活動ID號
%d:數(shù)據(jù)庫ID號
%rRESETLOGS的ID值.
從10g開始,配置歸檔日志文件格式時,必須帶有%s,%t和%r匹配符,配置了歸檔文件格式后,必須重啟數(shù)據(jù)庫.
2,使用LOG_ARCHIVE_DEST配置歸檔位置
如果不使用備用數(shù)據(jù)庫,只需要將歸檔日志存放到本地目錄.配置本地歸檔位置可以使用初始化參數(shù)LOG_ARCHIVE_DEST和LOG_ARCHIVE_DUPLEX_DEST,其中,第一個參數(shù)用于設(shè)置第一個歸檔位置,第二個參數(shù)用于指定第二個歸檔位置.
ALTERSYSTEMSETlog_archive_dest=’d:demoarchive1’;
ALTERSYSTEMSETlog_archive_duplex_dest=’d:demoarchive2’;
3,使用LOG_ARCHIVE_DEST_n配置多個歸檔位置.
初始化參數(shù)LOG_ARCHIVE_DEST_n用于指定多個歸檔位置,該參數(shù)最多可以指定10個歸檔位置.通過使用初始化參數(shù)LOG_ARCHIVE_DEST_n,不僅可以配置本地歸檔位置,還可以配置遠(yuǎn)程歸檔位置.
如果既要在主節(jié)點(diǎn)上生成歸檔日志,又要將歸檔日志傳遞到備用節(jié)點(diǎn),那么必須使用參數(shù)LOG_ARCHIVE_DEST_n.該參數(shù)與LOG_ARCHIVE_DEST具有如下區(qū)別;
初始化參數(shù)LOG_ARCHIVE_DEST_n可以配置本地歸檔位置和遠(yuǎn)程歸檔位置,而初始化參數(shù)LOG_ARCHIVE_DEST和LOG_ARCHIVE_DUPLEX_DEST只能配置本地歸檔位置.
初始化參數(shù)LOG_ARCHIVE_DEST_n可以配置多達(dá)10個歸檔位置,而初始化參數(shù)LOG_ARCHIVE_DEST和LOG_ARCHIVE_DUPLEX_DEST最多只能配置兩個歸檔位置.
初始化參數(shù)LOG_ARCHIVE_DEST_n不能與初始化參數(shù)LOG_ARCHIVE_DEST和LOG_ARCHIVE_DUPLEX_DEST同時使用.
因?yàn)槌跏蓟瘏?shù)LOG_ARCHIVE_DEST_n不能與初始化參數(shù)LOG_ARCHIVE_DEST和LOG_ARCHIVE_DUPLEX_DEST同時使用,所以必須禁用初始化參數(shù)LOG_ARCHVE_DEST和LOG_ARCHIVE_DUPLEX_DEST.當(dāng)使用初始化參數(shù)LOG_ARCHIVE_DEST_n配置本地歸檔位置時,需要指定LOCALTION選項(xiàng).當(dāng)配置遠(yuǎn)程歸檔位置時,需要指定SERVICE選項(xiàng).
示例如下:
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’;
配置遠(yuǎn)程歸檔位置時,SERVICE選項(xiàng)需要指定遠(yuǎn)程數(shù)據(jù)庫的網(wǎng)絡(luò)服務(wù)名(在tnsnames.ora文件中配置)
4,使用LOG_ARCHIVE_DEST_n選項(xiàng)
使用初始化參數(shù)LOG_ARCHIVE_DEST_n配置歸檔位置時,可以在歸檔位置上指定OPTIONAL或MANDATORY選項(xiàng).指定MANDATORY選項(xiàng)時,可以設(shè)置REOPEN屬性.
OPTIONAL:該選項(xiàng)是默認(rèn)選項(xiàng).使用該選項(xiàng)時,無論歸檔是否成功,都可以覆蓋重做日志.
MANDATORY:強(qiáng)制歸檔.使用該選項(xiàng)時,只有在歸檔成功之后,重做日志才能被覆蓋.
REOPEN:該屬性用于指定重新歸檔的時間間隔,默認(rèn)值為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,控制本地歸檔成功的最小個數(shù).
使用初始化參數(shù)LOG_ARCHIVE_MIN_SUCCEED_DEST控制本地歸檔的最小成功個數(shù)
Altersystemsetlog_archive_min_succeed_dest=2;
6,使用初始化參數(shù)LOG_ARCHIVE_DEST_STATE_n控制歸檔位置的可用性.設(shè)置該參數(shù)為ENABLE(默認(rèn)值),表示會激活相應(yīng)的歸檔位置;設(shè)置該參數(shù)為DEFER,表示禁用相應(yīng)歸檔位置.當(dāng)歸檔日志所在磁盤損壞或填滿時,DBA需要暫時禁用該歸檔位置.
Altersystemsetlog_archive_dest_state_3=defer;(禁用)
Altersystemsetlog_archive_dest_state_3=enable;(啟用)
顯示歸檔日志信息
1,使用ARCHIVELOGLIST命令可以顯示日志操作模式,歸檔位置,自動歸檔機(jī)器要?dú)w檔的日志序列號等信息.
2顯示日志操作模式
SELECTname,log_modeFROMv$database;
3,顯示歸檔日志信息.
Colnameformata40
Selectname,swquence#,first_change#FROMv$archived_log;
Name用于表示歸檔日志文件名,sequence#用于表示歸檔日志對應(yīng)的日志序列號,firs_change#用于標(biāo)識歸檔日志的起始SCN值.
4執(zhí)行介質(zhì)恢復(fù)時,需要使用歸檔日志文件,此四必須準(zhǔn)確定位歸檔日志的存放位置.通過查詢動態(tài)性能視圖v$archive_dest可以取得歸檔日志所在目錄.
SELECTdestinationFROMv$archivedest;
5,顯示日志歷史信息
SELECT*FROMv$loghist;
THREAD#用于標(biāo)識重做線程號,SEQUNCE#用于標(biāo)識日志序列號,FIRST_CHANGE#用于標(biāo)識日志序列號對應(yīng)的起始SCN值,FIRST_TIME用于標(biāo)識起始SCN的發(fā)生時間.SWICTH_CHANGE#用于標(biāo)識日志切換的SCN值.
6.顯示歸檔進(jìn)程信息.
進(jìn)行日志切換時,ARCH進(jìn)程會自動將重做日志內(nèi)容復(fù)制到歸檔日志中,為了加快歸檔速度,應(yīng)該啟用多個ARCH進(jìn)程.通過查詢動態(tài)性能視圖V$ARCHIVE_PROCESSES可以顯示所有歸檔進(jìn)程的信息!
SELECT*FROMv$archive_processes;
Porcess用于標(biāo)識ARCH進(jìn)程的編號,status用于標(biāo)識ARCH進(jìn)程的狀態(tài)(ACTIVE:活動,STOPPED:未啟動),log_sequence用于標(biāo)識正在進(jìn)行歸檔的日志序列號,state用于標(biāo)識ARCH進(jìn)程的工作狀態(tài)
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;
驗(yàn)證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;
驗(yàn)證:
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;
驗(yàn)證:
show parameter control_files
一. 碎片是如何產(chǎn)生的
當(dāng)創(chuàng)建一個數(shù)據(jù)庫實(shí)例時,會分成稱為表空間(tablespace)的多個邏輯段(segment),如系統(tǒng)(system)表空間,臨時(temporary)表空間等。一個表空間可以包含多個數(shù)據(jù)范圍(extent)和一個或多個自由范圍塊,即自由空間(free space)。
表空間、段、范圍、自由空間的邏輯關(guān)系如下:
當(dāng)表空間中生成一個段時,將從表空間有效自由空間中為這個段的初始范圍分配空間。在這些初始范圍充滿數(shù)據(jù)時,段會請求增加另一個范圍。這樣的擴(kuò)展過程會一直繼續(xù)下去,直到達(dá)到最大的范圍值,或者在表空間中已經(jīng)沒有自由空間用于下一個范圍。
最理想的狀態(tài)就是一個段的數(shù)據(jù)可被存在單一的一個范圍中。這樣,所有的數(shù)據(jù)存儲時靠近段內(nèi)其它數(shù)據(jù),并且尋找數(shù)據(jù)可少用一些指針。但是一個段包含多個范圍的情況是大量存在的,沒有任何措施可以保證這些范圍是相鄰存儲的。 當(dāng)要滿足一個空間要求時,數(shù)據(jù)庫不再合并相鄰的自由范圍(除非別無選擇), 而是尋找表空間中最大的自由范圍來使用。這樣將逐漸形成越來越多的離散的、分隔的、較小的自由空間,即碎片。
表空間(tableSpace) 段(segment) 盤區(qū)(extent) 塊(block) 關(guān)系
二. 碎片對系統(tǒng)的影響
2.1 導(dǎo)致系統(tǒng)性能減弱
如上所述,當(dāng)要滿足一個空間要求時,數(shù)據(jù)庫將首先查找當(dāng)前最大的自由范圍,而"最大"自由范圍逐漸變小,要找到一個足夠大的自由范圍已變得越來越困難,從而導(dǎo)致表空間中的速度障礙,使數(shù)據(jù)庫的空間分配愈發(fā)遠(yuǎn)離理想狀態(tài);
2.2 浪費(fèi)大量的表空間
部分extent無法得以自動合并,浪費(fèi)了大量的表空間。
三. 自由范圍的碎片計算
由于自由空間碎片是由幾部分組成,如范圍數(shù)量、最大范圍尺寸等,我們可用FSFI(free space fragmentation index:自由空間碎片索引)值來直觀體現(xiàn):
FSFI=100*sqrt(max(extent)/sum(extents))*1/sqrt(sqrt(count(extents)))
可以看出,F(xiàn)SFI的最大可能值為100(一個理想的單文件表空間)。隨著范圍的增加,F(xiàn)SFI值緩慢下降,而隨著最大范圍尺寸的減少,F(xiàn)SFI值會迅速下降。
可以使用如下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;
比如,在某數(shù)據(jù)庫運(yùn)行上面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 盤區(qū)(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組成。在有些情況下,有必要對段的碎片進(jìn)行整理。要查看段的有關(guān)信息,可查看數(shù)據(jù)字典dba_segments,segment的信息可查看數(shù)據(jù)字典dba_extents。
段可以有表段,索引段等。 每種段都可以碎片的整理。
(1)表段碎片整理
如果段的碎片過多, 將其數(shù)據(jù)壓縮到一個范圍的最簡單方法便是用正確的存儲參數(shù)將這個段重建,然后將舊表中的數(shù)據(jù)插入到新表,同時刪除舊表。這個過程可以用import/export工具來完成。
export命令有一個(壓縮)標(biāo)志,這個標(biāo)志在讀表時會引發(fā)export確定該表所分配的物理空間量,它會向輸出轉(zhuǎn)儲文件寫入一個新的初始化存儲參數(shù)--等于全部所分配空間。若這個表關(guān)閉, 則使用import命令重新生成。這樣,它的數(shù)據(jù)會放入一個新的、較大的初始段中。例如:
exp user/password file=exp.dmp compress=y
grants=y indexes=y tables=(table1,table2);
導(dǎo)出成功后,在庫中刪除這兩張表,在導(dǎo)入數(shù)據(jù):
imp user/password file=exp.dmp commit=y buffer=64000 tables=(table1,table2);
除了用exp/imp,還可以使用shrink table 或者alter table tbname move 來實(shí)現(xiàn)。
具體參考:
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狀態(tài),必須重建后,讓它變成void狀態(tài))
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;