要麼全部成功,要麼全部失敗.
事務和鎖:
當執行事務操作時(dml語句),Oracle會在被作用的表上加鎖,防止其他用戶改變表的結構,
savepoint a1;//保存點
rollback to a1;//回滾
rollback;//取消全部事務
只讀事務:
只讀事務是指只允許執行 查詢的操作,而不允許執行任何dml(增加,修改,刪除)操作的事務,使用只讀事務可以確保用戶只能取得某時間點的數據.
假定機票代售點每天18點開始統計今天的銷售情況,這嗜好可以使用只讀事務,在設置了只讀事務後,盡管其他會話可能 會提交新的事物
,但是只讀事務將不會取得最新的數據的編號,從而可以保證取得特定時間點的數據信息.
set transaction ready only;
sql函數的使用:
lower(char)轉換成小寫
upper(char)大寫
length(char):返回長度
substr(char,m,n):取字符串的子串(從m開始,n個長度)1開始
例子:||連接 ,union連接結果
select upper(substr(ename,1,1))|| lower(substr(ename,2,length(ename)-1)) from emp ;
字符函數:
replace(char1,search_string,replace_string);
instr(char1,char2,[,n[,m]])取子串在字符串中的位置
數學函數:
round(n,[m])四捨五入 round(sal,-m),如果為負數,這四捨五入到小數點前面m位,round(220.0,-2)=>200
trunc(n,[m])截取數字trunc(comm,1)截取小數點後面1位,不去管小數點1位後的
mod(m,n) / 取余 mod(10,3)=>1
floor(n):返回小於或等於n的最大整數
ceil(n):返回大於或是等於n的最小整數
dual表:在做Oracle測試的時候,可以使用dual表,虛擬表.
日期函數:
Oracle默認日期函數dd-mm-yy 即12-7月-78
sysdate:該函數返回當前系統日
add_months(日期,m):加幾個月
last_day(d):返回指定日期所在月的最後一天.
轉換函數:
隱形的轉換.並不適合所有的情況.
to_char :日期顯示時分秒.to_char(日期,"yyyy-mm-dd hh24:mi:ss")
顯示貨幣to_char(sal,'L99999.99');
9 顯示數字.並忽略前面0
0 顯示數字,如位數不足,則用0補齊
. 在指定位置顯示小數點
, 在指定位置顯示逗號
$ 在數字前加美元符
L 在數字前加本地貨幣符號
C 在數字前面加國際貨幣符號
G 在指定位置顯示組分隔符
D 在指定位置顯示小數點符號(.)
系統函數:
查詢你在使用哪個數據庫?
language語言
session_user:哪個用戶
db_name:數據庫名
current_schema:當前方案名(一個用戶對一個方案)
select sys_context('userenv','db_name') from dual;注釋:userenv不變.
方案的方式來組織數據對象.裡面放存儲過程,表,視圖,觸發器,角色.
網頁調優一下,排到google第一名了.
管理數據庫的用戶主要是sys和system
區別:(1)存儲的數據的重要性不同.
sys用戶擁有dba(數據庫管理員),sysdba(系統管理員),sysoper(系統操作員)角色或權限,是Oracle權限最高的用戶(數據字典基表,動態視圖)
system:用於存放次一級的內部數據,如Oracle的一些特性或工具管理信息,system用戶擁有dba,sysdba角色或系統權限.
(2)權限的不同
sys用戶必須以as sysdba/sysoper登錄,不能以normal用戶登錄.
conn sys/yuyang as sysdba;
system如果正常登錄,他其實就是普通的dba用戶,但是如果以as sydba登錄,其結果實際上就是
它作為sys用戶登錄,從登陸信息裡我們可以看出來.
conn system/yuyang as sysdba;相當於sys
dba權限:
連起動和關閉數據庫權限都沒有
數據庫管理員
1.管理初始化參數
show parameter;
***數據庫邏輯備份與恢復**
導出:
導出具體分為:導出表,導出方案,導出數據庫三種方式.
導出使用exp命令完成的:
userid:用於指定執行導出操作的用戶名,口令,連接字符串
tables:用於指定執行導出操作的表
owner:用於指定執行導出操作的[方案].
full=y;用於指定執行導出操作的[數據庫].
inctype:用於指定執行導出操作的[增量類型]
rows:用於指定導出操作[是否要導出表中的數據]
file:用於指定導出[文件名]
=============== a.導出表:
(在導入和導出的時候,要到Oracle目錄的bin下C:\Java\Oracle\product\10.2.0\db_1\bin)
(1)導出自己的表
exp userid=scott/yuyang@orcl talbes=(emp) file=d:\1.dmp;
(2)導出其他方案的表(需要dba權限或是exp_full_database的權限)
exp userid=scott/yuyang@orcl talbes=(scott.emp) file=d:\1.dmp;
====================b.導出表
(3)導出表單的結構
exp userid=scott/yuyang@orcl tables=(emp) file=d:\1.dmp rows=n;
(4)使用直接導出方式
exp userid=scott/yuyang@orcl talbes=(emp) file=d:\1.dmp direct=y
這種方式比默認導出速度要快,當數據量大時,可以考慮使用這樣的方法
這時候需要數據庫的字符串要與客戶端字符集完全一致.否則會報錯
c.導出數據庫
exp userid=system/yuyang@orcl full=y inctype=complete file=d:\x.dmp;
====================c.導出方案(還是在bin目錄下cmd)
(1)導出自己的方案
exp scott/yuyang@orcl owner=(emp) file=d:\1.dmp ;
(2)導出其他方案
exp userid=system/yuyang@orcl owner=(system,scott) file=d:\system.dmp ;
-----------------------------------導入數據-------------------------------
導入:
導入也分三種導入表,導入方案,導入數據庫
...userid,tables,file,full=y;inctype,rows
formuser:用於指定源用戶.
touser:用於指定目標用戶
ignore:如果表存在,則只導入數據
a.導入表
1.導入自己的表
imp userid=scott/yuyang@orcl tables=(emp) file=d:\x.dmp;
2.導入其他用戶的表(dba或imp_fulll_database)
imp userid=scott/yuyang@orcl table=(emp) file=d:\xx.dmp touser=scott
3.導入表的結構(導入表結構,不導入數據)
imp userid=scott/yuyang table=(emp) file=d:\xx.dmp rows=n;
4.導入數據
如果是對象,(比如表)已經存在可以只導入表的數據
imp userid=soctt/yuyang@orcl tables=(emp) file=d:\xxx.dmp ignore=y;
b.導入方案
導入一個或多個方案,如果要導入其他方案,該球該用戶具有dba的權限,或是imp_full_database
(1)導入自身的方案
imp userid=scott/yuyang file=d:\xx.dmp;
(2)導入其他方案(要求該用戶具有dba的權限)
imp userid=system/yuyang file=d:\xx.dmp formuser=system touser=scott
c.導入數據庫
導入所有對象結構和數據
imp userid=system/yuyang full=y file=d:\xx.dmp;
數據字典:
是Oracle數據庫中最重要部分,它提供了數據庫一下系統信息
動態性能視圖記載了例程啟動過後的相關信息
數據字典,它是只讀表和視圖的集合,數據字典的所有為sys用戶
用戶只能在數據字典中執行查詢操作,而維護和修改是由系統完成.
數據字典視圖:user_xxx,all_xxx,dba_xxx三種類型
user_tables:當前用戶所擁有的表
all_tables:可以訪問當前用戶的表,也可以訪問其他方案的表
dba_tables:所有方案擁有的數據庫表,但是查詢這種數據庫字典視圖,要求用戶必須是dba角色,或是select any talbe系統權限
問題:
Oracle擁有多少個角色?
select * from dba_roles;
一個角色擁有多少個權限?
A.查詢系統權限
select * from dba_sys_privs where grantee='CONNECT';
另外:
select * from role_sys_privs where role='CONNECT';
B.查詢對象查詢
select * from dba_tab_privs where grantee='CONNECT';
//查詢Oracle中素有的系統權限,一般是dba
select * from system_privilege_map order by name;
//查詢Oracle中所有的角色,一般是dba
select * from dba_roles;
//查詢orale中所有的對象權限,一般是dba
select distinct privilege from dba_tab_privs;
//查詢數據庫的表空間
select tablespace_name from dba_tablespaces;
用戶名,權限,角色
在建立用戶時,oracle會把用戶的信息存放到數據字典中,當給用戶授予權限或是角色是,Oracle會
將權限和角色的信息存放到數據字典.通過查詢dba_user可以顯示所有書庫用戶的詳細信息
通過查詢數據字典dba_sys_privs,可以顯示用戶所具有的系統權限
通過查詢數據字典dba_tab_privs,可以顯示用戶具有的對象權限
通過查詢數據字典dba_col_privs,可以顯示用戶具有的列權限
通過查詢數據字典dba_role_privs可以顯示用戶所具有的角色
顯示當前用戶可以訪問的所有數據字典視圖
select * from dict where comments like '%grant%';
顯示當前數據庫的全稱
select * from global_name;
數據字典記錄有Oracle數據庫的所有系統信息,通過查詢數據庫字典可以得到以下系統信息
(1)對象定義信息
(2)對象占用空間大小
(3)列信息
(4)約束信息
可以使用pl/sql developer工具查看
動態性能視圖用於記錄當前例程的活動信息
當啟動Oracle server時,系統會建立動態性能視圖.停止時,刪除動態性能視圖
管理表空間和數據文件
介紹:
表空間是數據庫的邏輯組成部分,從物理上講,數據庫數據存放在數據文件中,從邏輯上講
數據庫則是存放在表空間中,表空間是由一個或多個數據文件組成.
為什麼要有表空間?
1.控制數據庫占用的磁盤空間
2.dba可以將不同的數據類型部署到不同的位置,這樣有利於提高i/o性能,同時利於備份,和恢復等管理操作.
Oracle中邏輯結構包括表空間,段,區,塊.
建立表空間
create tabspace的系統權限,和dba來執行
create tablespace data01(表空間名) datafile 'd:\sp001.dbf' size 20m uniform size 128k;
說明:執行完上述命令後,會建立名稱為data01的表空間,並為該表空間建立名稱為data01.dbf的數據文件,區的大小為128k
使用數據表空間
create table mypart(deptno number(4),dname varchar2(14),loc varchar2(13)) tablespace data001