在虛擬主機(jī)的環(huán)境下,因?yàn)闆](méi)有管理員權(quán)限,只有數(shù)據(jù)庫(kù)使用權(quán)限,定時(shí)備份SQL數(shù)據(jù)是
個(gè)比較麻煩的問(wèn)題。解決思路如下:(僅對(duì)SQL2000有效)
1. 利用T-SQL備份數(shù)據(jù)庫(kù)到指定目錄,文件名根據(jù)日期指定。
2. 利用Resin的定時(shí)功能,定時(shí)執(zhí)行備份。
3. 用戶(hù)定時(shí)下載備份并且刪除過(guò)期備份。
導(dǎo)出全部數(shù)據(jù)到Excel也比較實(shí)用。下面提供的方法可以導(dǎo)出庫(kù)中的全部表,也可以指定
幾個(gè)表導(dǎo)出。注意:
1. 因?yàn)槭菍?dǎo)出全部數(shù)據(jù),在數(shù)據(jù)比較多的情況下慎用。
2. 理論上應(yīng)該適用各種JDBC數(shù)據(jù)庫(kù),僅對(duì)SQL2000測(cè)試過(guò)
3. 對(duì)于B/S下載,建議不要在服務(wù)器上生成文件,以免造成垃圾文件。直接從HTTP的Response中取得OutputStream進(jìn)行輸出。
4. Excel操作的API請(qǐng)到這里下載:http://www.andykhan.com/jexcelapi/
package steeven;
import jxl.write.*;
import java.util.*;
import java.sql.Statement;
import java.sql.ResultSet;
import java.sql.Types;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.text.DateFormat;
import java.io.*;
/**
* <p>Title: 數(shù)據(jù)庫(kù)備份</p>
* <p>Description: 在Java中備份數(shù)據(jù)庫(kù)</p>
* @author steeven
* @version 1.0
*/
public class DBackup{
Context ctx ;
public DBackup(Context ctx) {
this.ctx = ctx;
}
/**
* 備份SQL2000數(shù)據(jù)庫(kù)到文件,整個(gè)數(shù)據(jù)庫(kù)備份
* 文件名后面將追加備份年月日。例如:c:\dbBackup\mydb031109
* @param file 導(dǎo)出的文件名全路徑。例如:"c:\\dbBackup\\mydb"
*/
public void backup(String dbName, String file)throws SQLException{
String sql = "BACKUP DATABASE ["+dbName+"] TO DISK = N'";
sql += file + new SimpleDateFormat("yyMMdd").format(new Date());
sql += "' WITH NOINIT , NOUNLOAD , NAME = N'lvdong', NOSKIP ,