IBM DB2,使用模式和表为数据库创建别名

时间:2018-07-09 20:52:53

标签: db2 schema alias db2-luw

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

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

然后(列表数据库目录)显示:

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中的别名?也许有一些选择,例如“使用数据创建别名”或类似的东西?

2 个答案:

答案 0 :(得分:0)

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

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

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

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

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

所指向的数据库(在您的情况下为ABC)不会更改,并且其中的架构也不会更改,并且您无法更改在这些架构中引用诸如表和视图之类的对象的方式。

在SELECT(或其他SQL语句)中,您必须引用物理数据库中存在的架构。因此,确实没有称为DEF的架构,因为DEF是仅在命令行处理器和db2-database-directory中才知道的别名。如果您希望在数据库中创建新的同义词,则可以随意这样做,但这并不是数据库别名的目的。

由于您似乎正在使用本地数据库(目录条目类型=间接)运行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;

答案 1 :(得分:0)

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