我有一个数据库(列出数据库目录):
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中的别名?也许有一些选择,例如“使用数据创建别名”或类似的东西?
答案 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连接到另一节点。这就是我无法查看数据库的原因。