MSSQL网站制作之SQL Server 数据库利用备份复原酿成的孤...
支持多种存储引擎。server|备份|毛病|工具|办理|数据|数据库先容SQLServer数据库利用备份复原酿成的伶仃用户和工具名‘xxx’有效的毛病的办理举措在利用数据库的过程当中,常常会碰到数据库迁徙大概数据迁徙的成绩,大概有俄然的数据库破坏,这时候必要从数据库的备份中间接恢复。可是,此时会呈现成绩,这里申明几种罕见成绩的办理办法。
1、伶仃用户的成绩
好比,之前的数据库的良多表是用户test创建的,可是当我们恢单数据库后,test用户此时就成了伶仃用户,没有与之对应的上岸用户名,哪怕你创建了一个test登任命户名,并且是之前的用户暗码,用该用户登录后一样没举措操纵之前属于test的用户表。
这个成绩有两种举措办理。
先说办理的条件前提。
起首,要用备份文件复原数据库,我们这里的数据库名为testdb,内里有属于用户test的用户表。这个很简单了操纵了,未几讲了,在企业办理器中很便利能够恢复。恢复后,就发生了伶仃用户test。
然后,用sa用户大概具有DBA权限的用户登录,创立一个test数据库登任命户,暗码任意设置了,也能够和之前的坚持分歧。我们用它来对应伶仃的test用户。
上面就有两种操纵办法了,第一种就是改动工具的属主,第二种就是使登任命户和数据库的伶仃用户对应起来。先说第一种办法。
1、修正工具属主
就是将底本属于数据库用户test的用户表,修正为属于dbo的用户表;然后修正test登任命户的数据库为testdb,就能够间接利用test登任命户登录后对该数据库举行操纵了。
利用的存储历程
sp_changeobjectowner[@objname=]object,[@newowner=]owner
参数申明
[@objname=]object
以后数据库中现有表、视图、用户界说函数或存储历程的称号。object是nvarchar(776),没有默许值。假如架构及其一切者具有不异的称号,则object可由现有工具一切者限制,格局为existing_owner.object。
[@newowner=]owner
将成为工具的新一切者的平安帐户的称号。owner的数据范例为sysname,没有默许值。owner必需是可会见以后数据库的无效数据库用户、服务器脚色、MicrosoftWindows登录名或Windows组。假如新一切者是没有对应数据库级主体的Windows用户或Windows组,则将创立数据库用户。
实例:
以下示例将authors表的一切者变动为dbo。
EXECsp_changeobjectownerauthors,dbo;
GO
这个办法有个最年夜的弱点就是,当表的数目十分多,并且另有存储历程大概触发器之类的修正起来会十分贫苦,必要一个一个修正,以是,不倡始利用。如今网上有一个批量修正的存储历程,人人能够找一下,这里就不说了,而是教人人一个更复杂的。
2、使登任命户和数据库的伶仃用户对应起来
实在我们创建了一样称号的数据库登任命户后,数据库中的表我们还是不克不及利用时由于sid的分歧,就是体系登录表和数据库用户表中的用户名不异,单是sid字段,数据库中的仍是之前旧体系的sid值,以是我们就要把它对应成我们新建的,数据库靠sid来辨认用户。
这里可使用存储历程sp_change_users_login。它有三种举措,分离是report,update_one和auto_fix。
运转sp_change_users_loginreport,体系会列出以后数据库的伶仃用户数。
我们只必要选择以后数据库为testdb,然后运转
sp_change_users_loginupdate_one,test,test
体系就会提醒修复了一个伶仃用户。
假如没有创建test的登任命户,还能够用
sp_change_users_loginAuto_Fix,test,NULL,testpassword
来创立一个登任命户名为test,暗码为testpassword的用户与之对应。
好了,到这里一般情形下,数据库工具失掉会见成绩已办理了。假如有多个数据库中有统一个用户的数据表,只必要选择分歧的数据库,实行update_one的谁人就好了。
2、工具名‘xxxx’有效的成绩
这里大概会有人碰到工具名‘xxxx’有效的成绩。体系表却不会发生这个成绩,而用户表还要加上用户名,然后是标明才干会见,好比select*fromauthor,会说工具名author有效,而用select*fromtest.author就能够会见,这个是用户首选身份的成绩。
办理很复杂,就是观察test登任命户是不是具有dba的权限大概体系办理的权限,有的话往失落就好了。
由于假如用户有dba身份,那末它上岸后的默许表空间是dbo的体系表空间,以是往失落了以后,就会以一般的test表空间会见数据表了。
好了,基础上大概呈现的就这么多成绩,假如另有成绩,接待来我的论坛一同会商:
http://www.inspriesky.com/bbs/。祝人人统统顺遂吧。
因此,我们的第一个“米”,就是二进制日志binlog必须是rowbased的。在rowbase下,二进制日志binlog同时记录了更新前后的整行记录。 学习SQL语言的话如果要学会去做网站就不是很难!但是要做数据库管理的话就有难度了! 学习SQL语言的话如果要学会去做网站就不是很难!但是要做数据库管理的话就有难度了! 而写到本地,我又考虑到效率问题.大家来讨论讨论吧,分数不打紧,就给10分,十全十美,没啥对错,各抒己见,但是要有说服力的哦~ 一直以来个人感觉SQLServer的优化器要比Oracle的聪明。SQL2005的更是比2k聪明了不少。(有次作试验发现有的语句在200万级时还比50万级的相同语句要快show_text的一些提示没有找到解释。一直在奇怪。) 换言之,只有在不断的失败中尝试成功,而关于失败的总结却是很少的 但是随着数据量的增大,这种成本差距会逐渐减小,趋于相等。(500万数量级只相差10%左右) 如果我们从集合论(关系代数)的角度来看,一张数据库的表就是一组数据元的关系,而每个SQL语句会改变一种或数种关系,从而产生出新的数据元的关系(即产生新的表)。 还不是性能有问题!否则面向对象的数据库早就实现了!建议使用CLR的地方一般是和应用的复杂程度或操作系统环境有很高的耦合度的场景。如你想构建复杂的算法,并且用到了大量的指针和高级数据模型。
页:
[1]