日期:2014-05-18  浏览次数:20540 次

使用T-SQL语句备份数据库的问题
我使用

bacuup   database   db_name   to   disk= 'd:\1.bak '   with   init

备份等到后在还原,里面没有用户,怎么回事情,还要自己在重新添加用户

使用
restore   database   db_name   form   disk= 'd:\1.bak '   with   replace

提示数据库正在使用,无法排他服务,请问,要使用sql语句还原备份改怎么搞呢,我这个用户权限很小,连使用master的存储过程的权限都没有,更加不要说把数据库分离或重新建立表了

------解决方案--------------------
备份没有错,但是备份到指定文件中,好像还原就会出现用户登录名丢失的问题。
建议使用备份集模式。如果不是的话,每次还原后,都先移除用户,再添加回去。
还原时,如果有其他程序(包括你自己的还原的程序)连到了那个数据库,就都不能还原。你自己那个程序,需要连接到master数据库,才能操作还原指定数据库操作


USE master
-- 创建备份集,这个操作你只需要做一次,可以在程序以外先完成
EXEC sp_addumpdevice 'disk ', 'MyNwind_2 ', 'c:\Program Files\Microsoft SQL Server\MSSQL\BACKUP\MyNwind_2.dat '

--Create the log backup device.
USE master
EXEC sp_addumpdevice 'disk ', 'MyNwindLog1 ',
'c:\Program Files\Microsoft SQL Server\MSSQL\BACKUP\MyNwindLog1.dat '

-- Back up the full MyNwind database.
BACKUP DATABASE MyNwind TO MyNwind_2

-- Update activity has occurred since the full database backup.

-- Back up the log of the MyNwind database.
BACKUP LOG MyNwind
TO MyNwindLog1


------解决方案--------------------

<% @Import Namespace= "System.Data " %>
<% @Import Namespace= "System.Data.SqlClient " %>
<HTML>
<HEAD>
<title> 获取服务器端数据库列表示例 </title>
<script language= "C# " runat= "server ">

// 注意本节的数据库连接字符串
string ConnStr = System.Configuration.ConfigurationSettings.AppSettings[ "ConnectionSqlServer1 "];

void Page_Load(object sender, System.EventArgs e)
{
if(!IsPostBack)
{
// 创建连接及执行数据库操作
string db_query = "sp_helpdb ";

SqlCommand myCommand = new SqlCommand(db_query, new SqlConnection(ConnStr));
myCommand.Connection.Open();
SqlDataReader dr = myCommand.ExecuteReader();

// 将数据库列表绑定到下拉列表控件(DropDownList)
dbDropDownList.DataSource = dr;
dbDropDownList.DataTextField = "name ";
dbDropDownList.DataBind();

//关闭DataReader对象和数据库连接
dr.Close();
myCommand.Connection.Close();
}
}

void dbDropDownList_SelectedIndexChanged(object sender, System.EventArgs e)
{
pathTextBox.Text = @ "C:\BACKUP\ " + dbDropDownList.SelectedValue + ".bak ";
}

void backupButton_Click(object sender, System.EventArgs e)
{
string path = pathTextBox.Text;
string dbname = dbDropDownList.SelectedValue;

string backupSql = "use master; ";
backupSql += "backup database @dbname to disk = @path; ";

SqlCommand myCommand = new SqlCommand(backupSql, new SqlConnection(ConnStr));

myCommand.Parameters.Add( "@dbname ", SqlDbType.Char);
myCommand.Parameters[ "@dbname "].Value = dbname;
myCommand.Parameters.Add( "@path ", SqlDbType.Char);
myCommand.Parameters[ "@path "].Value = path;

try
{
myCommand.Connection.Open();
myCommand.ExecuteNonQuery();
infoLabel.Text = "备份成功 ";
}
catch(Exception ex)
{
infoLabel.Text = "备份失败 <br> " + ex.ToString();
}
finally