達夢數(shù)據(jù)庫基礎(chǔ)知識

安裝前的準備及注意事項

  1. 檢查系統(tǒng)版本、內(nèi)核、內(nèi)存大小、磁盤空間等,如檢查glibc要求2.3以上 rpm -qa | grep glibc
  2. 建議不要使用root身份進行數(shù)據(jù)庫的安裝
  3. 麒麟6系統(tǒng)會有文件打開數(shù)的限制,需要修改安裝用戶下的文件打開數(shù)大小。麒麟7省去。
    cd /etc/security/
    vi limits.conf
    
    xxx soft nofile 65536
    xxx hard nofile 65536
    
    // 保存后,查看是否成功
    ulimit -a 
  1. 設(shè)置圖形界面
先檢查是否能打開圖形化界面:輸入 `xclock`;在root下輸入 `xhost +` 然后切換到操作用戶
    報xclock 沒有這個命令,執(zhí)行`yum install xorg-x11-apps`

圖形化安裝

進入文件安裝目錄,執(zhí)行./DMInstall.bin,開始一步一步。過程中會提示執(zhí)行root_install.sh,啟動AP服務(wù)。

圖形化實例化數(shù)據(jù)庫

  • /tool(沒有配置環(huán)境變量) 目錄下執(zhí)行./dbca.sh,打開數(shù)據(jù)庫配置助手界面,過程中會要以root身份執(zhí)行/script/root/dm_service_installer.sh 進行數(shù)據(jù)庫的注冊(/bin/DMServiceDMSERVER 到 /etc/rc.d/init.d/DMServiceDMSERVER)。填寫數(shù)據(jù)庫名、端口、用戶名、密碼、文件目錄等信息。注:簇大小、頁大小設(shè)置后不能修改。不設(shè)置環(huán)境變量,就需要進入/tool 目錄執(zhí)行。以下命令都是配置環(huán)境變量的寫法。

命令行安裝

  • 如果已經(jīng)存在數(shù)據(jù)庫,可以在安裝的根目錄執(zhí)行 ./uninstall.sh 進行卸載。卸載后會保留之前創(chuàng)建的數(shù)據(jù)庫實例。
  • 進入安裝文件所在目錄 ./DMInstall.bin -i 按照流程一步一步選擇。
  • 安裝完成后,如果想用之前創(chuàng)建的數(shù)據(jù)庫服務(wù),可以在cd /script/root 執(zhí)行./dm_service_installer.sh -t dmserver -p DMSERVER -i /xx/data/DAMENG/dm.ini -p: 之前創(chuàng)建的數(shù)據(jù)庫服務(wù)名; -i : 之前服務(wù)的配置文件路徑。 可執(zhí)行dm_service_installer.sh -h 查看命令說明

命令行方式實例化數(shù)據(jù)庫

  • 查看用法 dminit.sh help
  • 安裝 dminit path=/dm7/data db_name=DMMENG01 instance_name=DMSERVER01 port=5237
  • 注冊服務(wù) cd /script/root 執(zhí)行./dm_service_installer.sh -t dmserver -p DMSERVER01 -i /dm7/data/DAMENG01/dm.ini
  • 啟動服務(wù) 可以在manager界面手動啟動,也可以在 /etc/rc.d/init.d/ service DmServiceDMSERVER01 start

啟動服務(wù)方法

  • DM服務(wù)器查看器 (cd tool ./dmservice.sh下打開的界面),手動操作
  • Linux服務(wù)方式 /etc/rc.d/init.d/ service DmServiceDMSERVER01 start
  • 命令方式 /bin ./dmserver path=/xx/xx/DAMENG/dm.ini 關(guān)閉窗口服務(wù)即關(guān)閉

目錄說明

  • /bin:disql、dminit等命令行工具
  • /tool:客戶端工具
    打開DM服務(wù)查看器:./dmservice.sh
    打開DM控制臺:./console
    建庫:./dbca.sh
    數(shù)據(jù)遷移:dts
    打開管理端:./manager
  • /script/root:
    root_install.sh: 啟動AP服務(wù),一般在安裝時執(zhí)行一次。
    dm_service_install.sh 注冊數(shù)據(jù)庫服務(wù)
    dm_service_uninstaller.sh 卸載數(shù)據(jù)庫服務(wù)

連接數(shù)據(jù)庫:

  • /bin disql 默認5236端口
  • 連接其它端口 disql sysdba(用戶名)/(密碼)@localhost:5237
  • 可以配置連接串 /etc/dm_svc.conf DMSERVER01=(127.0.0.1:5237) disql sysdba(用戶名)/(密碼)@DMSERVER01
  • 客戶端工具 cd tool manager

設(shè)置環(huán)境變量

用戶所在目錄下的 .bash_profile 文件 export PATH="$PATH:$DM_HOME/bin:$DM_HOME/tool"
保存后要 source .bash_profile 才能生效

sql 簡單數(shù)據(jù)字典查詢命令

  • 查詢服務(wù)配置 select * from V$DM_INI
  • 查詢服務(wù)配置參數(shù)類型 select DISTINCT PARA_TYPE FROM V$DM_INI
  • 查詢表空間 select * from V$TABLESPACE
  • 查詢數(shù)據(jù)文件 select * from DBA_DATA_FILES
  • 查詢塊信息 select * from USER_SEGMENTS
  • 查詢用戶 select * from DBA_USERS
  • 設(shè)置服務(wù)參數(shù) sp_set_paravalue(scope int, paraname varchar(256), value int64)

DM線程

  • 先查進程PID ps -ef | grep dmserver
  • 方法1:根據(jù)進程PID查詢線程 ps -T -p PID
  • 方法2:select * from V$THREADS

表空間管理

  • 數(shù)據(jù)字典查詢
    • select * from dba_tablespaces;
    • select * from v$tablespace;
    • select * from DBA_DATA_FILES;
    • select * from "V$DATAFILE";
  • 表空間管理
    聯(lián)機狀態(tài)下不能對表空間數(shù)據(jù)文件重命名。數(shù)據(jù)文件不能drop、offline。表空間可以offline。表空間文件大小只能改大,不能改下。
    • MD管理工具圖形化界面,表空間中創(chuàng)建、修改文件名、表空間名。修改文件名不需要進行表空間脫機操作,應(yīng)該是工具會自動進行。
    • 命令行方式
      • 創(chuàng)建 create tablespace tbs02 datafile '/xx/data/DAMENG/tbs02.dbf' size 200;
      • 修改表空間數(shù)據(jù)名 alter tablespace tbs02 rename datafile'/xx/data/DAMENG/tbs02.dbf' to '/xx/data/DAMENG/tbs02.ttt'; 如果此時表空間在聯(lián)機狀態(tài),會提示錯誤信息。需要將表空間 alter tablespace tbs02 offine,然后進行修改。修改成功后 alter tablespace online
      • 修改表空間文件大小,只能改大,不能改小。alter tablespace tbs02 resize datafile'/xx/data/DAMENG/tbs02.dbf' to 400;
      • 修改自動擴展 alter tablespace tbs02 datafile '/xx/data/DAMENG/tbs02.dbf' autoextend off;
      • 修改最大文件大小 alter tablespace tbs02 datafile '/xx/data/DAMENG/tbs02.dbf' autoextend on NEXT 4 MAXSIZE 500

重做日志

重做日志可以重命名,不能刪除。修改文件名時需要在 alter database mount 狀態(tài)下。修改成功后 alter database open
重做日志默認有兩個,在/data/DAMENG(數(shù)據(jù)庫實例名)/ DAMENG01.LOG 和DAMENG02.log

  • 數(shù)據(jù)字典查詢
    • select * from "V$RLOG"
    • select * from "V$RLOGFILE"
  • 圖形化界面操作
    • DM管理工具中的管理服務(wù)器 - > 管理服務(wù)器 -> 日志文件
  • 命令行方式
    • 添加重做日志 alter database add logfile '/xx/data/DAMENG/DAMENG03.log' size 500;
    • 修改大小 alter database RESIZE logfile '/xx/data/DAMENG/DAMENG01.log' to 500;
    • 修改文件名:alert database RENAME logfile '/xx/data/DAMENG/DAMENG03.log' to '/xx/data/DAMENG/DAMENG04.log'

臨時表空間(TEMP.dbf)

臨時表空間可增加數(shù)據(jù)文件,但不能修改 autoextend 屬性

  • 查詢臨時表空間信息 select para_name,para_value,para_type from v$dm_init where para_name like '%TEMP%'
  • 添加臨時表空間文件 alter tablespace temp add datafile '/xx/data/DAMENG/TEMP01.dbf' size 200;
  • 修改文件大小 alter tablespace temp resize datafile '/xx/data/DAMENG/TEMP01.dbf' to 300;

UNDO(ROLL.dbf)表空間

存放DML(insert、update、delete)的回滾操作??梢院推胀ū砜臻g一樣進行操作。
UNDO_RETENTION 90 保留時間90秒

  • 查詢臨時表空間信息 select para_name,para_value,para_type from v$dm_init where para_name like '%UNDO%'
  • 添加文件 alter tablespace ROLL add datafile '/xx/data/DAMEMG/ROLL02.DBF'
  • 修改文件大小 alter tablespace ROLL resize datafile '/xx/data/DAMEMG/ROLL02.DBF to 250'
  • 修改autoextend alter tablespace ROLL datafile '/xx/data/DAMEMG/ROLL02.DBF autoextend off'
  • 修改文件最大大小 alter tablespace ROLL datafile '/xx/data/DAMEMG/ROLL02.DBF autoexteng on NEXT 4 MAXSIZE 500'

系統(tǒng)表空間

存放系統(tǒng)相關(guān)表定義,表越多、索引越多占用系統(tǒng)表空間越大。
select * from SYS.SYSCOLUMNS

用戶管理

  • DM管理工具
    • 用戶 -> 用戶管理
  • 命令行方式
    • 創(chuàng)建索引表空間 create tablespace "tbs_index" datafile '/xx/data.DAMENG/tbs_index.dbf'
    • 創(chuàng)建用戶指定表空間和索引空間 create user test IDENTIFIED by dameng123 default tablespace "tbs" default index tablespace "tbs_index"
    • 增加登錄錯誤次數(shù)超過3次會被鎖定 alter user test limit FAILED_LOGIN_ATTEMPS 3, PASSWORD_LOCK_TIME 3
    • 解鎖用戶 alter user test account unlock
  • 給用戶授權(quán)(角色)
    • grant "PUBLIC" to "TEXT" 也可以在DM管理工具操作:用戶-》修改-》所屬角色
    • revoke "PUBLIC" from TEST 回收權(quán)限

權(quán)限管理

  • 通過數(shù)據(jù)字典查看對象、系統(tǒng)權(quán)限
    • 查看當前用戶表(對象)權(quán)限 select * from USER_TAB_PRIVS
    • 查看當前用戶系統(tǒng)權(quán)限 select * from USER_SYS_PRIVS
    • select * from dba_tab_privs
    • select * from dba_sys_privs
  • 系統(tǒng)權(quán)限和對象權(quán)限
    • 系統(tǒng)權(quán)限:比如 創(chuàng)建表
    • 對象權(quán)限:查詢某個表
  • 賦予系統(tǒng)權(quán)限
    • 賦予創(chuàng)建表的權(quán)限 grant create table to test
  • 賦予對象權(quán)限、回收權(quán)限給某用戶。
    針對 select, update, insert 字段賦權(quán)的情況,不能按列回收權(quán)限,需要 revoke 回收整個表的權(quán)限。
    • 賦予某表權(quán)限給用戶 grant update,delete,insert on dmhr.employee to test
    • 回收權(quán)限 'revoke update,delete,insert on dmhr.employee from test'
    • 賦予查詢某表個別字段的權(quán)限 grant select(employee_id,employee) on dmhr.employee to test
  • 執(zhí)行insert,update,delete 需要commit 或者 rollback

角色管理

  • 相關(guān)數(shù)據(jù)字典
    • select * from USER_ROLE_PRIVS
    • select * from DBA_ROLE_PRIVS
    • select * from DBA_ROLES
  • 命令行方式創(chuàng)建 create ROLE r_test
  • 賦對象權(quán)限給某個角色 grant update,delete,insert,select on dmgr.employee to r_test

模式對象管理

一般情況下,創(chuàng)建用戶會默認創(chuàng)建一個和用戶同名的模式。
一個用可以有多個模式,一個模式屬于一個用戶。一個模式下有多個對象(表、索引等)。

  • 管理模式

    • 命令行操作 create schema s_test AUTHORIZATION test
  • 管理表

    • 表空間關(guān)系
      • 假如用戶沒有指定默認表空間、創(chuàng)建表也沒有指定默認表空間,表默認存儲 MAIN 表空間
      • 假如用戶指定默認表空間、創(chuàng)建表沒有指定默認表空間,使用的是用戶指定的默認表空間
      • 創(chuàng)建表指定默認表空間,使用的是用戶指定的表空間
    • 數(shù)據(jù)字典查詢 select * from USER_TABLES
    • 命令行創(chuàng)建
      • 默認當前用戶的表空間 create table test(id int,name varchar(100))
      • 指定表空間 create table test(id int,name varchar(100)) storage(on main)
      • 指定創(chuàng)建某個模式的表 create table s_test.test(id int,name varchar(100)) table_s 模式名。SYSDBA才有權(quán)限,用戶要有這個模式的權(quán)限。
      • 自增列 create table test(id int identity,name varchar(100))
      • 帶主鍵約束create table test (id int inentity primary key,name varchar(100))
      • 使用某個模式的表創(chuàng)建一個結(jié)構(gòu)一樣,并復制數(shù)據(jù)的表 create table test as select * from dmhr.employee
  • 添加約束

    • 查看約束相關(guān)字典
      • select * from USER_CONSTRAINT
      • select * from USER_CONS_COLUMNS
    • 主鍵約束
      • 給表添加主鍵約束 alter table test ADD CONSTRAINT PK_id primary key(id) PK_id是主鍵名
      • 直接創(chuàng)建帶主鍵的表 create table test (id int inentity primary key,name varchar(100))
    • 外鍵約束
      • 給表添加外鍵約束 如員工表有dept_id 字段 alert table emp ADD CONSTRAINT fk_emp_deptid FOREIGN key (dept_id) REFERENCES dept(dept_ID)
      • 直接創(chuàng)建帶外鍵的表 create table test (id int,name varchar(100),dept_id int FOREGIN key PEFERENCES dept(DMHR.dept_ID))
    • 唯一約束
      • 主鍵是唯一約束
      • create table test(dept_id int UNIOUE)
    • check 約束
      • 如年齡大于6歲 alter table test add constraint "check_age" check(AGE >=6) check_age 約束名字

切換模式

  • 不是當前用戶模式,不允許切換
  • 命令 disql 下 set SEHEMA s_test

管理視圖

視圖不占用存儲空間,簡單視圖可以做增刪改操作;復雜視圖比如帶group by、集函數(shù)不支持DML操作

  • 數(shù)據(jù)字典 select * from user_view
  • 命令行創(chuàng)建 create view v_test AS select * from emp

管理索引

索引是雙刃箭,降低DML操作速度為代價,提高查詢速度

  • 查詢數(shù)據(jù)字典

    • select * from USER_INDEXES
    • select * from USER_IND_COLUMNS
  • 命令方式創(chuàng)建
    不指定模式,默認當前模式

    • create index ix_emp_empNAME on emp(emp_NAME);
  • 索引重建(現(xiàn)網(wǎng)推薦 online):
    alter index IX_EMP_EMPNAME rebuild
    alter index IX_EMP_EMPNAME rebuild online

  • 收集統(tǒng)計信息
    不會自動收集統(tǒng)計信息,需要手動收集

  • 查看執(zhí)行計劃 disql 下explain select * from test.t_test where name = '11' 查看這條語句的執(zhí)行計劃。name 已經(jīng)建了索引。課上執(zhí)行計劃沒有走索引進行查詢,但是親測時是走了。課上需要進行統(tǒng)計信息的收集。

  • 查看統(tǒng)計信息 disql call dbms_stats.table_stats_show(''TEST,'T_TEST') test用戶的t_test表

  • 執(zhí)行統(tǒng)計信息 call dbms_stats.gather_table_status('TEST','T_TEST') 然后執(zhí)行查看計劃,發(fā)現(xiàn)走索引了。

數(shù)據(jù)字典和動態(tài)性能視圖

  • 數(shù)據(jù)字典
    • DBA_*:查詢數(shù)據(jù)庫中所有的對象,比如 DBA_TABLES, DBA_VIEWS, DBA_OBJECTS, DBA_ROLES,DBA_ROLE_PRIVS,DBA_SOURCE 源碼等。
    • ALL_*:查詢當前用戶所訪問權(quán)限范圍內(nèi)對象
    • USER_*:查詢當前用戶下的對象。

動態(tài)性能視圖

  • v$ 開頭的是動態(tài)視圖。
    如:v$datafile、v$tablespace、v$session、v$men_pool 、v$lock等等。
  • 注意:當 A 刪除操作,未提交,另外一個會話 B 執(zhí)行刪除 該記錄時會產(chǎn)生行鎖??刹榭?v$lock;

數(shù)據(jù)庫備份還原

  • 基礎(chǔ)知識

    • 物理備份、邏輯備份 (聯(lián)機 dimp 和 dexp)

    • 聯(lián)機備份、脫機備份。聯(lián)機(數(shù)據(jù)庫開啟狀態(tài)),脫機(數(shù)據(jù)庫關(guān)閉狀態(tài))

    • 備份分類:全庫備份、表空間備份、表備份(只能聯(lián)機下備份)、歸檔日志備份。

    • 物理備份包含聯(lián)機備份、脫機備份

    • DM控制臺工具進行脫機備份,DM服務(wù)器管理工具進行聯(lián)機備份

    • 需要開啟APService服務(wù),有時AP服務(wù)會停,這時需要啟動。會出現(xiàn)啟動失敗的問題,查看日志后,如果報管道文件已經(jīng)存在,就到/dmdbms/bin下刪除文件 rm -R DM_PIPE*

    • 備份文件包含元數(shù)據(jù)和備份文件:

    • 聯(lián)機備份需要開啟歸檔

      • 命令行方式(disql)
        • 開歸檔需要讓數(shù)據(jù)庫在mount alter database mount
        • 開啟歸檔 alter database archivelog
        • 設(shè)置歸檔 alter database add archivelog 'dest=/xx/dmdbms/arch,type=local,file_size=100,space_limit=1024'
        • 打開狀態(tài) alter database open
      • 客戶端工具方式 DM管理工具-》管理服務(wù)器-》系統(tǒng)管理進行狀態(tài)轉(zhuǎn)換,歸檔配置進行設(shè)置。
      • 查看是否開啟歸檔(數(shù)據(jù)字典方式) select arch_mode from v$database
    • 聯(lián)機備份與還原

      • 命令行方式(disql)
        • 庫備份backup database full backupset 'full' 第一個full是全庫備份,第二個full是備份的文件夾。不指定目錄,默認在當前示例(/data/DAMENG/bak 目錄)的目錄。
        • 表空間備份backup tablespace "tbs_02" backupset 'tbsfull' 表空間要加雙引號,不然報無效的表空間錯誤,如果指定目錄,需要寫絕對目錄路徑
        • 還原
        Alter tablespace "tbs_02" offline;
        restore tablespace "tbs_02" datafile 1 from backupset '/xx/data/DAMENG/bak/tbsfull';
        Alter tablespace "tbs_02" online;
        
    • 注意:數(shù)據(jù)庫表空間恢復會自動恢復到最新狀態(tài),假如在備時中 A 表存在,后來 刪除 A 表,這時數(shù)據(jù)庫表空間恢復,會自動根據(jù)歸檔日志恢復到最新狀態(tài),所以沒有A表。

    • DM管理工具,備份中進行操作

    • 脫機備份與還原恢復
      脫機備份,是使用工具 dmrman,在脫機狀態(tài)下備份,APService 服務(wù)需要開 啟。脫機備份只能進行全庫備份和歸檔備份。不指定目錄,默認創(chuàng)建在bak下。

      • dmrman 回車開始執(zhí)行命令。最好進安裝目錄下的/bin 執(zhí)行。
      • 命令方式備份 backup database '/xx/data/DAMENG/dm.ini' backupset '/xx/backup/dmrman'
      • 命令方式還原 restore database 'xx/data/DAMENG/dm.ini' from backupset '/xx/backup/dmrman'
      • 命令方式恢復 recover database 'xx/data/DAMENG/dm.ini'
      • 窗口工具在DM控制工具中進行操作
  • 邏輯備份
    dexp ()和 dimp 在終端直接執(zhí)行
    支持全庫導出、按用戶名導出、模式名導出、表導出

    • 導表 dexp userid=TEXT/xxxxx tables='t_test' 沒有指定目錄,默認創(chuàng)建在當前終端pwd下的目錄
    • 按模式導出:dexp userid=test/xxxx schemas=s_test file=/xx/data/s_test.dmp log=/xx/data/s_test.log
    • 不指定參數(shù)默認導出登錄用戶同名的模式 schema
    • 導出用戶下所有 schema:
      dexp userid=test/xxxx owner=test file=/xx/data/testuser.dmp log=/xx/data/testuser.log
    • 導出系統(tǒng)所有:
      dexp userid=sysdba/xxx full=y file=/xx/data/full.dmp log=/xx/data/full.log
    • 把數(shù)據(jù)從 test 模式導入 test01 用戶
      dimp userid=sysdba/xxx file=/xx/data/test.dmp log=/xx/data/test01.log remap_schema=test:test01

作業(yè)管理

有與 oracle 兼容的 dbms_job, dbms_scheduler 系統(tǒng)包,可以使用這兩個系統(tǒng)包創(chuàng)建作 業(yè)(默認沒有創(chuàng)建此兩個系統(tǒng)包,需手工創(chuàng)建)。達夢的這兩個包作業(yè)支持調(diào)用 DM SQL、 存儲過程,不支持調(diào)用外部命令。

  • disql 開啟 dbms_job SP_INIT_JOB_SYS(1)創(chuàng)建。0 關(guān)閉
    SP_INIT_DBMS_SCHEDULER_SYS(1);
    不開啟執(zhí)行 desc dbms_job;會報無效的對象名
  • DM管理服務(wù)器,代理中進行操作。

SQL

  • DCL(權(quán)限控制):grant、revole 權(quán)限控制。
  • DDL(數(shù)據(jù)控制):create、truncate、drop、alter ,可自動提交。
  • DML(數(shù)據(jù)操作):數(shù)據(jù)操做語言,insert、update、delete
    rollback, commit;
  • 集函數(shù)
    • sum() count() avg()
    • 環(huán)比:同比:LISTAGG/LISTAGG2
    • 排行榜 dense_rank(), rank(), row_number()
  • 分析函數(shù)
    partition by (主要是分組)
select emp.EMPLOYEE_NAME, b.DEPARTMENT_NAME, emp.SALARY, DENSE_RANK() over(order by emp.SALARY desc) rankid1,
DENSE_RANK() over(partition by emp.department_id order by emp.SALARY desc ) rankid_dept
from dmhr.employee emp, DMHR.DEPARTMENT b where EMP.DEPARTMENT_ID = b.DEPARTMENT_ID
order by emp.SALARY desc;

ODBC Linux 配置

  • 用root用戶進行操作

  • 解壓 tar -xvf unix.tar.gz

  • 檢查電腦是否安裝gcc rpm -qa | grep gcc

  • 執(zhí)行 ./configuremake、 make install

  • 配置 odbc.ini 和 odbcinst.ini 一般文件在/usr/local/etc 下。也可以odbcinst -j 進行查看路徑

  • obdc.ini

  [dm7]
  Description = DM ODBC
  DRIVER = DM7 ODBC DRIVER
  SERVER = localhost
  UID = sysdba
  PWD = xxx
  TCP_PORT = 5236  
  • odbcinst.ini
  [DM7 ODBC DRIVER]
  Description = ODBC Driver For DM7
  DRIVER = /home/xx/dmdbms/bin/libdodbc.so
  • 配置完成后,切換到su - xxx 安裝用戶,通過odbc dm7 進行連接 isql dm7

其它

  • Delete 沒有降低水位線,truncate 降低了水位線。
  • disql 下調(diào)用sql文件 start xx.sql 如導入之前導出的sql數(shù)據(jù)文件。執(zhí)行完后需要commit
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容