2011-02-24 80 views
0

我可以說我登錄到通過當前數據庫服務器: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

回答

4

正如@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

1

有一個名爲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

1

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'; 

「名」是表名和「創造者」的模式名稱。

相關問題