DM(達夢)數據庫簡介

前言:

達夢數據庫作爲已商業化的國產數據庫代表,在政府及事業單位應用還是比較廣泛。最近工作中有使用到達夢數據庫,這裏對已學習的相關內容作個簡單記錄,方便以後查閱。另外,網絡上有關達夢數據庫的資料甚少,且不夠準確和系統,也希望這篇博文能幫助有需求的人員快速瞭解該數據庫。

達夢數據庫也屬於關係型數據庫大類,因此有相關經驗將非常有利於理解該數據庫,尤其是ORACLE數據庫的使用經驗。


一)基本概念介紹

這裏主要簡單介紹以下幾個簡單但重要的概念:數據庫、實例、用戶、表空間、模式、表、角色、數據文件

數據庫:數據存儲的物理介質。廣義上講任何存儲數據的物理介質都可叫着數據庫,例如一個word文檔。但實際上,我們說數據庫一般是指像MySQL,ORACLE, HBASE等之類的軟件系統。這些系統除了提供數據的存儲外,還提供一整套相關的工具或接口對存儲的數據進行管理。達夢數據庫就是這樣的一種系統。


數據庫實例:已實例化可存儲數據的倉庫。達夢數據庫與MySQL數據庫有一個很大的差別就是:MySQL服務啓動後通過create database語句創建N個數據庫(數據庫實例);而達夢數據庫一個實例就只能掛一個數據庫(即一個實例就是一個數據庫),如果想建多個數據庫,則需配置啓動相應數量的實例。達夢的每個實例有一系列的後臺進程和內存結構,這些是相互獨立的。


用戶:達夢數據庫用戶是建在實例下的,因爲實例相互獨立,所有達夢數據庫不同的實例下可以有相同的用戶名。另外,在達夢數據庫中通過create user語句創建用戶時,會同時創建一個同名的“模式”。也可以通過create schema語句單獨創建模式(特別注意:在Oracle中,用戶與schema是一一對應的,不能單獨創建模式,要想創建模式得需通過創建一個同名用戶來實現),並授權給某個已存在的用戶,因此在達夢數據庫中用戶與模式是1:N的關係。(注:如果先通過create schema創建了模式,再通過create user創建同名用戶,不能創建成功。)


表空間是一個用來管理數據存儲的概念,表空間只是和數據文件(ORA或者DBF文件)發生關係,數據文件是物理的,一個表空間可以包含多個數據文件,而一個數據文件只能隸屬一個表空間。可以將表空間理解爲對應一塊物理存儲區,專門用來存儲數據文件。實例化達夢數據庫時,默認會創建MAIN、ROLL、SYSTEM、TEAM及HMAIN五個表空間。ROLL、SYSTEM、TEAM表空間系統自行維護,用戶所建表(如果未指定存放表空間的話)默認放在MAIN表空間。用戶也可自定義表空間,然後在創建用戶時指定爲默認表空間;也可以在建表時通過加"tablespace SpaceName"語句動態指定該表的存儲表空間。


模式(schema):如果僅使用過MySQL,而沒有ORACLE數據庫使用經驗,這個概念比較難理解。先摘錄一段官方說明:

A schema is a collection of database objects,such as table, view, sequence, etc (used by a user.). Schema objects are the "logical" structures that directly refer to the database’s data. A user is a name defined in the database that can connect to and access objects through schema. Schemas and users help database administrators manage database security.

關於模式,需要記住一下幾點:

  1.  一個用戶一般對應一個schema,該用戶的schema名等於用戶名,並作爲該用戶缺省schema;

  2. 一個用戶還可以使用其他的schema(Oracle數據庫也可通過權限管理實現訪問其他schema);

  3. 創建模式不指定用戶時,該模式默認爲SYSDBA擁有;

  4. 在同一模式下不能存在同名對象,但在不同模式中的對象名稱可以相同;

  5. 用戶可以直接訪問同名模式對象,但如果要要訪問其他模式對象,則必須具有對象權限;

  6. 當用戶要訪問其他模式對象時,必須附加模式名作後綴(schema.table);

  7. 用戶是用來連接數據庫對象,而模式是用來創建及管理對象的。


這個就不用說了吧,但要說明的一點是一個表只能屬於一個表空間。


角色:在達夢數據庫中,每個用戶都有角色。它決定了該用戶有什麼權限,比如DBA,擁有最高權限。補充說明一點是,實例化的達夢數據庫默認有3種角色:DBA, PUBLIC,RESOURCE。新建的用戶只擁有PUBLIC角色,該角色幾乎做不了撒,因此一般新建用戶後,需要單獨對他(她)進行授權。


數據文件:數據的物理載體。


這裏是幫助理解的一段類比說明:

“我們可以把Database看作是一個大倉庫,倉庫分了很多很多的房間,Schema就是其中的房間,一個Schema代表一個房間,Table可以看作是每個Schema中的牀,Table(牀)被放入每個房間中,不能放置在房間之外,那豈不是晚上睡覺無家可歸了,然後牀上可以放置很多物品,就好比 Table上可以放置很多列和行一樣,數據庫中存儲數據的基本單元是Table,現實中每個倉庫放置物品的基本單位就是牀, User就是每個Schema的主人,(所以Schema包含的是Object,而不是User),user和schema是一一對應的,每個user在沒有特別指定下只能使用自己schema(房間)的東西,如果一個user想使用其他schema(房間)的東西,那就要看那個schema(房間)的user(主人)有沒有給你這個權限了,或者看這個倉庫的老大(DBA)有沒有給你這個權限了。換句話說,如果你是某個倉庫的主人,那麼這個倉庫的使用權和倉庫中的所有東西都是你的(包括房間),你有完全的操作權,可以扔掉不用的東西從每個房間,也可以放置一些有用的東西到某一個房間,你還可以給每個User分配具體的權限,也就是他到某一個房間能做些什麼,是隻能看(Read-Only),還是可以像主人一樣有所有的控制權(R/W),這個就要看這個User所對應的角色Role了。”—摘自網絡


二)安裝及配置

達夢數據庫的安裝在此不做說明,網上教程一堆,而且相對也比較簡單。

下載地址: http://www.dameng.com/down.aspx?TypeId=11&FId=t14:11:14 

文檔下載地址: http://www.dameng.com/down.aspx?TypeId=12&FId=t14:12:14 


安裝後實例化數據庫,以Windows爲例:

開始-》所有程序-》達夢數據庫,實例化需要用到以下紅框內客戶端,雙擊它:

1.png

出現如下所示界面,我們可以看到這貨中文名叫達夢數據庫配置助手,通過這個圖形化的界面來創建一個數據庫,按照默認“創建數據庫實例”,點擊“開始”:

1.png

指定數據庫模板,默認“一般用途”,點擊“下一步” :

2.png

數據庫目錄,以後放數據的地方,這裏自行選擇目錄,點擊“下一步”:

3.png

數據庫標識,第一次創建時,默認的庫名,實例名,端口號如下圖所示,繼續點擊“下一步” :

3.png

數據庫文件,按默認的來,點擊“下一步”:

4.png

初始化參數,依舊默認(這裏注意字符集,如果有需求可更改爲需要的字符集),點擊“下一步” :

6.png

口令管理,爲了方便,我選擇第二個“所有用戶(這裏指系統默認可登錄用戶:SYSDBA, SYSAUDITOR)使用同意口令”,然後輸入口令,點擊“下一步” :

7.png

創建實例庫,對於初學者,建議都勾選上,這樣實例化的數據庫的同時會創建BOOKSHOP和DMHR兩個模式及相應用戶,便於學習。點擊“下一步” :

8.png

創建摘要,點擊“完成”:

5.png

6.png 

至此,實例化數據庫完成!

安裝參考網址:https://blog.csdn.net/xiaokedou_hust/article/details/69214029 


三)基本使用

  1. 查表空間

    select * from V$TABLESPACE;

  2. 查詢模式

    SELECT owner FROM dba_segments group by OWNER;

  3. 查詢表

    select * from dba_tables where tablespace_name='TEMP';         //根據表空間查詢表

    SELECT * FROM SYSOBJECTS WHERE schid = (SELECT object_id from all_objects where object_name = 'CTISYS'  and object_type = 'SCH') and (SUBTYPE$ = 'UTAB'  or SUBTYPE$ = 'STAB');    //object_name指模式名, UTAB用戶表,STAB系統表

  4. 表空間脫機及上線

    alter tablespace "DMHR" offline;

    alter tablespace "DMHR" online;        //同一表空間可以存在同名對象

  5. 模式切換

    SELECT SYS_CONTEXT ('userenv', 'current_schema') FROM DUAL;        //查詢當前模式

    SET SCHEMA "SYSDBA";        //設置當前登錄用戶的默認模式

  6. 數據大小

     SELECT SUM(bytes) from dba_data_files;        //數據庫佔用空間

     SELECT TABLE_USED_SPACE('DMHR', 'REGION') * 1024;        //表大小

  7. 歸檔模式

     select arch_mode from v$database;        //歸檔是否打開

    select * from V$DM_ARCH_INI;        //歸檔信息

  8. 系統數據查詢

    select * from dba_tables;        //系統所有表查詢

    select * from user_tables;        //登錄用戶所有表查詢

    select * from user_tablespaces;        //表空間查詢

    select * from dba_users;        //系統所有用戶查詢


四)高級特性

  1. 表空間詳解及管理,參考以下博文:

    https://blog.csdn.net/lucky_fly/article/details/81566616 

  2. 達夢數據庫group by子句用法,參考以下博文:

    https://blog.csdn.net/basenet855x/article/details/6694150 

  3. 視圖創建使用,參考以下博文:

    https://www.cnblogs.com/oraclestudy/articles/5779200.html 

  4. 達夢臨時表創建及使用,參考以下博文:

    https://www.cnblogs.com/zmlctt/p/3782083.html 

  5. 達夢外部表創建及使用

    所謂外部表,其實質上與一般的表一樣有相應的表字段結構,區別在於外部表的數據存儲在外部系統中,因此你在數據庫系統的表空間找不到外部表的存儲信息。另外,外部表只可讀,不可做其他操作。創建外部表的語句如下,以windows爲例:

    create external table ext_table(num1 int, num2 int, num3 int) from datafile 'E:\data.txt' parms(fields delimited by '|', records delimited by 0x0d0a);

    注:使用外部表時需要注意,外部文件字段數據必須大於等於外部表字段的定義數,小於時查詢會提示數據錯誤。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章