达梦数据库DCA
達(dá)夢數(shù)據(jù)庫
DMSQL
DML(數(shù)據(jù)庫管理):select、insert、update、delete
DDL(數(shù)據(jù)庫定義):create drop alter table truncate DCL(權(quán)限控制):grant、revoke
TCL(事務(wù)控制):commit roll back
簡單查詢
語法
Select () from ();
單列查詢
查詢員工表的姓名
SQL> select employee_name from dmhr.employee;
多列查詢
查詢員工表的姓名,部門編號,工資
select employee_name,department_id,salary from dmhr.employee;
查詢所有列
select * from dmhr.employee;
對列起別名
查詢員工的姓名和工資
select employee_name,salary as gz from dmhr.employee; select employee_name,salary gz from dmhr.employee;
連接||
查詢“xx的工資xx”
select employee_name||‘的工資是:’||salary from dmhr.employee;
去重復(fù) distinct(隱藏排序)
查詢部門編號
select distinct department_id from dmhr.employee
表達(dá)式: salary+1000
為所有人工資加 1000
select employee_name,salary,salary+1000 as total from dmhr.employee;
過濾查詢
語法
Select () from () where ()
比較運(yùn)算符、邏輯運(yùn)算、in、is null/is not null,between*** and,like
比較運(yùn)算符:= > >= < <= <> !=
Select employee_name,salary from dmhr.employee where employee_name=‘馬學(xué)銘’; Select employee_name,salary from dmhr.employee where salary>=30000;
邏輯運(yùn)算符:and or not
select employee_name,department_id,salary from dmhr.employee where department_id=101
and salary>=10000;
select employee_name,department_id,salary from dmhr.employee where department_id=103
or salary>=25000;
模糊查詢:like % _
%匹配 0 個或多個字符
Select employee_name,salary from dmhr.employee where employee_name like ‘李%’;
匹配 1 個字符
Select employee_name,salary from dmhr.employee where employee_name like '李’;
IN
select employee_name,department_id from dmhr.employee where department_id in (101,102);
Is null/is not null null 為空,不等于 0
select employee_name,job_id from dmhr.employee where job_id is null;
Between… and …
select employee_name,department_id,salary from dmhr.employee where salary between 10000 and 20000;
排序
升序 asc
select employee_name,salary from dmhr.employee order by salary asc;
降序 desc
select employee_name,salary from dmhr.employee order by salary desc;
DM8體系結(jié)構(gòu)
DMSERVER:C/S架構(gòu),由客戶端+服務(wù)器構(gòu)成數(shù)據(jù)庫=數(shù)據(jù)庫文件+實例
數(shù)據(jù)庫文件:配置文件、控制文件、數(shù)據(jù)文件、重做日志文件、歸檔日志文件、跟蹤日志文件、 備份文件
實例:一組進(jìn)程/線程+共享內(nèi)存實例又分為單實例和集群(dsc)
單實例就是一個實例管理一個數(shù)據(jù)庫,dsc是多個實例管理一個數(shù)據(jù)庫,類似于oracle rac。
分組函數(shù)
Count
max
min
avg
sum
語法:
Select () from () where () group by () having ();
除了聚合函數(shù)不用跟在 group by 后面,其他 select 列必須要跟在 group by 后面,having 是對 group by 的進(jìn)一步過濾,不能單獨(dú)使用。
求部門工資和大于 10 萬的部門
select department_id,sum (salary) from dmhr.employee group by department_id
having sum (salary) >100000;
多表連接查詢
內(nèi)連接
結(jié)果集只顯示滿足條件的記錄自然連接
查詢不需要指定連接列,根據(jù)列名自己過濾,兩個表連接的列名和數(shù)據(jù)類型要一致。select employee_name,department_id,department_name from dmhr.employee natural join dmhr.department;
交叉連接(笛卡集)
select count() from dmhr.employee;–856
select count() from dmhr.department;–46 39376
select count() from dmhr.employee cross join dmhr.department; select count() from dmhr.employee,dmhr.department;
USING
在滿足多個連接列時,可以指定一個列做連接,連接的列前面不能加表名或者是前綴。select employee_name,department_name,department_id from dmhr.employee join dmhr.department
using (department_id);
ON
select a.city_name,b.street_address from dmhr.city a join dmhr.locationb on a.city_id=b.city_id
Hash join
可以通過 hint 強(qiáng)制走 hash join
優(yōu)化器 CBO 根據(jù)小表的連接列生成 hash 值,根據(jù) hash 值去連接大表,掃描大表
select e.employee_name,d.department_name from dmhr.employee e inner hash join dmhr.department d
on e.department_id=d.department_id;
外連接
結(jié)果集除了顯示滿足條件的記錄,不滿足的也顯示,用 null 代替左外連接 left join
把 left join 左邊的全部顯示出來,右邊的只顯示滿足條件的記錄,不滿足條件的用 null 代替
select a.city_name,b.street_address from dmhr.city a left join dmhr.location b on a.city_id=b.city_id;
右外連接 right join
把 right join 右邊的全部顯示出來,左邊的只顯示滿足條件的記錄,不滿足條件的用 null 代替
select a.city_name,b.street_address from dmhr.city a right join dmhr.locationb on a.city_id=b.city_id;
全外連接 full join
左外+右外
select a.city_name,b.street_address from dmhr.city a full join dmhr.location b on a.city_id=b.city_id;
子查詢
當(dāng)一個查詢是另一個查詢的條件時,就叫子查詢。子查詢先運(yùn)行,子查詢的結(jié)果是主查詢的 條件。子查詢可以嵌套子查詢,子查詢可以做為臨時表做連接。
單行子查詢
一次只返回一條記錄
select employee_name,department_id from dmhr.employee where EMPLOYEE.DEPARTMENT_ID=(select EMPLOYEE.DEPARTMENT_ID from dmhr.employee
where employee_name=‘馬學(xué)銘’);
多行子查詢
一次返回多條記錄
select employee_name,department_id,salary from dmhr.employee where salary > all(select salary from dmhr.employee
where department_id=102);
一.DM8存儲結(jié)構(gòu)
1.物理結(jié)構(gòu)
配置文件
以.ini結(jié)尾的文件:
dmarch_example.ini
dmdcr_cfg_example.ini
dmdcr_example.ini
dm.ini
dminit_example.ini
dmmal_example.ini
dmmonitor_example.ini
dmmpp_example.ini
dmtimer_example.ini
dmwatcher_example.ini
sqllog_example.ini
sqllog.ini
dm.ini滿足oracle pfile+spfile文件可以查看視圖v d m i n i s e l e c t p a r a n a m e , p a r a v a l u e , p a r a t y p e f r o m v dm_ini select para_name,para_value,para_type from v dmi?niselectparan?ame,parav?alue,parat?ypefromvdm_ini ; Sys:系統(tǒng)級,影響全局
Session:會話級,針對當(dāng)前會話有效Readonly:只讀,只能手動編輯參數(shù)文件Infile:靜態(tài)參數(shù),實例重啟才能生效。
修改參數(shù)有以下幾種方法:
1)Vi dm.ini 修改完成之后,無論是動態(tài)還是靜態(tài)參數(shù),都需要重啟數(shù)據(jù)服務(wù);
2)Sp_set_para_value(參數(shù)類型,’參數(shù)名’,參數(shù)值) ;
1等于both,即改即生效,會同時改變內(nèi)存中和參數(shù)中的值。
2等于infile,只改變參數(shù)中的值,需要重啟才能生效。 修改數(shù)據(jù)庫兼容模式COMPATIBLE_MODE
是否兼容其他數(shù)據(jù)庫模式。
0:不兼容,
1:兼容SQL92標(biāo)準(zhǔn),
2:兼容ORACLE,
3:兼容MS SQL SERVER,
4:兼容MYSQL
修改數(shù)據(jù)庫為兼容oracle的模式
sp_set_para_value(2,‘COMPATIBLE_MODE’,2);
3)通過console工具修改參數(shù),無論是動態(tài)還是靜態(tài)參數(shù),都需要重啟數(shù)據(jù)服務(wù),考試時通過此方法修改兼容性參數(shù);
4)Alter system修改
數(shù)據(jù)文件
以.DBF結(jié)尾的文件
MAIN.DBF
ROLL.DBF
SYSTEM.DBF
TEMP.DBF
視圖:dba_data_files;
SQL>select file_name,status from dba_data_files;
控制文件
以.ctl結(jié)尾的文件
控制文件中記錄了數(shù)據(jù)庫的模式,數(shù)據(jù)庫名,oguid,上一次啟動時間,啟動次數(shù),數(shù)據(jù)文件 的版本。
SQL> select para_name,para_value from v d m i n i w h e r e p a r a n a m e l i k e ′ 查 看 控 制 文 件 內(nèi) 容 工 具 d m c t l c v t 查 看 幫 助 [ d m d b a @ l o c a l h o s t b i n ] dm_ini where para_name like '%PATH%'; 查看控制文件內(nèi)容工具dmctlcvt 查看幫助 [dmdba@localhost bin] dmi?niwhereparan?amelike′查看控制文件內(nèi)容工具dmctlcvt查看幫助[dmdba@localhostbin] ./dmctlcvt help
將控制文件轉(zhuǎn)換為文本文件
[dmdba@localhost bin]$ ./dmctlcvt type=1 src=/dm8/data/DAMENG/dm.ctl dest=/tmp/dmctl.txt
重做日志文件
重做日志文件記錄的是數(shù)據(jù)庫發(fā)生變化(insert,update,delete,alter,create)的信息。達(dá)夢沒有日志組,至少需要兩個重做日志文件。重做日志的特點是循環(huán)寫,可覆蓋。重做日志文件可以 重命名、擴(kuò)展大小,也可以添加。重做日志文件不能被刪除。重做日志文件頻繁切換會對數(shù)據(jù) 庫產(chǎn)生比較大的影響,考慮增加日志文件,或者是擴(kuò)展文件大小。
視圖:v$rologfile
查詢重做日志文件
SQL>select file_id,path,rlog_size from v$rlogfile;
新增重做日志文件
SQL> alter database add logfile ‘/dm8/data/DAMENG/DAMENG03.log’ size 300;
resize重做日志文件大小
SQL> alter database resize logfile ‘/dm8/data/DAMENG/DAMENG01.log’ to 300; SQL> alter database resize logfile ‘/dm8/data/DAMENG/DAMENG02.log’ to 300;
遷移重做日志文件
alter database mount;
alter database rename logfile ‘/dm8/data/DAMENG/DAMENG01.log’ to ‘/dm8/DAMENG01.log’; alter database open;
歸檔日志文件
就是重做日志文件的副本。用來做數(shù)據(jù)庫備份恢復(fù),數(shù)據(jù)庫守護(hù)集群、讀寫分離集群的同步。 開啟歸檔:
CLI:
SQL> alter database open;
操作已執(zhí)行
已用時間: 00:00:01.781. 執(zhí)行號:0.
SQL> alter database mount; SQL> alter database archivelog;
SQL> alter database add archivelog ‘type=local,dest=/dm8/data/arch,file_size=100,space_limit=0’; SQL> select name,arch_mode from v$database;
行號 NAME ARCH_MODE
1 DAMENG Y
SQL> alter database open; GUI:
將數(shù)據(jù)庫啟動到mount狀態(tài)
備份文件
以.bak為擴(kuò)展名的文件。備份文件就是數(shù)據(jù)庫在某一個時間點的副本。
跟蹤日志文件
跟蹤日志文件記錄的是各會話執(zhí)行的sql信息。還記錄了數(shù)據(jù)庫錯誤信息、性能相關(guān)問題。 通過參數(shù)SVR_LOG,默認(rèn)值為0,關(guān)閉。
2.邏輯結(jié)構(gòu)
頁:默認(rèn)為8k,支持4k,8k,16k,32k。是數(shù)據(jù)庫最小的分配單元。頁對應(yīng)的是操作系統(tǒng)塊。頁是由頁頭信息、數(shù)據(jù)、空閑空間、行偏移數(shù)組組成。頁頭信息包含了頁類型、頁地址,行偏 移數(shù)組記錄的數(shù)據(jù)和空閑空間的比例(filefactor)。
簇:
簇:簇是一組連續(xù)的頁組成,默認(rèn)為16個頁,支持16、32個頁。一個簇總是在一個數(shù)據(jù)文件 中。
段:是簇的上級邏輯單元,段是可以跨多個數(shù)據(jù)文件的。段又分為數(shù)據(jù)段(表、索引),臨時 段,回滾段。
dba_segments
表空間:可以擁有一個或多個數(shù)據(jù)文件,一個數(shù)據(jù)文件只能屬于一個表空間。
二.內(nèi)存結(jié)構(gòu)
共享內(nèi)存池是DMSERVER啟動時從操作系統(tǒng)申請的一大片內(nèi)存,實例在運(yùn)行中可以向共享內(nèi)存 池申請或者釋放內(nèi)存。
MAX_OS_MEMORY:可以使用物理內(nèi)存的百分比MEMORY_POOL:公共池,減少系統(tǒng)調(diào)用MEMORY_TARGET:為0表示不限制內(nèi)存使用。
運(yùn)行時內(nèi)存池:給特定模塊單獨(dú)使用,例如會話內(nèi)存池和虛擬機(jī)內(nèi)存池。 數(shù)據(jù)緩沖區(qū)
緩存的是數(shù)據(jù)頁(空閑、干凈、臟、正在使用),使用數(shù)據(jù)緩沖區(qū)可以提高數(shù)據(jù)庫的讀寫性能。 數(shù)據(jù)庫緩沖區(qū)設(shè)置的太小會造成性能問題,設(shè)置的過大,又會引起資源浪費(fèi)。
參數(shù):buffer
參考值:oltp物理內(nèi)存的40%-60%
Olap物理內(nèi)存的60%-80%
數(shù)據(jù)緩沖區(qū)有4種類型:
Normal、keep:可以手動調(diào)整。默認(rèn)為normal。 達(dá)夢緩存的是表空間,oracle魂村的是表。
Fast、 recycle:系統(tǒng)自動管理。Recycle緩存的是臨時數(shù)據(jù)。
讀多頁:全表掃描比較多
Multi_page_get_num
日志緩沖區(qū)
存放的是重做日志信息,單位是頁,避免直接對磁盤進(jìn)行操作,提升數(shù)據(jù)庫的性能。
重做日志的刷盤機(jī)制:每三秒,事務(wù)提交。字典緩沖區(qū)
字典緩沖區(qū)主要緩存的是數(shù)據(jù)字典的信息,包含表,列的信息。數(shù)據(jù)庫中存在大量表或者表分 區(qū)時,應(yīng)該要調(diào)整字典緩沖區(qū)。
SQL緩沖區(qū)
用來存放執(zhí)行計劃,sql結(jié)果集、包。對于sql類別比較多,應(yīng)該調(diào)整sql緩沖區(qū)。
排序區(qū)
排序區(qū)就是sql排序需要的內(nèi)存空間,在內(nèi)存中無法完成將轉(zhuǎn)移到磁盤上(臨時表空間)
三.線程結(jié)構(gòu)
監(jiān)聽線程
檢測來自客戶端的連接請求,把任務(wù)交給工作線程。
IO線程
將數(shù)據(jù)頁從磁盤讀入數(shù)據(jù)緩沖區(qū)中,將數(shù)據(jù)緩沖區(qū)中的臟頁在一定機(jī)制(緩沖區(qū)滿,數(shù)據(jù)庫關(guān) 閉,執(zhí)行檢查點)下刷到磁盤中。
日志刷新線程
將重做日志緩沖區(qū)中的記錄在一定機(jī)制下刷新(事務(wù)提交,執(zhí)行檢查點,每3秒,緩沖區(qū)滿, 數(shù)據(jù)庫關(guān)閉)到重做日志文件。
日志歸檔線程
將重做日志文件在切換時拷貝到歸檔路徑下。
日志重做線程
主要用于數(shù)據(jù)庫恢復(fù)。
調(diào)度線程
檢查系統(tǒng)級的時間觸發(fā)器;
清理SQL 緩存、計劃緩存中失效的項,或者超出緩存限制后淘汰不常用的緩存項; 動態(tài)緩沖區(qū)檢查。根據(jù)需要動態(tài)擴(kuò)展或動態(tài)收縮系統(tǒng)緩沖池;
自動執(zhí)行檢查點; 會話超時檢測;
必要時執(zhí)行數(shù)據(jù)更新頁刷盤; 喚醒等待的工作線程;
一個SQL執(zhí)行過程
A客戶端發(fā)起連接請求(監(jiān)聽線程、工作線程) B語法分析(字典緩沖區(qū)、SQL緩沖區(qū))
C語義分析(字典緩沖區(qū)) D權(quán)限分析(字典緩沖區(qū))
E查看數(shù)據(jù)庫頁是否在buffer中,在內(nèi)存中就會產(chǎn)生邏輯讀,不在就會產(chǎn)生物理讀(數(shù)據(jù)緩沖區(qū), sql緩沖區(qū),IO線程)
F數(shù)據(jù)發(fā)生變更(日志緩沖區(qū)、日志刷新線程,數(shù)據(jù)緩沖區(qū),IO線程,工作線程)
G是否有可用的執(zhí)行計劃,有就按執(zhí)行計劃執(zhí)行,沒有則生成執(zhí)行計劃,執(zhí)行sql,結(jié)果集返回 客戶端。(字典緩沖區(qū)、排序區(qū)、hash區(qū)、工作線程、IO線程、sql緩沖區(qū))
表空間
介紹達(dá)夢數(shù)據(jù)庫表空間:
SYSTEM:系統(tǒng)表空間,存放數(shù)據(jù)字典信息、動態(tài)性能視圖ROLL:回滾表空間,存放數(shù)據(jù)庫運(yùn)行中的回滾記錄TEMP:臨時表空間,做排序
MAIN:數(shù)據(jù)庫默認(rèn)表空間,存放的是用戶的數(shù)據(jù)。創(chuàng)建用戶或者數(shù)據(jù)庫對象時不指定表空間, 就放在該表空間中。
HMAIN:HUGE表空間
創(chuàng)建表空間(也可以通過manager工具進(jìn)行創(chuàng)建)
案例1:創(chuàng)建一個初始大小為20m的表空間。
SQL> create tablespace test datafile ‘/dm8/data/DAMENG/TEST01.DBF’ size 30m; create tablespace test datafile ‘/dm8/data/DAMENG/TEST01.DBF’ size 30m;
SQL> create tablespace test datafile ‘/dm8/data/DAMENG/TEST01.DBF’ size 30; create tablespace test datafile ‘/dm8/data/DAMENG/TEST01.DBF’ size 30;
表空間數(shù)據(jù)文件初始化大小是4096*頁(8192)=32M
表空間不足
擴(kuò)展數(shù)據(jù)文件
alter tablespace “TEST” resize datafile ‘TEST01.DBF’ to 2000;
添加數(shù)據(jù)文件
alter tablespace “TEST” add datafile ‘/dm8/data/DAMENG/TEST02.DBF’ size 100 autoextend on next 1 maxsize 2000;
更換數(shù)據(jù)文件路徑
表空間脫機(jī)
Alter tablespace test offline;
更換路徑
SQL> alter tablespace test rename datafile ‘/dm8/data/DAMENG/TEST01.DBF’ to ‘/dm8/TEST01.DBF’;
表空間聯(lián)機(jī)
SQL> alter tablespace test online;
維護(hù)回滾表空間
alter tablespace “ROLL” add datafile ‘/dm8/data/DAMENG/ROLL02.DBF’ size 100 autoextend on next 1 maxsize 10240;
表空間刪除
Drop tablespace test;
用戶
企業(yè)版數(shù)據(jù)庫預(yù)定義的用戶:
Sys:不能登錄,存放的數(shù)據(jù)字典和視圖Sysdba:管理員
Sysauditor:審計員Syssso:安全員
安全版用戶:
在企業(yè)版基礎(chǔ)上,增加sysdbo——數(shù)據(jù)庫對象操作員
規(guī)劃用戶:
命名:以字母開頭,a-z,0-9,$#_,長度不超過128個字符 權(quán)限分配:系統(tǒng)權(quán)限、對象權(quán)限、角色
存儲:表空間
密碼策略:PWD_POLICY
設(shè)置系統(tǒng)默認(rèn)口令策略。
0: 無策略;
1: 禁止與用戶名相同;
2: 口令長度不小于9;
4: 至少包含一個大寫字母(A-Z);
8 :至少包含一個數(shù)字(0-9);
16:至少包含一個標(biāo)點符號(英文輸入法狀態(tài)下,除“和空格外的所有符號;若為其他數(shù)字,則表示 配置值的和,如3=1+2,表示同時啟用第1項和第2項策略。
當(dāng)COMPATIBLE_MODE=1時,PWD_POLICY的實際值均為0
3=2+1 6=2+4
例:將密碼策略設(shè)置為禁止與用戶名相同并且口令長度不小于9 SQL> sp_set_para_value(1,‘PWD_POLICY’,3);
權(quán)限
權(quán)限就是我能具體做哪些事情? 權(quán)限分為系統(tǒng)權(quán)限和對象權(quán)限
創(chuàng)建用戶
創(chuàng)建tbs用戶,用戶屬于tbs表空間,tbs用戶有建表和建視圖的權(quán)限。
1)創(chuàng)建tbs表空間
create tablespace “TBS” datafile ‘/dm8/data/DAMENG/TBS01.DBF’ size 32 CACHE = NORMAL;
2)創(chuàng)建tbs用戶
create user “TBS” identified by “Dameng123”
limit failed_login_attemps 3, password_lock_time 1, password_grace_time 10 default tablespace “TBS”;
grant “VTI” to “TBS”;
grant CREATE TABLE,CREATE VIEW to “TBS”;
修改用戶
TBS用戶可以查詢dmhr.employee 的字段employee_name,salary。
grant SELECT(“SALARY”) on “DMHR”.“EMPLOYEE” to “TBS”;
grant SELECT(“EMPLOYEE_NAME”) on “DMHR”.“EMPLOYEE” to “TBS”;
不能查看dmhr.employee.salary
不能對單個列的權(quán)限進(jìn)行撤回,權(quán)限撤回是針對表級。
revoke select on dmhr.employee from tbs;
修改用戶默認(rèn)表空間
alter user “TBS” default tablespace “TEST”;
鎖定用戶
Alter user tbs account lock;
解鎖用戶
Alter user tbs account unlock;
刪除用戶
Drop user test;
角色
角色是一組權(quán)限的集合,方便權(quán)限管理。角色是可以被授予給角色和用戶的。 創(chuàng)建角色
create role “R1”;
grant “PUBLIC”,“RESOURCE” to “R1”;
grant CREATE TABLE,CREATE VIEW,CREATE TRIGGER to “R1”;
grant SELECT(“EMPLOYEE_NAME”),UPDATE(“EMPLOYEE_NAME”) on “DMHR”.“EMPLOYEE” to “R1”;
授予角色給用戶grant “R1” to “TBS”; 撤回角色
revoke “R1” from “TBS”;
啟用角色
禁用角色
刪除角色
Drop role r1;
模式管理對象
模式就是一組數(shù)據(jù)庫對象的集合
模式對象:表、索引、視圖、觸發(fā)器、存儲過程、同義詞、包、序列 模式與用戶的關(guān)系:
一個用戶可以對應(yīng)多個模式,一個模式只能屬于一個用戶,創(chuàng)建用戶時會自動創(chuàng)建一個同名的模式。
模式
用sysdba用戶登錄,默認(rèn)就是在sysdba模式下。
創(chuàng)建模式
SQL> create schema abc;
切換模式
SQL> set schema abc;
模式存在,則不允許創(chuàng)建與模式同名的用戶。
刪除模式
SQL>drop schema abc;
表
系統(tǒng)表:數(shù)據(jù)庫自己創(chuàng)建和維護(hù)的表,存放的是數(shù)據(jù)庫信息 用戶表:自己創(chuàng)建的表,用戶的真實數(shù)據(jù)
DM支持表的類型:
索引組織表、堆表、外部表、分區(qū)表
DM默認(rèn)表的類型是索引組織表,oracle默認(rèn)表的類型是堆表
創(chuàng)建表
1)命名:以字母開頭,a-z,0-9,$#_
2)數(shù)據(jù)類型:int,number,date,char,varchar,clob,long,blob
3)存儲位置:表空間,建表時沒有指定表空間,就存在用戶默認(rèn)表空間中
4)約束類型:主鍵約束、非空約束、唯一約束、外鍵約束、檢查約束
非空約束:
SQL> create table test (id char(20) not null); SQL> insert into test values(null);
insert into test values(null);
DM數(shù)據(jù)庫執(zhí)行sql腳本start,oracle數(shù)據(jù)庫執(zhí)行sql腳本用
SQL> start /home/dmdba/test.sql
唯一約束;創(chuàng)建唯一約束會自動創(chuàng)建一個唯一索引,忽視空值,空不等于任何值。 查詢約束dba_constraints
查詢索引dba_constraints
SQL> create table test2 (id int unique,name varchar(20)); SQL> insert into test2 values(1,‘111’);
SQL> insert into test2 values(null,‘111’); SQL> insert into test2 values(null,‘111’); SQL> commit;
SQL> select * from test2;
SQL> insert into test2 values(1,‘111’);
主鍵約束:非空+唯一,一個表只能有一個主鍵,設(shè)計主鍵盡量避免業(yè)務(wù)邏輯的列
SQL> create table test3 (id int primary key);
外鍵約束:保證數(shù)據(jù)完整性
create table “SYSDBA”.“TEST4” (
“ID” INT
);
alter table “SYSDBA”.“TEST4” add constraint foreign key(“ID”) references “SYSDBA”.“TEST3”(“ID”);
SQL> insert into test4 values(1);
SQL> insert into test3 values(1); SQL> commit;
SQL> insert into test4 values(1); SQL> commit;
SQL> drop table test3; drop table test3;
SQL> drop table test4;
SQL> drop table test3;
檢查約束
SQL>create table test5 (id int check(id>5)); SQL> insert into test5 values(6);
SQL> insert into test5 values(5); insert into test5 values(5);
管理表
重命名表:
Alter table test2 rename test1;
添加列:
alter table “SYSDBA”.“TEST1” add column(“add” VARCHAR(50));
刪除列
alter table “SYSDBA”.“TEST1” drop column “add”;
管理約束
查看約束
select constraint_name,table_name,status from user_constraints;
啟用約束
Alter table test1 enable constraint CONS134218843;
禁用約束
Alter table test1 disable constraint CONS134218843;
刪除表:
drop table test1;
視圖
視圖就是一個查詢語句,一張?zhí)摂M表
DM視圖:簡單視圖、復(fù)雜視圖、物化視圖創(chuàng)建視圖的語法:
Create view () as select ***;
Create or replace view() as select ***;
創(chuàng)建視圖
create view view_emp as
select a.EMPLOYEE_ID,a.EMPLOYEE_NAME,a.DEPARTMENT_ID,a.SALARY
from dmhr.employee a
where a.DEPARTMENT_ID=105;
刪除視圖
drop view view_emp;
索引
索引是數(shù)據(jù)庫對象。
索引作用:加快查詢速度,對更新少量數(shù)據(jù)時,可以提高更新速度,insert時會有延遲。 數(shù)據(jù)庫會自動維護(hù)索引,索引會占用存儲空間的。
創(chuàng)建索引基本要求: 經(jīng)常查詢的列
Where條件中出現(xiàn)的列連接列
返回少量或小部分?jǐn)?shù)據(jù)
不合適建立索引: 列上有大量的重復(fù)值列上有大量的null
結(jié)果集返回大量的數(shù)據(jù)
創(chuàng)建索引
create index “IND_EMP” on “SYSDBA”.“EMP”(“EMPLOYEE_NAME”) storage(initial 1,next 1,minextents 1,on “DMHR”);
查看索引信息
User_indexes
查看sql執(zhí)行計劃
explain select * from emp where employee_name=‘a(chǎn)aa’;
**備份還原
完全備份:備份的是整個數(shù)據(jù)庫或者表空間的全部數(shù)據(jù)
增量備份:備份的是上一次全備或增備后,以后每次備份只需要備份修改過的數(shù)據(jù)頁 還原就是將某個時間點的數(shù)據(jù)庫副本拷貝到對應(yīng)的目錄下。
恢復(fù)就是在完成數(shù)據(jù)庫還原之后,應(yīng)用部分或者是全部歸檔日志。
物理備份
冷備:
冷備:不需要開啟歸檔,需要開啟DmAP服務(wù),需要關(guān)閉數(shù)據(jù)庫實例,針對整庫做備份
1、console工具備份
[dmdba@localhost bin]$ ./DmServiceDMSERVER stop
2、用dmrman工具備份,只支持冷備
[dmdba@localhost backup]$ cd /dm8/bin
[dmdba@localhost bin]$ ./dmrman dmrman V8
RMAN> backup database ‘/dm8/data/DAMENG/dm.ini’ backupset ‘/dm8/backup’;
熱備:
需要開啟歸檔,數(shù)據(jù)庫需要打開(open) 可以備份數(shù)據(jù)庫、表空間、表、歸檔日志
查看數(shù)據(jù)庫歸檔模式:
SQL> select name,arch_mode from v$database;
行號 NAME ARCH_MODE
1 DAMENG Y
用manager工具做熱備整庫備份
做增量備份(console工具)
表空間備份
表空間備份只能聯(lián)機(jī),還原只能脫機(jī)用manager工具
表備份
11.2物理還原
檢查備份集是否有效
./dmrman
check backupset ‘/dm8/backup’;
Console工具還原
恢復(fù)
更新DB_MAGIC
邏輯備份
備份的是數(shù)據(jù)庫對象
邏輯備份可以用來遷移和重組數(shù)據(jù)庫,是數(shù)據(jù)庫輔助型備份
dexp/dimp
四個級別導(dǎo)入導(dǎo)出:
庫級別
用戶
模式
表
查看幫助:
[dmdba@localhost bin]$ ./dexp help
[dmdba@localhost bin]$ ./dimp help
全庫導(dǎo)出:
[dmdba@localhost bin]$ ./dexp sysdba/Dameng123 file=full.dmp log=full.log directory=/dm8/backup full=y
用戶導(dǎo)出:(執(zhí)行用戶導(dǎo)入時,如果用戶不存在,要先創(chuàng)建用戶。)
[dmdba@localhost bin]$ ./dexp sysdba/Dameng123 file=dmhr.dmp log=dmhr.log directory=/dm8/backup owner=dmhr
導(dǎo)出表:
[dmdba@localhost bin]$ ./dexp sysdba/Dameng123 file=emp.dmp log=emp.log directory=/dm8/backup tables=emp
全庫導(dǎo)入:
[dmdba@localhost bin]$ ./dimp sysdba/Dameng123 file=full.dmp log=imp_full.log directory=/dm8/backup full=y
作業(yè)
manager工具下
DM8開發(fā) 配置ODBC
Linux配置odbc 用root配置 檢查gcc包
[root@localhost home]# rpm -qa|grep gcc
gcc-4.8.2-16.el7.ns7.03.x86_64
[root@localhost home]# tar -xvf unixODBC-2.3.0.tar.gz
[root@localhost home]# cd unixODBC-2.3.0/
[root@localhost unixODBC-2.3.0]# ./configure
[root@localhost unixODBC-2.3.0]# make && make install
[root@localhost unixODBC-2.3.0]# odbcinst -j
配置文件/usr/local/etc/odbcinst.ini
配置文件/usr/local/etc/odbc.ini
測試連接
用dmdba賬號
Isql dm8
總結(jié)
- 上一篇: java mocked,JMockit
- 下一篇: 实时日志/数据库采集处理,实时用户行为属