天天看點

記一次“高強度”的教育訓練,達夢資料庫的基礎認證DCA

轉載自王老師的課堂筆記,感謝老師的教導,連我這個小白也懂了一大半。

DCA

安裝

建立資料庫

管理資料庫執行個體

表空間

使用者

SQL(DDL,DML,DCL,TCL)

備份還原

作業

開發

2.安裝

A 收集軟硬體資訊

cat /etc/issue

[root@localhost ~]# uname -r

[root@localhost ~]# uname -m

[root@localhost ~]# fdisk -l

P+E(0,1)<=4

[root@localhost ~]# parted

mkfs

[root@localhost ~]# df

[root@localhost ~]# iostat 1 10

注意raid lvm

[root@localhost /]# mdadm

[root@localhost /]# cat /proc/cpuinfo

主頻,緩存,廠商(飛騰,龍芯,鲲鵬,海光,申威…)

[root@localhost /]# free

[root@localhost /]# top

B 規劃使用者

[root@localhost /]# groupadd dinstall

[root@localhost /]# useradd -g dinstall dmdba

[root@localhost /]# passwd dmdba

[root@localhost /]# id dmdba

cat /etc/default/useradd

[root@localhost /]# cat /etc/login.defs

C 規劃安裝路徑和資料庫的存儲路徑

[root@localhost /]# mkdir /dm7

D 注意權限

[root@localhost /]# ls -dl /dm7

[root@localhost /]# chown dmdba.dinstall -R /dm7

E 選擇安裝版本(iso .zip .tar.gz)

[root@localhost opt]# file dm7_setup_rh6_64_ent.iso

zip/unzip tar.gz/ tar

F 配置環境變量

臨時修改:

[root@localhost opt]# ulimit -n 65536

[root@localhost opt]# ulimit -a

[root@localhost security]# vim /etc/security/limits.conf

dmdba soft nofile 4096

dmdba hard nofile 65536

修改使用者的環境變量:

cd /home/dmdba ; vim .bash_profile

export DM_HOME=/dm7

export PATH=$DM_HOME/bin:$PATH:$HOME/bin

安裝:

[root@localhost opt]# mount -o loop dm7_setup_rh6_64_ent.iso /mnt

[root@localhost 桌面]# xhost +

[root@localhost opt]# su - dmdba

[dmdba@localhost mnt]$ ./DMInstall.bin

[root@localhost opt]# /dm7/script/root/root_installer.sh

bin 達夢常用的指令和庫檔案

doc 幫助手冊

jar jar包()

license_zh.txt 、license_en.txt 許可資訊

release_zh.txt release_en.txt 版本資訊

tool 用戶端工具

web DEM (利用web管理資料庫)

bin2 UTF-8

drivers 驅動(jdbc)

jdk JAVA軟體

log 日志

samples 例子

uninstall,uninstall.sh 解除安裝

desktop 桌面

include 頭函數

script 腳本

解除安裝:

[dmdba@localhost dm7]$ ./uninstall.sh

[root@localhost opt]# /dm7/root_uninstaller.sh

G 回退方案

指令行安裝:

[dmdba@localhost mnt]$ ./DMInstall.bin -i

3.建立資料庫執行個體

GUI:dbca.sh (資料庫配置助手)

CLI:dminit

[dmdba@localhost bin]$ ./dminit path=/dm7/data db_name=DM instance_name=TEST port_num=5237

[root@localhost root]# ./dm_service_installer.sh -t dmserver -p TEST -i /dm7/data/DM/dm.ini

4.管理資料庫執行個體

是否啟動:DM服務檢視器

[dmdba@localhost root]$ ps -ef|grep dmserver

[dmdba@localhost root]$ netstat -ntl|grep 523

啟動和關閉:

DM服務檢視器

dmserver (調試)

[dmdba@localhost bin]$ ./dmserver /dm7/data/DM/dm.ini

SYSTEM IS READY.

service systemctl

[dmdba@localhost bin]$ service DmServiceTEST start

[dmdba@localhost init.d]$ /etc/rc.d/init.d/DmServiceTEST stop

啟動的過程

A shutdown---mount

配置設定共享記憶體,啟動背景程序和線程。打開控制檔案。

B mount --- open

根據控制檔案,打開資料庫檔案和重做日志檔案

連接配接資料

A disql (預設連接配接5236)

[dmdba@localhost bin]$ ./disql sysdba/[email protected]:5236

[dmdba@localhost bin]$ ./disql [email protected]:5237

B DM管理工具

補充資料庫的狀态檢視和改變?

SQL> select status$ from v$instance;

open mount suspend

open ---mount

SQL> alter database mount;

mount --- open

SQL> alter database open;

4.表空間管理

資料庫的實體結構和邏輯結構

實體結構:檔案系統----資料檔案

邏輯結構:資料庫---表空間(一個或多個資料檔案)---段----簇---頁

資料庫的構成:

用戶端+伺服器 c/s

伺服器:資料庫(database,資料檔案)+執行個體(instance,共享記憶體+背景的程序或者線程)

SQL> desc v$database

資料檔案:SQL> select path from v$datafile;

重做日志檔案:SQL> select path from v$rlogfile;

控制檔案:SQL> select para_name,para_value from v$dm_ini where para_name='CTL_PATH';

SQL> desc v$instance

資料緩沖區:SQL> select para_name,para_value from v$dm_ini where para_name='BUFFER';

字典緩沖區:SQL> select para_name,para_value from v$dm_ini where para_name='DICT_BUF_SIZE';

SQL緩沖區:SQL> select para_name,para_value from v$dm_ini where para_name='CACHE_POOL_SIZE';

排序區:SQL> select para_name,para_value from v$dm_ini where para_name='SORT_BUF_SIZE';

哈希連接配接區:SQL> select para_name,para_value from v$dm_ini where para_name='HJ_BUF_SIZE';

線程:SQL> select name,thread_desc from v$threads;

對于參數的設定和調整:

SQL> sp_set_para_value(2,'BUFFER',500);

(範圍,參數名,參數值)

COMPATIBLE_MODE

是否相容其他資料庫模式。0:不相容,1:相容SQL92标準,2:相容ORACLE,3:相容MS SQL SERVER,4:相容MYSQL

A. 預設那些?作用?

SQL> select tablespace_name from dba_tablespaces;

行号 TABLESPACE_NAME

1 SYSTEM

2 ROLL

3 TEMP

4 MAIN

5 HMAIN

SYSTEM 系統表空間,存放的資料字典。

ROLL 復原表空間 ,復原段(MVCC)

TEMP 臨時表空間,臨時資料

MAIN 資料庫預設的表空間

HMAIN huge表空間(列存)

B. 如何建立?

案例一:規劃一個表空間,初始大小50M,最大1G。

SQL> create tablespace tbs1 datafile '/dm7/data/DAMENG/tbs1.dbf' size 50 autoextend on maxsize 1024;

注意:10m,最大1g?

表空間的資料檔案初始大小是page的4096倍。

案例二:建立一個表空間,初始大小32M,最大1g,每次擴充1m。

SQL> create tablespace tbs3 datafile '/dm7/data/DAMENG/tbs3.dbf' size 32 autoextend on next 1 maxsize 1024;

預設:SQL> select sf_get_extent_size;

案例三:規劃一個表空間,初始50M,最大值1G,要求表空間有2個資料檔案。

SQL> create tablespace tbs4 datafile '/dm7/data/disk1/tbs4_1.dbf' size 50 autoextend on maxsize 1024,'/dm7/data/disk2/tbs4_2.dbf' size 50 autoextend on maxsize 1024;

C. 如何維護?

大小不足?

增加資料檔案?

SQL> alter tablespace tbs5 add datafile '/dm7/data/DAMENG/tbs5_1.dbf' size 32 autoextend on maxsize 33;

更換存儲位置?

注意:表空間的狀态?

offline online

system,roll,temp不能offline

SQL> alter tablespace tbs5 offline;

SQL> select tablespace_name,status from dba_tablespaces;

SQL> alter tablespace tbs5 online;

SQL> select tablespace_name,file_name from dba_data_files;

SQL> alter tablespace tbs1 offline;

SQL> alter tablespace tbs1 rename datafile '/dm7/data/DAMENG/tbs1.dbf' to '/dm7/tbs1/tbs1.dbf';

SQL> alter tablespace tbs1 online;

删除表空間?

SQL> drop tablespace tbs5;

drop tablespace tbs5;

5.使用者管理

安全?

  1. 預設那些使用者,作用?

    SQL> select username from dba_users;

    行号 USERNAME

    1 SYS

    2 SYSDBA

    3 SYSAUDITOR

    4 SYSSSO

    SYS 資料庫内置管理使用者,不能登入資料庫

    SYSDBA 資料庫的管理者

    SYSAUDITOR 審計員

    SYSSSO 安全員(安全版)

    SYSDBO 操作員(安全版)

    SQL> select * from v$version;

  2. 規劃使用者?

    a. 使用者名(字母開頭,$_#,128字元)

    b. 預設存儲位置(表空間)

    c. 密碼(長度,複雜度,密碼曆史,期限)

    PWD_POLICY

    設定系統預設密碼政策。0: 無政策;1: 禁止與使用者名相同;2: 密碼長度不小于6;4: 至少包含一個大寫字母(A-Z);8 :至少包含一個數字(0-9);16:至少包含一個标點符号(英文輸入法狀态下,除“和空格外的所有符号;若為其他數字,則表示配置值的和,如3=1+2,表示同時啟用第1項和第2項政策。當COMPATIBLE_MODE=1時,PWD_POLICY的實際值均為0

密碼曆史等資訊,通過limit選項配置的。

案例1:建立使用者user1,密碼嘗試登陸2次,鎖定2分鐘,密碼有效期為180天。寬限期5天,預設的表空間為tbs2.

create user "USER1" identified by "dameng123"

limit failed_login_attemps 2, password_life_time 180, password_lock_time 2, password_grace_time 5

default tablespace "TBS2";

SQL> desc sysusers

如何解鎖使用者和鎖定使用者。

SQL> alter user user1 account unlock;

SQL> alter user user1 account lock;

d. 權限(系統權限,對象權限)

SQL> select grantee,granted_role from dba_role_privs where grantee='USER1';

SQL> select grantee,privilege from dba_sys_privs where grantee='PUBLIC';

新建立的使用者預設配置設定public的角色。

系統權限:

SQL> grant create table to user1;

一般情況,把resource角色分給使用者,基本可以滿足使用者的基本需求。(系統權限)

SQL> grant resource to user1;

對象權限:

檢視DMHR.CITY

SQL> grant select on dmhr.city to user1;

SQL> grant select (employee_name) on dmhr.employee to user1;

撤銷權限:

SQL> revoke create table from user1;

SQL> revoke select on dmhr.city from user1;

e. 資源限制(CPU,記憶體的使用限制)

案例2:建立使用者user2,最大會話數是100,私有的記憶體200M。

create user "USER2" identified by "dameng123"

limit session_per_user 100, failed_login_attemps 3, password_lock_time 1,

password_grace_time 10, mem_space 200

grant "PUBLIC","RESOURCE" to "USER2";

SQL> create user abc identified by "dameng123" default tablespace tbs2;

  1. 維護使用者?

    改密碼

    SQL> alter user abc identified by 123456789;

    修改資源限制

    SQL> alter user abc limit password_life_time 180;

    删除

  2. 角色管理?

    一類權限的集合

    SQL> create role r1;

    SQL> grant select on dmhr.city to r1;

    SQL> grant r1 to user2;

    SQL> sp_set_role('R1',0);--禁用

    SQL> sp_set_role('R1',1);--啟用

    SQL> drop role r1;

6.SQL

DDL 資料定義語言

create drop truncate alter

資料庫的資料對象,存放到某個模式下。

建立一個使用者的時候,會生成一個與使用者同名的模式。

模式是一類資料對象的集合。(安全)

達夢支援哪些表?

預設表(索引組織表),堆表,外部表,分區表(範圍,清單,哈希)

如何規劃表?

表名稱

權限

功用(規劃列名和資料類型)

資料類型:int varchar char date clob blob

存儲位置

備注(注釋)

comment

範式(三範式)

限制

非空限制(不能錄入空值)

create table "SYSDBA"."T1"

(

"C1" INT not null

)

tablespace tbs3

;

comment on table "SYSDBA"."T1" is '測試表';

insert into t1 values (1);

檢視表的建立方法:

sp_tabledef('SYSDBA','T1');

錄入SQL腳本:

SQL> start /home/dmdba/a.sql

唯一限制 (錄入的值唯一)

create table "SYSDBA"."T2"

"C1" DEC(4, 2)

alter table "SYSDBA"."T2" add constraint "T2_UNI" unique("C1");

select table_name,constraint_name,constraint_type from dba_constraints where table_name in ('T2','T3');

注意null

主鍵限制(唯一非空,一張表隻能有一個主鍵)

create table "SYSDBA"."T4"

"C1" CHAR(10) primary key

tablespace "TBS3"

注意:設計主鍵的時候,盡量放到無任何業務邏輯的列上。

檢查限制:

create table "SYSDBA"."T5"

"C1" INTEGER check (c1>=6)

) tablespace tbs3;

create table t6 (name varchar(20) check(name<>'老四')) tablespace tbs3;

外鍵限制

create table t9 (id int primary key,pid int);

create table t10 (sid int primary key,id int foreign key references t9(id));

維護表?

增加列,删除列

SQL> alter table t1 add name varchar(10);

SQL> alter table t1 drop name;

重命名:

SQL> alter table test rename to t11;

删除表:

SQL> drop table t11;

視圖(簡單視圖)

視圖了解一張表的透析。(視圖本身不存儲資料,視圖查到的資料在表上)

建立

SQL> create view v1 as select * from dmhr.city;

SQL> select view_name,text from dba_views where view_name='V1';

修改

SQL> create or replace view v1 as select city_id,city_name from dmhr.city;

SQL> drop view v1;

索引

了解成是一本書的目錄。加快查詢,對表做增删改操作,資料庫會自動維護索引。

索引是一棵倒樹,使用索引是多索引結構做周遊。

建立索引的基本規則:

  1. 經常查詢的列
  2. 謂詞後經常出現的列上
  3. 連接配接條件的列上
  4. NULL不是适合建立索引
  5. 列上的資料非常局限

    建立索引

    SQL> create table emp as select from dmhr.employee;

    SQL> select index_name from dba_indexes where table_name='EMP';

    二級索引

    SQL> create index ind_emp on emp (employee_id) tablespace main;

    SQL> explain select from emp where employee_id<100;

    使用索引

    注意:表或者資料庫的統計資訊是不是最新的。

    更新統計資訊:

    dbms_stats

    begin dbms_stats.gather_table_stats('SYSDBA','EMP');

    end;

    /

    維護索引

    重建

    SQL> alter index ind_emp rebuild;

    SQL> alter index ind_emp rebuild online;

    SQL> drop index ind_emp;

    注意:一般在業務低谷去執行。

目的:防止誤操作,防止軟硬體故障,自然災害

方法:第三方工具,資料庫的備份指令,叢集

方式:實體備份,邏輯備份

實體備份:

脫機備份

資料庫關閉

[dmdba@localhost ~]$ /etc/rc.d/init.d/DmServiceDMSERVER stop

Dmap服務是打開

[dmdba@localhost ~]$ /etc/rc.d/init.d/DmAPService start

利用控制台做備份和還原

注意:先做還原,在做恢複。

聯機備份

資料庫是打開

[dmdba@localhost 20200109]$ /etc/rc.d/init.d/DmServiceDMSERVER status

[dmdba@localhost 20200109]$ /etc/rc.d/init.d/DmAPService status

資料是歸檔模式

SQL> select arch_mode from v$database;

打開資料庫歸檔:

資料庫到配置模式:SQL> alter database mount;

配置歸檔檔案:

SQL> alter database add archivelog 'dest=/dm7/arch,type=local,file_size=64,space_limit=0';

打開歸檔配置:

SQL> alter database archivelog;

打開資料庫:

備份和還原

備份資料庫,表空間,表,歸檔

備份資料庫:

SQL> backup database backupset '/dm7/backup/20200109';

表空間:(system,roll不能單獨備份)

SQL> backup tablespace dmhr backupset '/dm7/backup/dmhr_full';

備份表:

SQL> backup table dmhr.city backupset '/dm7/backup/city_bak';

備份歸檔:

SQL> backup archivelog backupset '/dm7/backup/arch_bak';

案例1:假設dmhr的表空間損壞?

SQL> alter tablespace dmhr offline;

SQL> restore tablespace dmhr from backupset '/dm7/backup/dmhr_full/';

SQL> alter tablespace dmhr online;

案例2:假設整個資料庫損壞?

利用達夢控制台工具

邏輯備份:(打開)

dexp dimp

備份整個資料庫,備份使用者,備份模式,備份表

[dmdba@localhost 20200109]$ dexp sysdba/SYSDBA file=/dm7/backup/emp.dmp tables=emp

[dmdba@localhost 20200109]$ dimp sysdba/SYSDBA file=/dm7/backup/emp.dmp tables=emp

定期制定某項任務

  1. 定期做備份
  2. 定期執行腳本
  3. 定期收集統計資訊
  4. 做遷移等

    配置作業的步驟:

  5. 初始代理環境(生成一個sysjob的模式)
  6. 打開作業
  7. 配置步驟
  8. 配置排程
  9. 送出作業

    案例1:每周三晚上23:00對資料庫做完全備份。

    call SP_CREATE_JOB('full_bak',1,0,'',0,0,'',0,'');

    call SP_JOB_CONFIG_START('full_bak');

    call SP_ADD_JOB_STEP('full_bak', 'f1', 6, '01000000/dm7/backup/bak', 1, 2, 0, 0, NULL, 0);

    call SP_ADD_JOB_SCHEDULE('full_bak', 'f2', 1, 2, 1, 8, 0, '23:00:00', NULL, '2020-01-09 11:03:08', NULL, '');

    call SP_JOB_CONFIG_COMMIT('full_bak');

select from "SYSJOB"."SYSJOBS";

select from "SYSJOB"."SYSJOBSTEPS";

select from "SYSJOB"."SYSJOBSCHEDULES";

select from "SYSJOB"."SYSJOBHISTORIES";

案例2:周一,周二,周四到周日做增量備份(23:00)

call SP_CREATE_JOB('inc_bak',1,0,'',0,0,'',0,'');

call SP_JOB_CONFIG_START('inc_bak');

call SP_ADD_JOB_STEP('inc_bak', 'i1', 6, '11000000/dm7/backup|/dm7/backup', 1, 2, 0, 0, NULL, 0);

call SP_ADD_JOB_SCHEDULE('inc_bak', 'i2', 1, 2, 1, 119, 0, '23:00:00', NULL, '2020-01-09 11:10:14', NULL, '');

call SP_JOB_CONFIG_COMMIT('inc_bak');

達夢支援的語言:C C++ JAVA PHP…