<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();              //這句和注意咯,別習(xí)慣成自然寫成另一句了
       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空值進(jìn)行修改,并更改編碼標(biāo)記.
                    
    // 由于在查詢時就進(jìn)行了鎖定,防止查詢后沒有錄入數(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 飛翔天使 閱讀(904) 評論(0)  編輯  收藏 所屬分類: JSP
    主站蜘蛛池模板: fc2免费人成在线| 亚洲福利在线观看| 国产一级特黄高清免费大片| 久久久久亚洲av毛片大| 亚洲欧洲日产国产综合网| 亚洲一区二区三区在线网站| 成在线人直播免费视频| 久久久久国产精品免费免费不卡| 欧洲精品成人免费视频在线观看 | 337P日本欧洲亚洲大胆艺术图| 在线观看免费黄网站| 国产免费观看网站| 美女黄频视频大全免费的| 久久久久久国产a免费观看黄色大片 | 亚洲精品美女久久久久| 国产亚洲高清在线精品不卡| 久久午夜夜伦鲁鲁片免费无码| 一级毛片直播亚洲| 久久久亚洲裙底偷窥综合| 香蕉视频在线观看免费| 亚洲国产精品综合久久网络| 中国china体内裑精亚洲日本| 色欲A∨无码蜜臀AV免费播| 伊人久久综在合线亚洲2019| xxxxx做受大片在线观看免费| 啦啦啦在线免费视频| 91精品国产亚洲爽啪在线影院| 2015日韩永久免费视频播放| 亚洲日韩中文在线精品第一| 亚洲av纯肉无码精品动漫| 91在线品视觉盛宴免费| 亚洲av福利无码无一区二区| 2020久久精品国产免费| 久久亚洲春色中文字幕久久久| 99热在线精品免费全部my| 久久亚洲精品11p| 国产V亚洲V天堂无码| 国产成人无码区免费网站| 久久亚洲中文字幕精品一区四| 久久ww精品w免费人成| 亚洲视频在线观看网址|