|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
Merge将一定数量的MyISAM表联合而成一个整体,在超大规模数据存储时很有用sql|办理|工具名发生SQL工具名有效的成绩年夜多缘故原由是因为数据迁徙招致的,上面我们给出办理办法.
在利用数据库的过程当中,常常会碰到数据库迁徙大概数据迁徙的成绩,大概有俄然的数据库破坏,这时候必要从数据库的备份中间接恢复。可是,此时会呈现成绩,这里申明几种罕见成绩的办理办法。
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表空间会见数据表了。
但我们知道,若使用statement,并没有上述需要的数据。试想binlog中记录了一句updatetsetf1=3whereid=3。怎么恢复呢? |
|