[英]What is the keyword for the database name (not the server) in DB2?
我可以通過以下方式獲取已登錄的當前數據庫服務器:
select
current server
from sysibm.sysdummy1
那不是我想要的 我的Google搜索僅提供了此解決方案。
我想要數據庫名稱。
在TSQL中,我可以執行以下操作來獲取數據庫名稱:
select db_name()
但是,如何獲得DB2中的當前數據庫名稱?
編輯 :感謝到目前為止的答案。 沒錯,對於要在DB2中返回的內容,我使用了錯誤的術語(在TSQL中為數據庫)。 因此,由於我不確定它的名稱(也許是表空間):
是否有以下命令將返回“ 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 Server中的文件組相同)。
DB2中的模式是對象(表,索引,視圖等)的邏輯限定符。 默認情況下,當用戶連接到數據庫時,CURRENT SCHEMA特殊寄存器默認為用戶的登錄ID;否則,默認為。 但是,可以使用SET CURRENT SCHEMA語句更改此設置。 CURRENT SCHEMA用於限定SQL語句中的對象。
在SQL Server中,“主”數據庫類似於DB2數據庫中的SYSCATSPACE表空間,該表空間將系統目錄存儲在SYSCAT(和SYSIBM)模式中。 系統目錄表包含有關數據庫中所有對象的元數據。
SQL Server的“ Tempdb”數據庫等效於DB2數據庫中的臨時表空間。 默認情況下,有一個名為TEMPSPACE1的表空間,但單個數據庫中可以有多個臨時表空間。
Msdb對應於SYSTOOLSPACE表空間(和SYSTOOLS模式)。
DB2沒有與Model數據庫等效的數據庫。 (執行“創建數據庫”命令時,DB2將創建一個空數據庫,但是您無法為該數據庫中包含的內容設置模板。
如果您的DB2數據庫正在使用SQL復制,則數據庫中可能存在一組存儲復制狀態和信息的表,但是對於保存此數據的模式沒有標准的命名約定。 (這等效於分發數據庫)。
有一個名為“ CURRENT SERVER”的“特殊寄存器”和一個名為“ CURRENT SCHEMA”的寄存器。
另請參閱: 如果我有JDBC連接,如何在DB2上獲取當前模式? 。
默認情況下,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';
“名稱”是表名稱,“創建者”是架構名稱。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.