DB2中数据库名称(不是服务器)的关键字是什么?
我可以说我登录到通过当前数据库服务器:DB2中数据库名称(不是服务器)的关键字是什么?
select
current server
from sysibm.sysdummy1
这不是我想要的。我的Google搜索仅提供了此解决方案。
我想要数据库名称。
在TSQL,我可以做到以下几点得到数据库名称:
select db_name()
但是,我怎么在DB2当前数据库的名字吗?
编辑: 感谢您的回答。你是对的,我使用错误的术语(TSQL中的数据库是什么),因为我希望在DB2中返回。所以,因为我不确定它叫什么(可能是表空间):
是否有一个命令会在下面返回单词“prodbeans”?
select
<command>
from
prodbeans.BNSMPLS_PROMO x
正如@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复制,数据库中可能存在一组存储复制状态和信息的表,但是对于存储此数据的模式没有标准的命名约定。 (这将相当于分发数据库)。
假设我混淆了两者,你是对的。现在我回顾我的连接信息,我发现它明确指出数据库与“当前服务器”返回的内容相同。我想,我真正需要的是表空间。我会在上面澄清我的问题。 – 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?。
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';
“名”是表名和“创造者”的模式名称。
您确定CURRENT SERVER不是您想要的吗?在Windows上的DB2 V9.7中,它给了我数据库名称。 – Leons 2011-02-25 02:00:18
这也适用于较早版本的DB2 - 9.5和9.1。 – 2011-02-25 07:30:57