Welcome!

Join our community of MMO enthusiasts and game developers! By registering, you'll gain access to discussions on the latest developments in MMO server files and collaborate with like-minded individuals. Join us today and unlock the potential of MMO server development!

Join Today!

SQL Script to Backup your Database

Junior Spellweaver
Joined
Apr 27, 2015
Messages
176
Reaction score
107
Over the past week+ I have been learning a little more about SQL. Finally got a working script you can use to keep a backup of your databases.

This will create a folder C:\ROMServerBackups, in it will be a folder index by Year,Month,Day,Hour,Minute,Second
In that folder will be the five databases.

Code:
DECLARE    [USER=2000162561]Newfolder[/USER] varchar(200)SELECT    [USER=2000162561]Newfolder[/USER]='C:\ROMServerBackups\' + REPLACE(convert(nvarchar(20),GetDate(),120),':','-')
EXEC master.dbo.xp_create_subdir [USER=2000162561]Newfolder[/USER]


DECLARE    @DB1 varchar(200)
DECLARE    @DB2 varchar(200)
DECLARE    [USER=875297]DB3[/USER] varchar(200)
DECLARE    @DB4 varchar(200)
DECLARE    @DB5 varchar(200)


SELECT    @DB1 [USER=2000162561]Newfolder[/USER] + N'\ROM_Account.bak'
SELECT    @DB2 [USER=2000162561]Newfolder[/USER] + N'\ROM_GlobalDB.bak'
SELECT    [USER=875297]DB3[/USER] [USER=2000162561]Newfolder[/USER] + N'\ROM_ImportDB.bak'
SELECT    @DB4 [USER=2000162561]Newfolder[/USER] + N'\ROM_World.bak'
SELECT    @DB5 [USER=2000162561]Newfolder[/USER] + N'\ROM_WorldLog.bak'


BACKUP DATABASE ROM_Account        TO DISK = @DB1 WITH INIT, NAME = N'ROM_Account',    SKIP, STATS = 10
BACKUP DATABASE ROM_GlobalDB    TO DISK = @DB2 WITH INIT, NAME = N'ROM_GlobalDB',    SKIP, STATS = 10
BACKUP DATABASE ROM_ImportDB    TO DISK = [USER=875297]DB3[/USER] WITH INIT, NAME = N'ROM_ImportDB',    SKIP, STATS = 10
BACKUP DATABASE ROM_World        TO DISK = @DB4 WITH INIT, NAME = N'ROM_World',        SKIP, STATS = 10
BACKUP DATABASE ROM_WorldLog    TO DISK = @DB5 WITH INIT, NAME = N'ROM_WorldLog',    SKIP, STATS = 10

I have tested the backup in a virtual machine and it does appear to work just fine for me. And I see this forum isn't friendly to my TABs, I tried to keep it aligned and tidy so it makes sense and people can learn from my work.

Don't forget to click like, lets me know ppl find this useful.
 
Junior Spellweaver
Joined
Jul 9, 2014
Messages
168
Reaction score
53
Nice thing!
I use almost the same code, exclude simple automatization.


Code on C#:

Code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;


namespace DBBackup
{
    public partial class Form1 : Form
    {
        private SqlConnection Sql;
        string connectionString;
        private bool start = true;
        public Form1()
        {
            InitializeComponent();
            _initialize();
            textBox1.Text = "60";
        }


        private void button1_Click(object sender, EventArgs e)
        {
            Thread th = new Thread(() =>
            {
                try
                {
                    _request();
                }
                catch (Exception ex)
                {
                    _print(ex.Message);
                }
            });
            th.Start();
        }


        private void _initialize()
        {
            connectionString =
                @"Persist Security Info=False;Integrated Security=SSPI;server=YOUR_SERVER_NAME;Connect Timeout=30";
            Sql = new SqlConnection(connectionString);
        }


        private void _request()
        {
            while(start)
            {
                _print("Start check at " + DateTime.Now.ToString("dd.MM.y H.mm.ss"));
                try
                {
                    _query("select 1");
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
                _print("Test query executed");
                var f = File.ReadAllText("request.sql");
                f = f.Replace("KEY_DATA", DateTime.Now.ToString("dd.MM.y"));
                f = f.Replace("KEY_TIME", DateTime.Now.ToString("H.mm.ss"));
                _query(f);
                DateTime dt = DateTime.Now;
                double hours;
                int minutes;
                int.TryParse(textBox1.Text, out minutes);
                hours = minutes/60f;
                _print("Next check at " + dt.AddHours(hours).ToString("dd.MM.y H.mm.ss"));
                Thread.Sleep(1000 * 60 * minutes);
            }
        }


        private List<Dictionary<string, object>> _query(string comm)
        {
            List<Dictionary<string, object>> result = new List<Dictionary<string, object>>();
            Sql.Open();
            try
            {
                using (SqlCommand command = new SqlCommand(comm, Sql))
                {
                    command.CommandTimeout = 999;
                    using (SqlDataReader reader = command.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            result.Add(Enumerable.Range(0, reader.FieldCount)
                                .ToDictionary(
                                    i => reader.GetName(i),
                                    i => reader.GetValue(i)));
                        }
                    }
                }
                _print("Ready at " + DateTime.Now.ToString("dd.MM.y H.mm.ss"));
            }
            catch (Exception ex)
            {
                _print(ex.Message + ", " + DateTime.Now.ToString("dd.MM.y H.mm.ss"));
            }
            
            Sql.Close();
            return result;
        }


        void _print(object text)
        {
            printer.AppendText(text + "\n");
        }


        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            Process.GetCurrentProcess().Kill();
        }
    }
}

Code:
Declare [USER=162874]account[/USER] varchar(500);
Declare [USER=49]global[/USER] varchar(500);
Declare [USER=2000190013]Import[/USER] varchar(500);
Declare @world varchar(500);
Declare @w_log varchar(500);
Declare [USER=300256]fold[/USER]er_date varchar(100);
Declare [USER=300256]fold[/USER]er_time varchar(100);


SET [USER=300256]fold[/USER]er_date = 'MD C:\backup_auto\KEY_DATA';
SET [USER=300256]fold[/USER]er_time = 'MD C:\backup_auto\KEY_DATA\KEY_TIME';


exec sp_configure 'xp_cmdshell', 1;
EXEC xp_cmdshell [USER=300256]fold[/USER]er_date;
EXEC xp_cmdshell [USER=300256]fold[/USER]er_time;
--convert(varchar, getdate(), 104)


SET [USER=162874]account[/USER] = ('C:\backup_auto\KEY_DATA\KEY_TIME\ROM_Account.bak');-- CURRENT_TIMESTAMP;
SET [USER=49]global[/USER] = ('C:\backup_auto\KEY_DATA\KEY_TIME\ROM_GlobalDB.bak');-- CURRENT_TIMESTAMP;
SET [USER=2000190013]Import[/USER] = ('C:\backup_auto\KEY_DATA\KEY_TIME\ROM_ImportDB.bak');-- CURRENT_TIMESTAMP;
SET @world = ('C:\backup_auto\KEY_DATA\KEY_TIME\ROM_World.bak');-- CURRENT_TIMESTAMP;
SET @w_log = ('C:\backup_auto\KEY_DATA\KEY_TIME\ROM_WorldLog.bak');-- CURRENT_TIMESTAMP;




BACKUP DATABASE [ROM_Account] TO  DISK = [USER=162874]account[/USER] WITH NOFORMAT, INIT,  NAME = N'ROM_Account.bak', SKIP, REWIND, NOUNLOAD,  STATS = 10
BACKUP DATABASE [ROM_GlobalDB] TO  DISK = [USER=49]global[/USER] WITH NOFORMAT, INIT,  NAME = N'ROM_GlobalDB.bak', SKIP, REWIND, NOUNLOAD,  STATS = 10
BACKUP DATABASE [ROM_ImportDB] TO  DISK = [USER=2000190013]Import[/USER] WITH NOFORMAT, INIT,  NAME = N'ROM_ImportDB.bak', SKIP, REWIND, NOUNLOAD,  STATS = 10
BACKUP DATABASE [ROM_World] TO  DISK = @world WITH NOFORMAT, INIT,  NAME = N'ROM_World.bak', SKIP, REWIND, NOUNLOAD,  STATS = 10
BACKUP DATABASE [ROM_WorldLog] TO  DISK = @w_log WITH NOFORMAT, INIT,  NAME = N'ROM_WorldLog.bak', SKIP, REWIND, NOUNLOAD,  STATS = 10


Need to replace YOUR_SERVER_NAME string.
This would make backup each N secound to C:\backup_auto folder.
 
Junior Spellweaver
Joined
Jul 9, 2014
Messages
168
Reaction score
53
Usable thing, when some poop happens and you forgot to make backup manually)
 
Back
Top