這一篇講述Multitenant DB的功能特徵與管理,從新增tenant DB到監控高可用性與效能以及日常DB admin的工作。
新增 Tenant DB
使用cockpit 工具
在create 過程中會有以下的程序會在背景工作中執行
使用 SQL command
語法:
CREATE DATABASE <database_name > [ AT [ LOCATION ] ‘< port_number > ] ‘ ]SYSTEM USER PASSWORD
例如:
CREATE DATABASE test SYSTEM jason PASSWORD hana2021;
在create tenant DB時需要有以下的系統權限
•DATABASE ADMIN
•DATABASE START/DATABASE STOP
•BACKUP ADMIN
剛剛提到在scale out的架構下,tenant DB的運作可以分散到不同的主機(如下圖)
在create DB時有些選項需要注意
使用cockpit開啟或關閉tenant DB(如下圖)
使用SQL command開啟或關閉tenant DB
語法:
啟動: ALTER SYSTEM START DATABASE < database_name>
關閉: ALTER SYSTEM STOP DATABASE < database_name > [IMMEDIATE[WITH COREFILE ]]
重新命名與刪除
這兩項工作有以下事項必須確認
使用cockpit工具
使用SQL command
先使用 dhbsql進入consoles
hdbsql -n -i <instance_number> -u <user_name> -d <database_name>
進入後下達如下指定
RENAME DATABASE <current_database_name> TO <new_database_name>
若該DB服務沒停止這一個command就無法執行。
若更名成功後,在scale out的架構下。在每一台主機的相對應folder name也會自動更名。
刪除DB
使用cockpit
其中保留備份目錄是 SPS01之後的版本才有的。
使用SQL Command
語法:
DROP DATABASE < database_name > [ DROP BACKUPS]
當然刪除後期相對應主機的資料也會刪除(你會看到folder還存在,但裡面已經是空的)
Tenant DB的資源分配
我們可以控制每一個tenant DB的CPU/Memory的使用量。memeoy是用絕對值來控制。例如這個DB可以分配到256G的memory 資源。而CPU則是可以使用多少核心數,例如我們有四顆8核心的共32 core CPU.以這個方式進行分配
Cross-Database Access
雖然前面有提及每一個Tenant DB可以使用OS中不同的USER/GROUP來達到高度隔離,但有時候有些跨Tenant DB狀況仍免不了,像是要產生報表資料之類。SAP HANA提供的跨Tenant DB-Cross-Database SELECT的功能,這個功能預設是沒有打開的。
如果在 Tenant DB “A”要去access Tenant DB “C”,在另一端的DB C會開放下列物件(object)被access.
●Schemas
●Rowstore and columnstore tables (not including virtual tables)
●SQL views (not including monitoring views)
●Graphical calculation views
○If they only use supported object types as data sources
○If they don’t use procedure-based analytic privileges
●Synonyms
在這一個過程中大多會需要用到資源管理(workload management)其他的篇章會提到這一部分。重點在於在啟用這一個功能時要考慮到被呼叫遠端tenant DB的日常工作不能因為其他DB的呼叫而可能會影響日常工作的效能故需要用workload management來管控此一作業。
但使用這個功能會有幾種狀況需要注意
狀況一:
如果遠端的tenant DB的 views/procedure/synonyms這幾個object有異動(例如刪除後重新create),在執行cross-db的作業時會得到 invalidated view or invalidated procedure,這是因為Cross-Database access只有 read-only的權限。在遠端的DB有結構上的異動不會通知到其他的tenant DB,所以我們必須重新create一次Cross-Database Access的作業
狀況二:
不支援多層次的cross-database access(如下圖)
狀況三:
要連結多個tenant DB需要相關的tenant DB同時對其他有關的Tenant DB開啟cross-database access.如下圖
上圖中, DB 1 與 DB 2 及 DB 3 個別開啟的corss-database access功能,但沒有 DB 2 to DB 3也開啟。所以從 DB 1要從另兩個DB讀取資料就會無法讀取。可能會收到"execution plan aborted or current operation canceled by request and transaction rolled back"類似的錯誤訊息。
雖然我們可以有很多個tenant DB給不同的DBA管理(假設我們有一個 DBA team),身為公司的DB最高管理者你可能還是希望有些菜鳥DBA不要去動到該tenant DB的重要設定,SAP HANA就提供了這樣的功能。叫做 Configuration change backlist(在設定檔 multidb.ini的readonly_parameters區域中).
在做這設定之前有兩個必要條件需要有,一個是system DB要註冊到cockpit管理工具,另一個是要有infile admin的權限。
我們有兩個layer可以選擇
當然你可以客製化那些參數 Tenant DB Admin不能動那些可以,但HANA已經有一些預設參數是無法變動的,如下圖