Con*_*lls 4 sql-server sql-server-2008-r2 restore synonyms
如果一个数据库中另一个数据库中的同义词引用该数据库中的对象,那么将备份恢复到该数据库是否会使同义词失效?
具体来说,想象一下这种情况:
是否应该期望此过程使 Synonym_Host 上的 dbo.foo 同义词无效?
此过程不应使同义词无效。根据文档:
同义词与其基础对象之间的绑定仅通过名称进行。对基础对象的所有存在、类型和权限检查都推迟到运行时进行。因此,可以修改、删除基础对象,或者删除并替换为与原始基础对象同名的另一个对象。
您可以使用以下方法测试此行为。
use [master]
go
drop database if exists Synonym_Targ, Synonym_Home
go
create database Synonym_Targ
create database Synonym_Home
go
alter authorization on database ::Synonym_Targ to sa
alter authorization on database ::Synonym_Home to sa
go
use Synonym_Targ
go
create table dbo.foo ( i int default 1);
go
insert dbo.foo default values
go
use Synonym_Home
go
create synonym dbo.foo for Synonym_Targ.dbo.foo
go
create or alter proc p
as
select * from dbo.foo
go
exec p
go
backup database Synonym_Targ to disk = 'c:\temp\Synonym_Targ.bak'
go
drop database Synonym_Targ
go
exec p
/*
Msg 5313, Level 16, State 1, Procedure p, Line 3 [Batch Start Line 30]
Synonym 'dbo.foo' refers to an invalid object.
*/
go
restore database Synonym_Targ from disk = 'c:\temp\Synonym_Targ.bak'
go
exec p
go
use [master]
go
drop database if exists Synonym_Targ, Synonym_Home
go
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
439 次 |
| 最近记录: |