其实这说起来还是满复杂的```你这要是看不懂的话``我看你就叫些专业人士来搞吧```你这问题我是按下面漫漫试,试好的
连接到 SQL Server 的实例时收到错误消息:“Cannot open user default database”(无法打开用户默认数据库)
【全文】原因
用户默认数据库在连接时不可用。这可能是因为该数据库: • 处于可疑模式。
• 不再存在。
• 处于单用户模式,并且唯一可用的连接已由其他用户或事物使用。
• 已被分离。
• 已设置为 RESTRICTED_USER 状态。
• 处于脱机状态。
• 设置为紧急状态。
• 不具有映射到用户的登录帐户,或者该用户已被拒绝访问。
此外,该登录帐户可能是多个组的成员,且其中一个组的默认数据库在连接时不可用。
SQL Server 2005
在 SQL Server 2005 中,可以使用 sqlcmd 实用程序更改默认数据库。为此,请按照下列步骤操作: 1. 单击“开始”,单击“运行”,键入 cmd,然后按 Enter。
2. 根据 SQL Server 登录使用的身份验证种类,请使用以下方法之一: • 如果 SQL Server 登录使用 Microsoft Windows 身份验证连接到该实例,请在命令提示符处键入以下内容,然后按 Enter:
sqlcmd –E -S InstanceName –d master
• 如果 SQL Server 登录使用 SQL Server 身份验证连接到该实例,请在命令提示符处键入以下内容,然后按 Enter:
sqlcmd -S InstanceName -d master -U SQLLogin -P Password
注意:InstanceName 是要连接到的 SQL Server 2005 实例的名称的占位符。SQLLogin 是已删除其默认数据库的 SQL Server 登录的占位符。Password 是 SQL Server 登录密码的占位符。
3. 在 sqlcmd 提示符处,键入以下内容,然后按 Enter:
Alter LOGIN SQLLogin WITH DEFAULT_DATABASE = AvailDBName
注意:AvailDBName 是可由实例中 SQL Server 登录访问的现有数据库的名称的占位符。
4. 在 sqlcmd 提示符处,键入 GO,然后按 Enter。
SQL Server 2000 和 SQL Server 7.0
在 SQL Server 2000 和 SQL Server 7.0 中,可以使用 osql 实用程序更改默认数据库。为此,请按照下列步骤操作: 1. 在命令提示符处,键入以下内容,然后按 Enter:
C:\>osql -E
2. 在“osql”提示符处,键入以下内容,然后按 Enter:
1>sp_defaultdb 'user's_login', 'master'
3. 在第二个提示符处,键入以下内容,然后按 Enter:
2>go
更简单明了的:
无法打开用户默认数据库,登录失败,这也是SQL Server使用者熟悉的问题之一。在使用企业管理器、查询分析器、各类工具和应用软件的时候,只要关系到连接SQL Server数据库的时候,都有可能会碰到此问题,引起此错误发生的原因比较多,下面我们就来详细分析引起此问题的原因以及解决办法。
一、原因
登录帐户的默认数据库被删除。
二、解决方法:
(1)、使用管理员帐户修改此帐户的默认数据库
1、打开企业管理器,展开服务器组,然后展开服务器
2. 展开"安全性",展开登录,右击相应的登录帐户,从弹出的菜单中选择,属性
3、重新选择此登录帐户的默认数据库
(2)、若没有其他管理员登录帐户,无法在企业管理器里修改,使用isql命令行工具
isql /U"sa" /P"sa的密码" /d"master" /Q"exec sp_defaultdb N'sa', N'master'"
如果使用Windows验证方式,使用如下命令:
isql /E /d"master" /Q"exec sp_defaultdb N'BUILTIN\Administrators', N'master'"
注:上述isql命令可以直接在命令提示符下输入。
第二篇:
无法打开用户默认数据库 登录失败
无法打开用户默认数据库,登录失败,这也是SQL Server使用者熟悉的问题之一。在使用企业管理器、查询分析器、各类工具和应用软件的时候,只要关系到连接SQL Server数据库的时候,都有可能会碰到此问题,引起此错误发生的原因比较多,下面我们就来详细分析引起此问题的原因以及解决办法。
一、原因
登录帐户的默认数据库被删除。
二、解决方法:
(一)、使用管理员帐户修改此帐户的默认数据库
1、打开企业管理器,展开服务器组,然后展开服务器
2. 展开"安全性",展开登录,右击相应的登录帐户,从弹出的菜单中选择,属性
3、重新选择此登录帐户的默认数据库
-- 登录都没法,安全性节点似乎没法打开。
(二)、若没有其他管理员登录帐户,无法在企业管理器里修改,使用isql命令行工具
isql /U"sa" /P"sa的密码" /d"master" /Q"exec sp_defaultdb N'sa', N'master'"
如果使用Windows验证方式,使用如下命令:
isql /E /d"master" /Q"exec sp_defaultdb N'BUILTIN\Administrators', N'master'"
参考:微软中文知识库文章:如何解决 SQL Server 2000 中的连接问题
地址:http://support.microsoft.com/default.aspx?scid=kb;ZH-CN;827422
出现本错误的情况一般如下:
将一个数据库导入MS SQL数据库中,在企业管理器中,所有任务->还原数据库—>选择“从设备”还原,找到数据库文件“xxx.db”,导入。
报错:设备激活错误,请使用with move选项来标志该文件的有效位置。
解决方法:右键点“数据库”(注意不是某个特定的数据库)—>所有任务—>还原数据库—>选择“从设备”还原,选择要还原成的数据库名,然后在选项卡中,选择现有数据库上强制还原数据库,然后在下面修改数据库还原后的物理路径,这个路径要是存在的一个路径,否则就会出现上面的错误,逻辑文件名可以不用改,即可。
只要用不同默认数据库的用户登录就可以了。[--各个用户的默认数据库]
编辑SQL Server 注册,改为SQL Server身份验证,用sa登录就可以了
sa的默认数据库被分离 -> 重装SQL Server。
2. asp.net操作 sql2008备份、还原!高分悬赏!
#region “备份当前数据库”按钮事件
/// <summary>
/// “备份当前数据库”按钮事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void Button1_Click(object sender, EventArgs e)
{
string dbname = "YT_FH";//数据库名称
string bkName = "YT_FH" + ".bak";//文件名
string bkUrl = "/BAK/" + Guid.NewGuid().ToString("N") + bkName;//备份文件存储路径
if (BackUpDataBase(dbname, bkUrl))
{
if (MsDb.Exec("insert into DBbak(name,path,uptime) values('YT_FH.bak','" + bkUrl + "','" + DateTime.Now + "')") == 1)
{
ClientJS.Alert("备份成功!");
Response.Redirect("BackupRestore.aspx");
}
else
{
ClientJS.Alert("失败!");
}
}
}
#endregion
#region “上传并还原”按钮事件
/// <summary>
/// “上传并还原”按钮事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void Button2_Click(object sender, EventArgs e)
{
if (FileUpload1.FileName == "")
{
BASE.COMMON.ClientJS.Alert("请选择文件!"); return;
}
else
{
string name = FileUpload1.FileName;
FileUpload1.PostedFile.SaveAs(Server.MapPath("/BAK/YT_FH.bak"));
}
//
string finalpath = "~/BAK/YT_FH.bak";
if (!FileUpload1.HasFile)
{
ClientJS.Alert("请选择备份文件!"); return;
}
FileUpload1.PostedFile.SaveAs(Server.MapPath(finalpath));
string strDBName = "YT_FH";
if (RestoreDataBase(strDBName, Server.MapPath(finalpath)))
{
ClientJS.AlertUrl("数据库恢复成功!", "Refresh.aspx");
}
else
{
ClientJS.ScriptFirst("alert('数据库恢复失败!');");
}
}
#endregion
#region 数据库恢复按钮事件
/// <summary>
/// 数据库恢复按钮事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void Button3_Click(object sender, EventArgs e)
{
string bkName = "YT_FH";
string bkUrl = "C:\\DB_BackUp\\" + bkName + ".bak";
if (RestoreDataBase(bkName, bkUrl))
{
ClientJS.AlertRefresh("数据库恢复成功!");
}
else
{
ClientJS.ScriptFirst("alert('数据库恢复失败!');");
}
}
#endregion
#region 数据库备份方法
/// <summary>
/// 数据库备份方法
/// </summary>
/// <param name="databasename">数据库名称</param>
/// <param name="backuptodatabase">备份文件输出路径</param>
/// <returns>成功/失败</returns>
public bool BackUpDataBase(string databasename, string backuptodatabase)
{
string sql;
//备份数据库到指定的数据库文件(完全备份)
sql = "BACKUP DATABASE " + databasename + " TO DISK='" + Server.MapPath(backuptodatabase) + "' WITH INIT";
try
{
MsDb.Exec(sql);
}
catch { return false; }
return true;
}
#endregion
#region 数据库恢复方法
/// <summary>
/// 数据库恢复方法
/// </summary>
/// <param name="databasename">数据库名称</param>
/// <param name="databasefile">备份文件路径</param>
/// <returns>成功/失败</returns>
public bool RestoreDataBase(string databasename, string databasefile)
{
RefreshDataBase(databasename);
//还原指定的数据库文件
string sql = "RESTORE DATABASE " + databasename + " FROM DISK = '" + databasefile + "' WITH REPLACE;";
SqlConnection con = new SqlConnection(@"server=192.168.0.74\SQLSERVER2008;uid=sa;pwd=123123;");
try
{
con.Open();
SqlCommand sqlcmd = new SqlCommand(sql, con);
sqlcmd.CommandType = CommandType.Text;
sqlcmd.ExecuteNonQuery();
}
catch (Exception err)
{
string str = err.Message;
return false;
}
finally
{
con.Close();//关闭数据库连接
}
return true;
}
#endregion
#region 关闭需备份的数据库
/// <summary>
/// 关闭需备份的数据库
/// </summary>
/// <param name="databasename">数据库名称</param>
public void RefreshDataBase(string databasename)
{
string sql = "use master;ALTER DATABASE " + databasename + " SET OFFLINE WITH ROLLBACK IMMEDIATE;";
SqlConnection con = new SqlConnection(@"server=192.168.0.74\SQLSERVER2008;uid=sa;pwd=123123;");
try
{
con.Open();
SqlCommand cmd = new SqlCommand(sql, con);
cmd.CommandType = CommandType.Text;
cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
string str = ex.Message;
con.Close();
}
finally
{
con.Close();
}
}
#endregion
这个是之前我用过的,是sql2008的数据库
3. SQL如何实现带进度条的数据库备份和还原
///
///备份方法
///
SQLDMO.Backupbackup=newSQLDMO.BackupClass();
SQLDMO.SQLServerserver=newSQLDMO.SQLServerClass();
//显示进度条
SQLDMO.BackupSink_=newSQLDMO.BackupSink_PercentCompleteEventHandler(Step);
backup.PercentComplete+=progress;
try
{
server.LoginSecure=false;
server.Connect(".","sa","sa");
backup.Action=SQLDMO.SQLDMO_BACKUP_TYPE.SQLDMOBackup_Database;
backup.Database="test";
backup.Files=@"D:/test/myProg/backupTest";
backup.BackupSetName="test";
backup.BackupSetDescription="Backupthedatabaseoftest";
backup.Initialize=true;
backup.SQLBackup(server);
MessageBox.Show("Backupsuccessed.");
}
catch(Exceptionex)
{
MessageBox.Show(ex.Message);
}
finally
{
server.DisConnect();
}
this.pbDB.Value=0;
///
///还原方法
///
SQLDMO.Restorerestore=newSQLDMO.RestoreClass();
SQLDMO.SQLServerserver=newSQLDMO.SQLServerClass();
//显示进度条
SQLDMO.RestoreSink_=newSQLDMO.RestoreSink_PercentCompleteEventHandler(Step);
restore.PercentComplete+=progress;
//KILLDataBaseProcess
SqlConnectionconn=newSqlConnection("Server=.;Database=master;UserID=sa;Password=sa;Trusted_Connection=False");
conn.Open();
SqlCommandcmd=newSqlCommand("SELECTspidFROMsysprocesses,sysdatabasesWHEREsysprocesses.dbid=sysdatabases.dbidANDsysdatabases.Name='test'",conn);
SqlDataReaderdr;
dr=cmd.ExecuteReader();
ArrayListlist=newArrayList();
while(dr.Read())
{
list.Add(dr.GetInt16(0));
}
dr.Close();
for(inti=0;i<list.Count;i++)
{
cmd=newSqlCommand(string.Format("KILL{0}",list),conn);
cmd.ExecuteNonQuery();
}
conn.Close();
try
{
server.LoginSecure=false;
server.Connect(".","sa","sa");
restore.Action=SQLDMO.SQLDMO_RESTORE_TYPE.SQLDMORestore_Database;
restore.Database="test";
restore.Files=@"D:/test/myProg/backupTest";
restore.FileNumber=1;
restore.ReplaceDatabase=true;
restore.SQLRestore(server);
MessageBox.Show("Restoresuccessed.");
}
catch(Exceptionex)
{
MessageBox.Show(ex.Message);
}
finally
{
server.DisConnect();
}
this.pbDB.Value=0;
4. sqlserver的master数据库还原的具体问题(我是菜鸟)
单用户模式,断开网络连接,只你一个连接SQL
命令提示符,开始,运行,输入CMD回车
5. Sql2005如何备份数据库
mangerstudion连接到你的实例,打开"对象资源管理器",没有看到的话,按f8
展开实例--管理--维护计划
右键"维护计划"--新建维护计划--输入维护计划名称--这样会出现创建维护计划的窗口然后,在左边的工具箱中(没有的话,按ctrl+alt+x),将"备份数据库任务"拖到中间的黄色区域
双击拖出来的这个任务,会出现设计属性的窗口
在数据库中,选择你要备份的数据库,然后设置备份到那里,并且设置备份的文件名
设计好后,单击"确定",你也可以单击"t-sql",看看sql大致会用什么样的语句来处理你的需求.
单击"计划"后面的"..."按钮,设置执行的时间计划.
最后保存就可以了.
把sqlagent服务设置为自动启动
6. 数据库的备份、恢复方式(以一种数据为例说明)。
以 SQL Server 为例:
E:\>sqlcmd -S "localhost\SQLEXPRESS"
1> use master
2> go
已将数据库上下文更改为 'master'。
备份
1> backup database test to disk='e:\test.dat'
2> go
恢复
1> restore database test from disk='e:\test.dat'
2> go
已为数据库 'test',文件 'Test' (位于文件 1 上)处理了 232 页。
已为数据库 'test',文件 'Test_log' (位于文件 1 上)处理了 2 页。
RESTORE DATABASE 成功处理了 234 页,花费 0.184 秒(9.898 MB/秒)。
7. 用cmd命令sql server导入bak文件
1.新建一个空数据库
2.右键-任务-还原-数据库
3.选择逗源设备地,点击选择
4.选择逗文件地,点击添加------找到你的bak,点击确定
5.回到前一个页面,点击选项,勾选逗覆盖现有数据库地
6.ok
8. 数据库还原失败。
主要原因应该是数据库备份不完整或者损坏.
最好的数据库物理方法应该是单独保存mdf(主数据库文件)和ldf(事务日志文件)
然后通过企业管理器,右键附加数据库来完成还原.
LZ可以试着去下载SQL
Server数据库修复软件来解决,注意版本要匹配
9. .net(c#)还原sql server 2005数据库,出错因为数据库正在使用,所以无法获得对数据库的独占访问权。
cmd.ExecuteNonQuery();
con.Close();
你是在它执行之后才释放,当然会一样的出现访问无效,建议停止这个sqlserver的服务才去还原,如果你知道停止sqlserver进程的代码也可以!
10. sql server 用cmd还原数据库只有bak文件,没有mdf,log文件可以还原吗(不在同)
楼主,cmd?
bak是数据库备份文件。
应用企业管理器或是SQL Server Management Studio 登录数据库管理,还原即可!当然,数据库版本要与原来的一致,或是高于原有版本,一般都ok。
(*^__^*) 嘻嘻……