Toggle Theme Editor
Slate Blueberry Blackcurrant Watermelon Strawberry Orange Banana Apple Emerald Chocolate Charcoal

Sao lưu và phục hồi csdl

Discussion in 'MS SQL Server' started by tetuongrua, 13/9/11.

  1. tetuongrua

    tetuongrua Member

    Khi mình làm bài tập lớn về kết nồi CSDL trong java.Bây giờ mình muốn sao lưu lại toàn bộ CSDL sao khi đã thực hiện các thao tác với CSDL trong project của mình thì mình phải làm sao và làm sao để phục hồi lại được.Mình nghĩ là phải sao lưu lại tất cả các thay đổi trong các bảng hiện hành trong CSDL nhưng mình không biết phải làm sao.Mong mọi người giúp đỡ.
     
  2. tranhuyvc

    tranhuyvc Administrator Staff Member

    Ðề: Sao lưu và phục hồi csdl

    Bạn sao lưu bằng query, thành 1 file .sql thì dể dàng lưu trữ hơn, hệ quản trị CSDL nào cũng có chức năng đó hết
     
  3. tetuongrua

    tetuongrua Member

    Ðề: Sao lưu và phục hồi csdl

    anh ơi ý của em là khi mình viết một chương trình có truy vấn CSDL.Sau khi thực hiện các thao tác trên chương trình, bây giờ mình muốn sao lưu lại dữ liệu để về sau có thể phục hồi lại giống như tình trạng mình đã sau lưu ban đầu thì mình phải làm sao đây anh.Em nghĩ là mình phải sao lưu lại hiện trạng của các bảng trong CSDL không biết có đúng không?Mong anh và mọi người giúp đỡ.Em cám ơn mọi người.
     
  4. Ðề: Sao lưu và phục hồi csdl

    Có thể nói rõ CSDL gì được ko, ý của bạn là export database ra phải không nhỉ, ghi hơi khó hiểu ::D .
    - Thao tác bằng tay y như trên, còn không thì phải viết hàm export thôi.

    Đại khái là tạo connect . Sau đó system out println chỉ rõ đường dẫn sẽ lưu,sau đó export ra .
     
  5. tetuongrua

    tetuongrua Member

    Ðề: Sao lưu và phục hồi csdl

    Ý của mình là khi viết một chương trình quản lý gì đó thì mình có truy vấn dữ liệu từ CSDL lên để add vào một bảng trong from chẳng hạn.Sau đó trong chương trình mình có thay đổi dữ liệu trong bảng thì CSDL cũng sẽ thay đổi theo.Mình muốn là trong chương trình của mình có chức năng sao lưu và phục hồi lại dữ liệu thì mình phải làm sao?
     
  6. Ðề: Sao lưu và phục hồi csdl

    Khi sao lưu thì nó sẽ lưu ở đâu ??? Cái form hay gì đó nó chỉ là thao tác với CSDL thuộc về lập trình CSDL thôi mà , đâu có liên quan gì tới việc backup , tại thời điểm đó thì nó chỉ lưu trong Hệ quản trị csdl nào đó thôi, bạn mún sao lưu thì phải export ra chứ sao, sau đó nếu mún thì restore lại tại thời điểm đó . Tất nhiên trong chương trình sẽ tạo ra 2 Button thao tác backup và restore .
     
  7. tetuongrua

    tetuongrua Member

    Ðề: Sao lưu và phục hồi csdl

    Bạn có thể hướng dẫn cụ thể cho mình được không,mình chưa rõ cách export ra sau nữa.Mong bạn giúp đỡ
     
  8. Ðề: Sao lưu và phục hồi csdl

    Chẳng hạn như thế này với mysql .

    Code:
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.Statement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    
    // AutomateExport 
    public class automateExport {
        public static void main(String[] args) {
            DBase db = new DBase();
            Connection conn = db.connect(
                    "jdbc:mysql://localhost:3306/test","user","pass");
            
            if (args.length != 1) {
                System.out.println(
                        "Usage: java automateExport [outputfile path] ");
                return;
            }
            db.exportData(conn,args[0]);
        }
        
    }
    
    class DBase {
        public DBase() {
        }
        
        public Connection connect(String db_connect_str, 
                String db_userid, String db_password) {
            Connection conn;
            try {
                Class.forName("com.mysql.jdbc.Driver").newInstance();
                conn = DriverManager.getConnection(db_connect_str,
                        db_userid, db_password);
                
            } catch(Exception e) {
                e.printStackTrace();
                conn = null;
            }
            return conn;
        }
        
        public void exportData(Connection conn,String filename) {
            Statement stmt;
            String query;
            try {
                stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
                        ResultSet.CONCUR_UPDATABLE);
                
                //For comma separated file
                query = "SELECT[COLOR="Red"][B] gì đó [/B][/COLOR]into OUTFILE  '"+filename+
                        "' FIELDS TERMINATED BY ',' FROM[COLOR="Red"] [B]gì đó[/B][/COLOR]"; // Chỗ này query export file
                stmt.executeQuery(query);
                
            } catch(Exception e) {
                e.printStackTrace();
                stmt = null;
            }
        }
    };
    
     
  9. tetuongrua

    tetuongrua Member

    Ðề: Sao lưu và phục hồi csdl

    Mình đang sử dụng SQL SERVER 2005.Vậy thì mình backup and restore như thế nào vậy bạn?Mình cám ơn bạn trước.
     
  10. tetuongrua

    tetuongrua Member

    Ðề: Sao lưu và phục hồi csdl

    Mình đã thực hiện backup được rồi nhưng khi restore lại thì nó cứ báo lỗi như sau
    Exclusive access could not be obtained because the database is in use.Mong các bạn giúp đỡ
    Còn đây là code backup và restore của mình
    PHP:
    private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {                                         
             try{
            
    String userName "sa";
            
    String password "123456";
            
    String url "jdbc:sqlserver://localhost:1433;databaseName=nvpb;";
            Class.
    forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            
    con java.sql.DriverManager.getConnection(url,userName,password);
            
    System.out.println ("Da ket noi CSDL");
            }catch(
    Exception e){}
            
    String sql1;
          
    //  JFileChooser a=new JFileChooser();
           // a.showOpenDialog(this);
            
    sql1="USE nvpb;EXEC sp_addumpdevice 'disk' , 'BAK4' ,'D:'\'CSDL3_backup.bak';BACKUP DATABASE nvpb TO BAK4";
            try {
                
    PreparedStatement pst=con.prepareStatement(sql1);
                
    int n=pst.executeUpdate();
                if(
    n>0){
                    
    JOptionPane.showMessageDialog(null,"DA SAO LUU CSDL");
                    
    khong("");
                }  
            } catch (
    SQLException ex) {
                
    JOptionPane.showMessageDialog(nullex);
            }
        }                                 
    và restore
    PHP:
    private void jButton6ActionPerformed(java.awt.event.ActionEvent evt) {                                         
            try{
            
    String userName "sa";
            
    String password "123456";
            
    String url "jdbc:sqlserver://localhost:1433;databaseName=nvpb";
            Class.
    forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            
    con java.sql.DriverManager.getConnection(url,userName,password);
            
            
    System.out.println ("Da ket noi CSDL");
            }catch(
    Exception e){}
            
    String sql1;
          
    //  JFileChooser a=new JFileChooser();
           // a.showOpenDialog(this);
           // sql1="USE master go RESTORE DATABASE nvpb FROM DISK = 'D:'\'CSDL2_backup.bak'";
            
    sql1="RESTORE DATABASE nvpb FROM DISK = 'D:'\'CSDL3_backup.bak';";
            try {
                
    PreparedStatement pst=con.prepareStatement(sql1);
                
    int n=pst.executeUpdate();
                if(
    n>0){
                    
    JOptionPane.showMessageDialog(null,"DA RESTORE TRONG CSDL");
                    
    khong("");
                }  
            } catch (
    SQLException ex) {
                
    JOptionPane.showMessageDialog(nullex);
            }
        }                                        
     
  11. Ðề: Sao lưu và phục hồi csdl

    Lỗi đơn giản là do bạn chưa đóng các kết nối khi mở thôi . Hình như bạn dùng SQL 2005 nên tắt hết các cửa số đang chạy đi chẳng hạn Query analyzer hay Enterprise hay Oracle ... hay cái gì đó .
     
  12. tetuongrua

    tetuongrua Member

    Ðề: Sao lưu và phục hồi csdl

    mình đã tắt rồi nhưng vẫn không được,mình có cần đóng các kết nối bên trong chương trình không?Mình cám ơn.
     
  13. Ðề: Sao lưu và phục hồi csdl

    Có chứ bạn, cái đó mới quan trọng nhất .
     
  14. tetuongrua

    tetuongrua Member

    Ðề: Sao lưu và phục hồi csdl

    Mình làm được rồi.Cám ơn bạn nhiều nha.Mà các bạn cho mình hỏi thêm là ở câu lệnh Back up của mình thì mỗi lần mình thực hiện Backup thì nó cứ xuất hiện là BAK4 đã tồn tại.Bây giờ mình muốn là mỗi lần thực hiện Backup thì nó không xuất hiện thông báo đó nữa thì mình làm sao vậy các bạn. câu lệnh backup của mình là:

    USE nvpb;EXEC sp_addumpdevice 'disk' , 'BAK4' ,'D:'\'CSDL3_backup.bak';BACKUP DATABASE nvpb TO BAK4
     
  15. tetuongrua

    tetuongrua Member

    Ðề: Sao lưu và phục hồi csdl

    Khi mình dùng câu lệnh sau để backup thì nó cứ báo lỗi như thế này.Mong các bạn giúp đỡ
    USE nvpb;EXEC sp_addumpdevice 'disk' , 'BAK4' ,'D:'\'CSDL3_backup.bak';BACKUP DATABASE nvpb TO BAK4
    thì báo lỗi như sau
    Logical device 'BAK4' already exists
    chỉ khi nào mình đổi tên BAK4 thành tên khác thì mới được.mong các bạn giúp đỡ.
     
  16. tetuongrua

    tetuongrua Member

    Ðề: Sao lưu và phục hồi csdl

    Có bạn nào có thể giúp mình lỗi này không?.Mình nghĩ là phải xóa 'BAK4' nhưng mình lại không biết cách xóa nó như thế nào.Thân!
     
  17. thanhhieuqb

    thanhhieuqb New Member

    Ðề: Sao lưu và phục hồi csdl

    Mình nghĩ bạn chỉ cần sửa lại câu lệnh backup 1 tý thôi. Bạn thử cái này xem:

    "BACKUP DATABASE [nvpb] TO DISK = N'D:\CSDL3_backup.bak' WITH NOFORMAT, NOINIT, NAME = N'nvpb-Full Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10"
     
  18. Ðề: Sao lưu và phục hồi csdl

    Backup xong phải copy cái đó bỏ đâu chứ , backup lại nó báo đã tồn tại là đúng rồi . Với lại cái tên đừng đặt trùng .
     
  19. tetuongrua

    tetuongrua Member

    Ðề: Sao lưu và phục hồi csdl

    bạn có thể cho biết câu lệnh trên có ý nghĩa gì không bạn.Mình không hiểu cho lắm.Thân!
     
  20. tetuongrua

    tetuongrua Member

    Ðề: Sao lưu và phục hồi csdl

    thì đơn nhiên là phải đặt lại tên rồi bạn.Ở đây mình chỉ đưa ra ví dụ thôi.Còn mỗi lần thực hiện thì phải đổi tên và có thể đổi thư mục lưu rồi.Thân!
     

Chia sẻ trang này

Loading...