oracle - oracle - 在远程数据库上建立对数据的访问权限时,是首选视图还是同义词?

考虑一个场景,其中有两个数据库: 在数据库A上,你需要访问数据库B 上的数据。

您可以在数据库A上创建一个从数据库B上的表中选择的视图。


CREATE OR REPLACE VIEW Demographics.Employees(


employee_id, employee_dept


)


AS


 SELECT employee_id, employee_dept


 FROM Employee@DB_B;


/



或者,可以在数据库A 上创建一个同义词,该同义词指向数据库B 上的表。


CREATE OR REPLACE SYNONYM Demographics.Employees FOR Employee@DB_B;



使用跨数据库链接的视图与跨数据库链接的同义词有什么优缺点 ?

如果数据库位于Exadata平台内,是否会建议我更改?

时间:

就个人而言,我赞成同义词。 这就是为什么使用同义词,它给你一个更短的语法来访问对象。 视图是为了保存特定查询以便以后重用。 现在,如果你想限制源表或某些内容上的可用列,那么你就可以使用视图。

简单使用同义词。

如果本地数据库应该看到远程数据库中的所有行和列,那么您定义的视图是不必要的复杂化。 它增加了复杂性,因为可能是视图中存在的一些额外逻辑, 试图理解系统的人需要花时间来检查视图的定义并理解它。

也许视图使 Oracle 优化器变得更加复杂。

获得视图有一些正当理由:

  • 要限制可见的列,请执行下列操作:
  • 如果新列添加到远程表中,则不希望它们在本地显示
  • 您希望限制可见的行,连接到其他表等。
  • 如果在远程站点( 例如删除列) 上进行更改, 而不是在应用程序运行时发现,则希望该视图无效

创建视图的时间是存在这些条件的时间。 即使这样,我也会从同义词中选择视图。

在数据库链接上创建视图时,在本地数据库上创建一个对象。 这意味着你在本地拥有关于远程对象的字典。

同义词只是指向远程对象的指针。 所以你所拥有的就是同义词定义。


create database link loopback


 using 'localhost/pdb1';



create table t (


 c1 int


);



create or replace synonym s


 for t@loopback;



create or replace view v as 


 select * from t@loopback;



select table_name, column_name, data_type


from user_tab_cols


where table_name in ( 'S', 'V' )


order by table_name, column_name ;



TABLE_NAME COLUMN_NAME DATA_TYPE 


V C1 NUMBER 



因此,如果你有检查表( 列,数据类型,等等 ) 结构的工具,那么使用视图就很方便了。

另一方面,由于视图是本地对象,因此对远程表的更改不会自动传播:


alter table t 


 add ( c2 date ); 



info s



TABLE: T 


 LAST ANALYZED: 


 ROWS : 


 SAMPLE SIZE : 


 INMEMORY :DISABLED 


 COMMENTS : 



Columns 


NAME DATA TYPE NULL DEFAULT COMMENTS


 C1 NUMBER(38,0) Yes 


 C2 DATE Yes 



info v



Columns 


NAME DATA TYPE NULL DEFAULT COMMENTS


 C1 NUMBER(38,0) Yes 



因此,你需要创建视图来查看更改。 在flip-flip方面,如果您不希望远程DDL更改立即显示在本地数据库上,这可能是一个优势。

注意,本地视图和远程表之间没有依赖关系。 因此,断开更改( 例如删除列) 不会使视图无效 。 你只能在查询它时找到它:


alter table t


 drop ( c1 );



select status from user_objects


where object_name = 'V';



STATUS 


VALID 



select * from v;



ORA-00904:"C1": invalid identifier



select * from s;



no rows selected



...