我有一个数据库(列表数据库目录(:
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连接到另一个节点。这就是我无法查看数据库的原因。