簡體   English   中英

DB2中數據庫名稱(不是服務器)的關鍵字是什么?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM