今天我一定要记下这历史性的一幕。我~第一次~把数据库搞崩了。
原因是什么呢?我想把测试版数据库拷贝到我本地做一些开发测试。
不会怎么办呢?百度!查了一圈结论是:先设置单用户,然后分离,接着将文件拷贝到本地,最后附加数据库。我怕出错,于是在测试版数据库上建了一个数据库,然后用这个方法,弄到本地了。嗯这个方法一定行。于是动手弄我想要的数据库,设置成单用户,ok!分离,报错!这可吓坏本宝宝了。试了好几次分离,都不行,那么我先把单用户设置成多用户吧。数据库-右键-属性。报错!不要吓我啊。你不让我分离也就罢了,不能不让我还原成多用户啊。
尝试一:失败
接着百度。怎么把单用户改成多用户。基本就一种方法。
USE master;
GO
DECLARE @SQL VARCHAR(MAX);
SET @SQL=''
SELECT @SQL=@SQL+'; KILL '+RTRIM(SPID)
FROM master..sysprocesses
WHERE dbid=DB_ID('数据库名');
EXEC(@SQL);
GO
ALTER DATABASE 数据库名 SET MULTI_USER;
那我就这么干。代码改好,运行!报错!又错啊。而且还能提示我有一个进程发生死锁。那怎么办?接着百度,死锁怎么处理,他们说杀死进程。
kill 进程号
然后呢?就算我杀死进程,然后呢?
备份数据库,在还原?不行!
总不能删了数据库吧,肯定不行!
第一次尝试失败!
尝试二:成功
不行啊,这个搞不定啊。找大神啊。于是终于把大神拉到了我这。大神开始操作。。。
登录远程,在远程上打开那个主机的数据库
(这里有个插曲,我们登录远程后,打开了别的主机的数据库,因为一个是测试系统的,一个是正式系统的。于是我们成功把正式系统的数据库玩坏了。后来抢救回来了。经此一役,我深刻了解到,数据库要备份和数据库要找对。。。)
大神告诉我,之所以分离会失败,还原也会失败。是因为这个数据库虽然我把他们设置成了单用户,但因为我们的系统在跑着,还是有程序在使用着数据库,所以失败。
那我们该怎么办?首先重启数据库。这样我们所有跟这个数据有关的进程都会自动被杀死。
完成后,点击我们的数据库-右键-属性。
可以点了,哇,好开心。这时候直接把刚才改的状态,改回来就好了。
改好了,那个单个用户的标记没有啦。然后重启下我的程序的服务,然后一切都恢复正常了。我从鬼门关回来了!开心。活着真好 ლ(́◉◞౪◟◉‵ლ)