<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 147  文章 - 71  trackbacks - 0
    <2011年11月>
    303112345
    6789101112
    13141516171819
    20212223242526
    27282930123
    45678910

    常用鏈接

    留言簿(1)

    隨筆分類(146)

    隨筆檔案(147)

    文章分類(28)

    文章檔案(28)

    喜歡的Blog

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    備份:backup database 數(shù)據(jù)庫名字 to disk='備份到的位置' with init

    還原:restore database 數(shù)據(jù)庫名字 from disk='備份到的位置' with replace


    數(shù)據(jù)庫連接類
    ------------------------------------------------------------ 

    package com;

    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.text.SimpleDateFormat;
    import java.util.Date;

    import org.apache.log4j.Logger;

    /**
    * 數(shù)據(jù)庫備份與還原
    @author Stream
    *
    */
    public class DateBakDao {
    /**
    * 1 
    */
    private static String driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
    private static String url = "jdbc:sqlserver://localhost:1413;databaseName=stream";
    private static String urlrevert = "jdbc:sqlserver://localhost:1413;databaseName=master";   //還原不能用自己的數(shù)據(jù)庫,不能自己還原自己吧^_^
    private static String username = "sa";
    private static String password = "stream1990";
    /**
    * 2
    */


    static {
       
    try {
       
        Class.forName(driver);
       } 
    catch (Exception e) {
        
    // TODO: handle exception
       
       }
    }

    /**
    * 3  
    */
    public static Connection getCon(String type) {
       Connection con 
    = null;
       
    try {
        
    if(type.equals("bak")){                               //因為寫一個類中,
         con=DriverManager.getConnection(url,username,password);
        }
    else{
         con
    =DriverManager.getConnection(urlrevert,username,password);
        }
       } 
    catch (Exception e) {
        e.printStackTrace();
       } 
    finally {
        
    return con;
       }
    }
       
    /**
        * 4 
        
    */
    public static void closeCon(ResultSet rs,PreparedStatement ps,Connection con){
       
    try {
        
    if(rs!=null){
         rs.close();
        }
        
    if(ps!=null){
         ps.close();
        }
        
    if(con!=null){
         con.close();
        }
       } 
    catch (Exception e) {
        
    // TODO: handle exception
       }
    }

    public static void main(String[] args) {
       System.out.println(getCon(
    "bak"));
      
      
    }
    }


    備份處理JSP
    ------------------------------------------------------------ 

    <%@ page language="java" import="java.util.*,com.*,org.apache.log4j.Logger" pageEncoding="UTF-8"%>
    <%@page import="java.sql.*;"%>
    <%
       
    boolean flag=true;
       Connection con
    =null;
       ResultSet rs
    =null;
       String filePath
    ="";
       Logger logger
    =Logger.getLogger("doDataBak.jsp");
       
       String value 
    = request.getParameter("bakname");
       
    if(value==null || value.trim().equals("")){
       
    //為它取個名字
       java.util.Date now = new java.util.Date();
          java.text.SimpleDateFormat formatter 
    = new java.text.SimpleDateFormat("yyyyMMddHHmmss");
          value 
    = formatter.format(now);
          
       }

       
    try{
       con
    =new DateBakDao().getCon("bak");
       filePath
    =this.getServletConfig().getServletContext().getRealPath("/")+"admin\\bak\\"+value+".dat";
       String sql
    ="backup database stream to disk='"+filePath+"'"+" with init"
       
    //out.print(sql);
       Statement st=con.createStatement();              //這句和注意咯,別習慣成自然寫成另一句了
       st.execute(sql); 
       
       logger.info(
    "成功備份數(shù)據(jù)庫到"+filePath);
       st.close();
       
    }
    catch(Exception e){
       flag
    =false;
       e.printStackTrace();
       logger.info(
    "備份數(shù)據(jù)庫時出現(xiàn)錯誤");
      
    }
    finally{
       
    new DateBakDao().closeCon(rs,null,con);
      
    }


    if(flag==true && new java.io.File(filePath).isFile()){
       out.print(
    "<script>alert('備份成功')</script>");
       out.print(
    "數(shù)據(jù)備份在"+filePath);
    }
    else{
      
       out.print(
    "<script>alert('備份失敗')</script>");
    }
    %>


    數(shù)據(jù)庫還原處理 JSP
    ------------------------------------------------------------ 

    <%@ page language="java" import="java.util.*,com.*,org.apache.log4j.Logger" pageEncoding="UTF-8"%>
    <%@page import="java.sql.*;"%>
    <%

    String filePath
    =request.getParameter("path");
         
    boolean flag=true;
    Connection con
    =null;
    ResultSet rs
    =null;

    Logger logger
    =Logger.getLogger("doDataRevert.jsp");
       
    try{
    //關(guān)閉這個數(shù)據(jù)庫的所有連接
       con=new DateBakDao().getCon("revert");
       String killconnsql 
    = "exec killspid 'stream' ";                  //這里是執(zhí)行一個存儲過程,存儲過程在下面貼出
       CallableStatement stt = con.prepareCall(killconnsql);
       stt.execute();
       stt.close();
       
       
    //執(zhí)行數(shù)據(jù)庫還原
       
    //filePath=this.getServletConfig().getServletContext().getRealPath("/")+"bak\\magic.dat";
       String sql="restore database stream from disk='"+filePath+"'"+" with replace";   
       
    //out.print(sql);
       Statement st=con.createStatement();              //同備份
       st.execute(sql);
       
       st.close();
       
    }
    catch(Exception e){
       flag
    =false;
       e.printStackTrace();
       logger.info(
    "還原數(shù)據(jù)庫出現(xiàn)錯誤");
      
    }
    finally{
       
    new DateBakDao().closeCon(rs,null,con);
      
    }

    if(flag==true){
          logger.info(
    "還原了一次數(shù)據(jù)庫"); 
       out.print(
    "還原成功");
      
    }
    else{
      
       out.print(
    "<script>alert('還原失敗')</script>");
    }

    %>


    關(guān)閉指定數(shù)據(jù)庫所有連接的存儲過程
    ------------------------------------------------------------ 

    create proc killspid (@dbname varchar(20))   
    as   
    begin   
    declare @sql nvarchar(500)   
    declare @spid int   
    set @sql='declare getspid cursor for     
    select spid from sysprocesses where dbid=db_id(
    '''+@dbname+''')'   
    exec (@sql)   
    open getspid   
    fetch next from getspid into @spid   
    while @@fetch_status < >-1   
    begin   
    exec('kill '+@spid)   
    fetch next from getspid into @spid   
    end   
    close getspid   
    deallocate getspid   
    end   

    --用法   
    use master   
    exec killspid '數(shù)據(jù)庫名' 

    定時備份數(shù)據(jù)庫
    ContextListener類
    package serverbean;

    import javax.servlet.ServletContextEvent;
    import javax.servlet.ServletContextListener;
    import javax.servlet.http.HttpServlet;

    public class ContextListener extends HttpServlet implements
            ServletContextListener {
        
    /**
         * 
         
    */
        
    private static final long serialVersionUID = 1L;

        
    public ContextListener() {
        }

        
    private java.util.Timer timer = null;

        
    public void contextInitialized(ServletContextEvent event) {
            timer 
    = new java.util.Timer(true);
            event.getServletContext().log(
    "定時器已啟動");
            
    //timer.schedule(new DatabaseTask(event.getServletContext()), 0,
            
    //        60 * 60 * 1000); // 后邊最后一個參數(shù)代表監(jiān)視器的監(jiān)視周期,現(xiàn)在為一小時
            timer.schedule(new DatabaseTask(event.getServletContext()), 01000); // 后邊最后一個參數(shù)代表監(jiān)視器的監(jiān)視周期,現(xiàn)在為一秒
            event.getServletContext().log("已經(jīng)添加任務(wù)調(diào)度表");
        }

        
    public void contextDestroyed(ServletContextEvent event) {
            timer.cancel();
            System.out.println(
    "定時器銷毀");
            event.getServletContext().log(
    "定時器銷毀");
        }

    }
    MyTask類
    package serverbean;

    import java.util.Calendar;
    import java.util.TimerTask;

    import javax.servlet.ServletContext;
    import javax.servlet.ServletException;

    import java.sql.SQLException;
    import java.text.SimpleDateFormat;
    import dbconn.DBResult;

    public class DatabaseTask extends TimerTask {

        
    /**
         * Constructor of the object.
         
    */
        
    public DatabaseTask() {
            
    super();
        }

        
    // private static final int C_SCHEDULE_HOUR = 3;//這個代表3點鐘的時候執(zhí)行任務(wù)
        private static final int C_SCHEDULE_SECOND = 3;// 這個代表3秒鐘的時候執(zhí)行任務(wù)

        
    private static boolean isRunning = false;

        
    private ServletContext context = null;

        
    public DatabaseTask(ServletContext context) {
            
    this.context = context;
        }

        
    public void run() {
            Calendar cal 
    = Calendar.getInstance();
            
    if (!isRunning) {
                
    // if (C_SCHEDULE_HOUR == cal.get(Calendar.HOUR_OF_DAY)) {
                if (C_SCHEDULE_SECOND == cal.get(Calendar.SECOND)) {
                    isRunning 
    = true;
                    context.log(
    "開始執(zhí)行指定任務(wù)");
                    
                    String filePath 
    = this.context.getRealPath("/database_bak");
                    SimpleDateFormat tempDate 
    = new SimpleDateFormat(
                            
    "yyyy-MM-dd" + "_" + "HH-mm-ss"); // HH表示24小時制,hh表示12小時制
                    String datetime = tempDate.format(new java.util.Date());
                    filePath 
    = filePath + "\\FIOM_bak_" + datetime;
                    String sql 
    = "backup database FIOM to disk= '" + filePath
                            
    + "'";
                    DBResult conn
    =new DBResult();
                    
    try {
                        conn.executeUpdate(sql);
                    } 
    catch (SQLException e) {
                        
    // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    
    // System.out.println(this.context.getRealPath("/database_bak"));                
                    
                    
    // 對table空值進行修改,并更改編碼標記.
                    
    // 由于在查詢時就進行了鎖定,防止查詢后沒有錄入數(shù)據(jù)
                    
    // new CodeDAO().changeState();//此處寫執(zhí)行任務(wù)代碼
                    isRunning = false;
                    context.log(
    "指定任務(wù)執(zhí)行結(jié)束");
                }
            } 
    else {
                context.log(
    "上一次任務(wù)執(zhí)行還未結(jié)束");
            }
        }

        
    public void init() throws ServletException {
            
    // Put your code here
        }

    }
    最后需要在"web.xml"加上這樣一句話,這樣才能在服務(wù)器啟動的時候就執(zhí)行監(jiān)視器。
    <listener> 
    <listener-class>serverbean.ContextListener </listener-class> 
    </listener>
    posted on 2011-11-04 22:32 飛翔天使 閱讀(898) 評論(0)  編輯  收藏 所屬分類: JSP
    主站蜘蛛池模板: 亚洲天天做日日做天天看| 婷婷亚洲综合五月天小说在线| 国产成人精品免费视频大全麻豆 | 免费二级毛片免费完整视频| 乱淫片免费影院观看| 亚洲成人动漫在线| 日本高清免费不卡在线| 中文字字幕在线高清免费电影| 中文字幕亚洲第一在线| 亚洲 国产 图片| 四虎在线成人免费网站| 三级片免费观看久久| 亚洲av无码国产综合专区| 黑人大战亚洲人精品一区| 国产人成免费视频网站| 亚洲阿v天堂在线2017免费| 亚洲综合丁香婷婷六月香| 在线亚洲午夜理论AV大片| 成年女人视频网站免费m | 久久久青草青青国产亚洲免观| 日韩国产免费一区二区三区| 国产精品1024在线永久免费 | 日本久久久免费高清| 日本一卡精品视频免费| 成人国产网站v片免费观看| 亚洲a∨无码男人的天堂| 亚洲午夜精品久久久久久人妖| 亚洲AV中文无码乱人伦| 国产精品成人免费视频网站京东 | 无码A级毛片免费视频内谢| a免费毛片在线播放| WWW国产亚洲精品久久麻豆| 亚洲一区二区三区在线| 亚洲国产天堂在线观看| 亚洲性猛交XXXX| 亚洲精品国产精品国自产观看| 妞干网免费视频观看| 免费下载成人电影| 曰批视频免费40分钟试看天天| AAAAA级少妇高潮大片免费看| 国产午夜亚洲精品不卡电影|