IBMDB2,为带有模式和表的数据库创建一个别名



我有一个数据库(列表数据库目录(:

Database 4 entry:
Database alias                       = ABC
Database name                        = ABC
Local database directory             = /data
Database release level               = f.00
Comment                              =
Directory entry type                 = Indirect
Catalog database partition number    = 0
Alternate server hostname            =
Alternate server port number         =

我需要有一个数据库的别名,因为我的应用程序试图连接到数据库DEF。

我可以使用创建别名

catalog db ABC as DEF

然后(list db目录(显示:

Database 4 entry:
Database alias                       = ABC
Database name                        = ABC
Local database directory             = /data
Database release level               = f.00
Comment                              =
Directory entry type                 = Indirect
Catalog database partition number    = 0
Alternate server hostname            =
Alternate server port number         =code here
Database 5 entry:
Database alias                       = DEF
Database name                        = ABC
Local database directory             = /data
Database release level               = f.00
Comment                              =
Directory entry type                 = Indirect
Catalog database partition number    = 0
Alternate server hostname            =
Alternate server port number         =

但在我使用连接到别名数据库之后

db2 connect DEF

我无法访问原始数据库中的任何模式和表。当然,当我使用ABC数据库名称连接时,所有内容都是可见的,并且都在适当的位置。

我是否误解了DB2中的别名?或者可能有一些选项,比如"用数据创建别名"之类的?

您似乎误解了db2 catalog database ABC as DEF生成的数据库别名的用途。

对于Linux/Unix/Windows的Db2,数据库ALIAS不是SCHEMA。

不能在SELECT或其他SQL语句中使用新别名。

您只能在CONNECT步骤中引用数据库别名。连接成功后,使用SQL,就像只连接到数据库ABC一样。

数据库别名只是指向数据库的指针。

所指向的数据库(在您的案例中为ABC(不会更改,其中的模式也不会更改,并且您无法更改引用这些模式中的表和视图等对象的方式。

在SELECT(或其他SQL语句(中,必须引用物理数据库中存在的模式。因此,实际上并没有称为DEF的模式,因为DEF是一个只有命令行处理器和db2数据库目录才知道的别名。如果希望在数据库中生成新的同义词,您可以自由地这样做,但这不是数据库别名的目的。

由于您似乎正在使用本地数据库(目录条目类型=间接(运行Linux/Unix/Windows的Db2,因此您应该连接到每个数据库ABC和DEF,并运行下面的两个查询,然后比较每个数据库的输出,并用输出更新您的问题。

select char(os_name,20) as os_name
, char(os_version,5) as os_version
, char(os_release,20) as os_release
, char(host_name,30) as host_name 
from sysibmadm.env_sys_info;

select char(inst_name,15) as inst_name
,char(release_num,20) as release_num
,char(service_level,20) as service_level
,char(bld_level,20) as bld_level
,char(ptf,20) as ptf
from sysibmadm.env_inst_info;

@mao-你说得对!我已经使用外部软件连接到一个节点,并使用shell db2连接到另一个节点。这就是我无法查看数据库的原因。

最新更新