假设它们是两个数据库环境(prod legacy和prd exadata)。我是用户,并且对具有相同模式名称A的两个db都具有select权限。
我当前的会话是“prod legacy”
如果我运行alter session set current_schema = A;
我正在访问哪种架构:旧版或exadata?为什么呢?
此外,我可以访问架构B.
如果我运行alter session set current_schema = B;
为什么我能够根据A的架构配置访问架构B.
注意:我正在使用SQL Developer
答案 0 :(得分:0)
数据库由多个模式组成(btw,在Oracle中,模式与用户几乎相同),每个模式可以包含不同的对象,例如表,视图等。
您连接的数据库取决于您在建立数据库会话时使用的连接字符串,并且在该会话的生命周期内无法更改。
假设在您的数据库中,您有2个架构(用户):A
和B
,它们都包含一个名为tbl
的表。查询时:
select * from tbl
...哪一个查询?这就是current_schema
设置的用武之地。默认情况下,它是您连接的用户的架构。因此,如果您与用户A
建立了关联,则默认情况下您将查询A.tbl
。
如果您希望在用户B.tbl
连接时查询A
,则有2个选项:
select * from B.tbl
alter session set current_schema = B
命令将默认架构更改为B
,这样当您说select * from tbl
时,它会自动将其转换为select * from B.tbl
。另请注意,仅使用alter session set current_schema
命令不会自动授予您对该架构的对象的权限。当您没有明确限定对象名称时,它所做的就是以不同方式解释您的查询。但是您需要被授予成功查询这些对象的必要权限。