DB2中数据库名称(不是服务器)的关键字是什么?

DB2中数据库名称(不是服务器)的关键字是什么?

问题描述:

我可以说我登录到通过当前数据库服务器:DB2中数据库名称(不是服务器)的关键字是什么?

select 
    current server 
from sysibm.sysdummy1 

这不是我想要的。我的Google搜索仅提供了此解决方案。

我想要数据库名称。

在TSQL,我可以做到以下几点得到数据库名称:

select db_name() 

但是,我怎么在DB2当前数据库的名字吗?

编辑: 感谢您的回答。你是对的,我使用错误的术语(TSQL中的数据库是什么),因为我希望在DB2中返回。所以,因为我不确定它叫什么(可能是表空间):

是否有一个命令会在下面返回单词“prodbeans”?

select 
    <command> 
from 
    prodbeans.BNSMPLS_PROMO x 
+0

您确定CURRENT SERVER不是您想要的吗?在Windows上的DB2 V9.7中,它给了我数据库名称。 – Leons 2011-02-25 02:00:18

+0

这也适用于较早版本的DB2 - 9.5和9.1。 – 2011-02-25 07:30:57

正如@Leons在他的评论中所说的,CURRENT SERVER确实返回数据库的名称。

$ db2 connect to sample 

    Database Connection Information 

Database server  = DB2/LINUX 9.1.9 
SQL authorization ID = IDBJORH 
Local database alias = SAMPLE 

$ db2 values current server 

1     
------------------ 
SAMPLE    

    1 record(s) selected. 

好像你的困惑的事实,“数据库”在SQL Server,Sybase和MySQL的,甚至在概念上更接近或者表空间或DB2中的模式出现。

在DB2中,表空间是保存物理数据库对象(表,索引)的逻辑容器。表空间具有容器(定义数据写入位置的物理文件,与SQL服务器中的文件组相同)。

DB2中的模式是对象(表,索引,视图等)的逻辑限定符。默认情况下,当用户连接到数据库时,CURRENT SCHEMA专用寄存器默认为用户的登录ID;但是,这可以通过使用SET CURRENT SCHEMA语句来更改。 CURRENT SCHEMA用于限定SQL语句中的对象。

在SQL Server中,“master”数据库类似于DB2数据库中的SYSCATSPACE表空间,它将系统目录存储在SYSCAT(和SYSIBM)模式中。系统目录表包含有关数据库中所有对象的元数据。

SQL Server的“Tempdb”数据库相当于DB2数据库中的临时表空间。默认情况下有一个名为TEMPSPACE1的表空间,但在单个数据库中可以有多个临时表空间。

Msdb对应于SYSTOOLSPACE表空间(和SYSTOOLS模式)。

DB2没有等效于Model数据库。 (当您执行“create database”命令时,DB2将创建一个空数据库,但不能为此数据库中包含的内容设置模板。

如果您的DB2数据库正在使用SQL复制,数据库中可能存在一组存储复制状态和信息的表,但是对于存储此数据的模式没有标准的命名约定。 (这将相当于分发数据库)。

+0

假设我混淆了两者,你是对的。现在我回顾我的连接信息,我发现它明确指出数据库与“当前服务器”返回的内容相同。我想,我真正需要的是表空间。我会在上面澄清我的问题。 – jetimms 2011-02-25 15:50:27

有一个名为CURRENT SERVER的“特殊寄存器”和一个名为CURRENT SCHEMA的“特殊寄存器”。

另请参阅:how do i get the current schema on DB2 if i have a JDBC conneciton?

+0

使用“当前模式”只能得到我的用户名。 – jetimms 2011-02-24 23:45:52

+0

实际上,当前模式获取模式,最终可能与用户名相同。但是,如果“设置当前模式”已经出现问题,它将被返回。正如@Leons所说。 – AngocA 2014-05-18 18:16:28

CURRENT SCHEMA默认设置为用户名,但可以更改为更合适的值。以下将返回prodbeans:

SET SCHEMA prodbeans; 
select 
    CURRENT SCHEMA 
from 
    BNSMPLS_PROMO x; 

请注意,如果您设置架构,则不需要限定表名称。

根据你编辑的问题,我认为你正在寻找模式。

为了参考的目的,下面将让你的表的表空间:

SELECT 
    tbspace 
FROM 
    sysibm.systables 
WHERE 
    name = 'BNSMPLS_PROMO' 
    AND creator = 'PRODBEANS'; 

“名”是表名和“创造者”的模式名称。