我們匯入mr資料時發現磁碟空間不夠用了,導致的結果就是我們的程式很可能會丟擲異常了,我們需要匯入資料的時候進行日誌**。
問1:匯入資料的時候,**是否會造成資料庫的異常?
回答問1:
沒有問題。不會產生衝突。不過要給日子預留空間,防止被填滿。
1. 確認m_develop 的恢復模式是否為簡單******。
檢視指令碼如下。
select recovery_model_desc,name
from sys.databases
where name='m_develop'
2. 如果不是******。請改為******
修改指令碼如下:
use [master]
goalter database [m_develop] set recovery ****** with no_wait
go。3.恢復模式為******之後。確認日誌大小,和占用百分比:指令碼如下:
4.如果資料庫是******之後,log space used(%) 日誌佔比應該比較小。
5.收縮日誌檔案大小
use m_develop
go--找到庫的日誌檔名稱
select name
from sys.database_files
where type_desc='log'
--縮小日誌,假設上述查詢結果日誌名為m_develop_log,收縮至10g,那麼指令碼如下
dbcc shrinkfile (m_develop_log,10240)
--再次檢查日誌量大小
dbcc sqlperf(logspace)
當我們改為多執行緒之後,之前dba給提出使用單獨的表來站位對應的mr表的oid,防止多執行緒在執行bulkcopy相關儲存過程中出現搶占同乙個oid,導致出現異常:
儲存過程
操作源資料
使用的站位表
bulkcopytempm1tom1_0
importtemp_m1_01
m1及其相關子表
m1_m2及其相關子表
global_maxm1oid
global_maxm1_m2oid
bulkcopytempm2tom2_0
importtemp_m2_01
m1及其相關子表
m1_m2及其相關子表
global_maxm2oid
global_maxm1_m2oid
bulkcopytempm3tom3_0
importtemp_m3_01
m3_rip及m3_rip_pdf
global_maxm3oid
之前避免出現占用同乙個oid的方案為:
以m1為例:
begin transaction
查詢出當前當前global_maxm1oid中maxoid的值,儲存為@maxoid;
set @maxoid=@maxoid+@tempcount;
修改global_maxm1oid中的maxoid值
commit
但這裡是出現問題的:
查詢出當前當前global_maxm1oid中maxoid的值,儲存為@maxoid;
該語句出現在begin transaction的第一行就不能保證會鎖定表global_maxoid;
修改方案:
新增新列:flag int到表global_maxm1oid中,
事務語句塊改寫為:
set xact_abort on;
begin transaction
----- 確保一進入事務語句塊就鎖表(tn.global_maxm1oid,tn.global_maxm1_m2oid),防止其他儲存過程例項再次操作這些表,直到該語句塊結束為止
update tn.global_maxm1oid set flag=1 where oid=1;
update tn.global_maxm1_m2oid set flag=1 where oid=1;
select @maxm1oid =maxoid from tn.global_maxm1oid where oid=1;
select @maxm1_m2oid =maxoid from tn.global_maxm1_m2oid where oid=1;
update tn.global_maxm1oid set maxoid=(@maxm1oid+@tempcount), flag=0 where oid=1;
update tn.global_maxm1_m2oid set maxoid=(@maxm1_m2oid+@tempcount), flag=0 where oid=1;
commit transaction;
當我們匯入資料時發現資料匯入的資料量很小很顯然是匯入的資料很多沒有入庫,dba採用日誌表tn.logger跟蹤的方案;
tn.logger表中字段的意義:
logger字段
字段值意義
oid編號,自增列,非主鍵
enodebid
當前操作的基站編號enodebid
procedurename
當前記錄寫在哪乙個儲存過程中
entrym3oid
該儲存過程佔位之前global_maxm3oid值
exportm3oid
該儲存過程佔位之後global_maxm3oid值
entrym1oid
該儲存過程佔位之前global_maxm1oid值
exportm1oid
該儲存過程佔位之後global_maxm1oid值
entrym2oid
該儲存過程佔位之前global_maxm2oid值
exportm2oid
該儲存過程佔位之後global_maxm2oid值
entrym1_m2oid
該儲存過程佔位之前global_maxm1_m2oid值
exportm1_m2oid
該儲存過程佔位之後global_maxm1_m2oid值
reporttime
該基站mr上報時間
currentrowcount
當前臨時表運算元據記錄數量
operatedatetime
當前日誌記錄時間
在web.config中新增了配置
在bulkcopy中新增以下語句塊:
把解析入庫的tempm1,tempm2,tempm3不從臨時表中刪除,以便我們能監控到我們解析了多少資料,我們寫入到m1,m2,m3分別有多少記錄,從而達到跟蹤的效果;
同時還記錄了每次執行緒進入占用的maxoid值,從而也可以除錯到每個執行緒占用maxoid的情況.
SQL日誌檔案太大,清理方法
最佳答案方法1 在查詢分析儀裡面執行下面 方法2 進入企業管理器,選中資料庫 所有任務 分離資料庫 到資料庫檔案的存放目錄,將dbname log.ldf檔案刪除,怕s的話可以拷出去 企業管理器 附加資料庫,選dbname,這個時候你會看見日誌檔案這項是乙個叉,不要緊繼續,此時資料庫就會提示你該資料...
SQL2000清理日誌檔案
最好備份日誌,以後可通過日誌恢復資料。以下為日誌處理方法 一般不建議做第4,6兩步 第4步不安全,有可能損壞資料庫或丟失資料 第6步如果日誌達到上限,則以後的資料庫處理會失敗,在清理日誌後才能恢復.下面的所有庫名都指你要處理的資料庫的庫名 1.清空日誌 dump transaction 庫名 wit...
SQL2000清理日誌檔案
最好備份日誌,以後可通過日誌恢復資料。以下為日誌處理方法 一般不建議做第4,6兩步 第4步不安全,有可能損壞資料庫或丟失資料 第6步如果日誌達到上限,則以後的資料庫處理會失敗,在清理日誌後才能恢復.下面的所有庫名都指你要處理的資料庫的庫名 1.清空日誌 dump transaction 庫名 wit...