手頭上只有C#的代碼,不知道對(duì)你有沒(méi)有幫助

創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司,專注網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)、網(wǎng)站營(yíng)銷推廣,申請(qǐng)域名,網(wǎng)站空間,成都網(wǎng)站托管有關(guān)企業(yè)網(wǎng)站制作方案、改版、費(fèi)用等問(wèn)題,請(qǐng)聯(lián)系創(chuàng)新互聯(lián)。
遠(yuǎn)程備份要注意權(quán)限的問(wèn)題,普通的訪問(wèn)帳戶沒(méi)有備份和還原的權(quán)限,最好用sa的帳戶,并且程序訪問(wèn)的帳戶必須添加到遠(yuǎn)程機(jī)器的系統(tǒng)內(nèi)
你說(shuō)的遠(yuǎn)程備份到本地是不可能的,你只有開(kāi)放遠(yuǎn)程某個(gè)文件夾加入你的特殊訪問(wèn)帳戶權(quán)限
最好直接用遠(yuǎn)程桌面,這樣最方便
方法一(不使用SQLDMO):
///
///備份方法
///
SqlConnection conn = new SqlConnection("Server=.;Database=master;User ID=sa;Password=sa;");
SqlCommand cmdBK = new SqlCommand();
cmdBK.CommandType = CommandType.Text;
cmdBK.Connection = conn;
cmdBK.CommandText = @"backup database test to disk='C:\ba' with init";
try
{
conn.Open();
cmdBK.ExecuteNonQuery();
MessageBox.Show("Backup successed.");
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
conn.Close();
conn.Dispose();
}
///
///還原方法
///
SqlConnection conn = new SqlConnection("Server=.;Database=master;User ID=sa;Password=sa;Trusted_Connection=False");
conn.Open();
//KILL DataBase Process
SqlCommand cmd = new SqlCommand("SELECT spid FROM sysprocesses ,sysdatabases WHERE sysprocesses.dbid=sysdatabases.dbid AND sysdatabases.Name='test'", conn);
SqlDataReader dr;
dr = cmd.ExecuteReader();
ArrayList list = new ArrayList();
while(dr.Read())
{
list.Add(dr.GetInt16(0));
}
dr.Close();
for(int i = 0; i list.Count; i++)
{
cmd = new SqlCommand(string.Format("KILL ", list[i]), conn);
cmd.ExecuteNonQuery();
}
SqlCommand cmdRT = new SqlCommand();
cmdRT.CommandType = CommandType.Text;
cmdRT.Connection = conn;
cmdRT.CommandText = @"restore database test from disk='C:\ba'";
try
{
cmdRT.ExecuteNonQuery();
MessageBox.Show("Restore successed.");
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
conn.Close();
}
方法二(使用SQLDMO):
///
///備份方法
///
SQLDMO.Backup backup = new SQLDMO.BackupClass();
SQLDMO.SQLServer server = new SQLDMO.SQLServerClass();
//顯示進(jìn)度條
SQLDMO.BackupSink_PercentCompleteEventHandler progress = new SQLDMO.BackupSink_PercentCompleteEventHandler(Step);
backup.PercentComplete += progress;
try
{
server.LoginSecure = false;
server.Connect(".", "sa", "sa");
backup.Action = SQLDMO.SQLDMO_BACKUP_TYPE.SQLDMOBackup_Database;
backup.Database = "test";
backup.Files = @"D:\test\myProg\backupTest";
backup.BackupSetName = "test";
backup.BackupSetDescription = "Backup the database of test";
backup.Initialize = true;
backup.SQLBackup(server);
MessageBox.Show("Backup successed.");
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
server.DisConnect();
}
this.pbDB.Value = 0;
///
///還原方法
///
SQLDMO.Restore restore = new SQLDMO.RestoreClass();
SQLDMO.SQLServer server = new SQLDMO.SQLServerClass();
//顯示進(jìn)度條
SQLDMO.RestoreSink_PercentCompleteEventHandler progress = new SQLDMO.RestoreSink_PercentCompleteEventHandler(Step);
restore.PercentComplete += progress;
//KILL DataBase Process
SqlConnection conn = new SqlConnection("Server=.;Database=master;User ID=sa;Password=sa;Trusted_Connection=False");
conn.Open();
SqlCommand cmd = new SqlCommand("SELECT spid FROM sysprocesses ,sysdatabases WHERE sysprocesses.dbid=sysdatabases.dbid AND sysdatabases.Name='test'", conn);
SqlDataReader dr;
dr = cmd.ExecuteReader();
ArrayList list = new ArrayList();
while(dr.Read())
{
list.Add(dr.GetInt16(0));
}
dr.Close();
for(int i = 0; i list.Count; i++)
{
cmd = new SqlCommand(string.Format("KILL ", list[i]), conn);
cmd.ExecuteNonQuery();
}
conn.Close();
try
{
server.LoginSecure = false;
server.Connect(".", "sa", "sa");
restore.Action = SQLDMO.SQLDMO_RESTORE_TYPE.SQLDMORestore_Database;
restore.Database = "test";
restore.Files = @"D:\test\myProg\backupTest";
restore.FileNumber = 1;
restore.ReplaceDatabase = true;
restore.SQLRestore(server);
MessageBox.Show("Restore successed.");
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
server.DisConnect();
}
this.pbDB.Value = 0;
1、確保備份下的master數(shù)據(jù)庫(kù)與要恢復(fù)的SQL SERVER的版本一致性。
2、關(guān)閉打開(kāi)SQL Server Management Studio,打開(kāi)服務(wù)器管理器,點(diǎn)擊“配置”-“服務(wù)”,找到SQL SERVER服務(wù),右鍵點(diǎn)擊出快捷菜單。點(diǎn)擊“停止”停止MSSQLSERVER服務(wù)。
3、以管理員賬戶打開(kāi)cmd,輸入以下的命令:net start mssqlserver?/m。
4、打開(kāi)SQL Server Management Studio,出現(xiàn)連接到服務(wù)器的窗口,點(diǎn)擊取消。
5、點(diǎn)擊“新建查詢”,出現(xiàn)連接到服務(wù)器的窗口,點(diǎn)擊確定。因?yàn)槭菃斡脩裟J剑虼酥荒苡幸粋€(gè)鏈接進(jìn)入。
6、在查詢窗口輸入以下的命令。
7、重新啟動(dòng)SQL SERVER(MSSQLSERVER)服務(wù),右鍵點(diǎn)擊出快捷菜單。點(diǎn)擊“啟動(dòng)”啟動(dòng)服務(wù)就可以了。
我就實(shí)話實(shí)說(shuō)了,也不說(shuō)些假安慰的話了,如果數(shù)據(jù)損壞,那就看你有沒(méi)有備份過(guò)了,有備份的就幸運(yùn)了,如果沒(méi)有的話,而你自己又不懂?dāng)?shù)據(jù)庫(kù)恢復(fù),那只有請(qǐng)人幫忙恢復(fù)了,而且不一定能修復(fù),數(shù)據(jù)庫(kù)修復(fù)是一個(gè)很復(fù)雜的問(wèn)題,而且問(wèn)題可大可小啊,需要懂的很多,而且沒(méi)有保證一定就能修復(fù),看情況而定
SQL數(shù)據(jù)庫(kù)被損壞分以下幾種情況:
1、嚴(yán)重?fù)p壞;2、輕度損壞;3、有些表被損壞或有些表的部分記錄被損壞。
給你一個(gè)我日常維護(hù)數(shù)據(jù)庫(kù)的方法吧。
SQL Server 2000數(shù)據(jù)庫(kù)LDF損壞,只有mdf的恢復(fù)方法。
SQL Server 2000數(shù)據(jù)庫(kù)文件遭到破壞的現(xiàn)象經(jīng)常出現(xiàn),數(shù)據(jù)庫(kù)出錯(cuò)是否可以修復(fù)呢?答案是可以的,本日志以一個(gè)sql server 2000數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)日志文件ldf損壞了,mdf正常,數(shù)據(jù)庫(kù)附加失敗的修復(fù)方法總結(jié)一下,數(shù)據(jù)庫(kù)數(shù)據(jù)恢復(fù)在很多時(shí)候比較復(fù)雜,當(dāng)數(shù)據(jù)庫(kù)存在大量錯(cuò)誤的時(shí)候,使用DBCC修復(fù)也是不可以的,需要拆解數(shù)據(jù)庫(kù)來(lái)?yè)尵戎匾臄?shù)據(jù),下面是較為常見(jiàn)的一種SQL Server 2000數(shù)據(jù)庫(kù)修復(fù)方式:
1) 先及時(shí)把原來(lái)的數(shù)據(jù)庫(kù)文件(如test.mdf)備份到其他地方。
2) 停掉服務(wù)器。
3) 刪除這個(gè)test.mdf。
4) 重新建立一個(gè)test同名數(shù)據(jù)庫(kù)。
5) 刪除這個(gè)新建立的test數(shù)據(jù)庫(kù)的test.ldf文件,并用開(kāi)始備份好test.mdf文件覆蓋這個(gè)新建立的test.mdf文件。
6) 啟動(dòng)數(shù)據(jù)庫(kù)服務(wù)器。此時(shí)會(huì)看到數(shù)據(jù)庫(kù)test的狀態(tài)為“置疑”。這時(shí)候不能對(duì)此數(shù)據(jù)庫(kù)進(jìn)行任何操作。
.設(shè)置數(shù)據(jù)庫(kù)允許直接操作系統(tǒng)表。此操作可以在SQL Server Enterprise Manager里面選擇數(shù)據(jù)庫(kù)服務(wù)器,按右鍵,選擇“屬性”,在“服務(wù)器設(shè)置”頁(yè)面中將“允許對(duì)系統(tǒng)目錄直接修改”。
7) 設(shè)置test為緊急修復(fù)模式
update sysdatabases set status=-32768 where dbid=DB_ID('test')
此時(shí)可以在SQL Server Enterprise Manager里面看到該數(shù)據(jù)庫(kù)處于“只讀\置疑\脫機(jī)\緊急模式”可以看到數(shù)據(jù)庫(kù)里面的表,但是僅僅有系統(tǒng)表
8) 下面執(zhí)行真正的恢復(fù)操作,重建數(shù)據(jù)庫(kù)日志文件
dbcc rebuild_log('test','C:\Program Files\Microsoft SQL Server\MSSQL\Data\test_log.ldf')
執(zhí)行過(guò)程中,如果遇到下列提示信息:
服務(wù)器: 消息 5030,級(jí)別 16,狀態(tài) 1,行 1
未能排它地鎖定數(shù)據(jù)庫(kù)以執(zhí)行該操作。
DBCC 執(zhí)行完畢。如果 DBCC 輸出了錯(cuò)誤信息,請(qǐng)與系統(tǒng)管理員聯(lián)系。
說(shuō)明您的其他程序正在使用該數(shù)據(jù)庫(kù),如果剛才您在操作中使用SQL Server Enterprise Manager打開(kāi)了test庫(kù)的系統(tǒng)表,那么退出SQL Server Enterprise Manager就可以了。
正確執(zhí)行完成的提示應(yīng)該類似于:
警告: 數(shù)據(jù)庫(kù) 'test' 的日志已重建。已失去事務(wù)的一致性。應(yīng)運(yùn)行 DBCC CHECKDB 以驗(yàn)證物理一致性。將必須重置數(shù)據(jù)庫(kù)選項(xiàng),并且可能需要?jiǎng)h除多余的日志文件。
DBCC 執(zhí)行完畢。如果 DBCC 輸出了錯(cuò)誤信息,請(qǐng)與系統(tǒng)管理員聯(lián)系。
此時(shí)打開(kāi)在SQL Server Enterprise Manager里面會(huì)看到數(shù)據(jù)庫(kù)的狀態(tài)為“只供DBO使用”。此時(shí)可以訪問(wèn)數(shù)據(jù)庫(kù)里面的用戶表了。
9) 驗(yàn)證數(shù)據(jù)庫(kù)一致性
dbcc checkdb('test')
10.設(shè)置數(shù)據(jù)庫(kù)為正常狀態(tài)
sp_dboption 'test','dbo use only','false'
如果沒(méi)有出錯(cuò),那么恭喜,現(xiàn)在就可以正常的使用恢復(fù)后的數(shù)據(jù)庫(kù)啦。
11)最后一步,我們要將步驟6中設(shè)置的“允許對(duì)系統(tǒng)目錄直接修改”一項(xiàng)恢復(fù);
網(wǎng)站標(biāo)題:sqlserver已損壞,sql server 2008修復(fù)數(shù)據(jù)庫(kù)
文章分享:http://www.yijiale78.com/article12/dsihpgc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供小程序開(kāi)發(fā)、搜索引擎優(yōu)化、云服務(wù)器、服務(wù)器托管、標(biāo)簽優(yōu)化、網(wǎng)站排名
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)