程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> ORACLE中事務處理

ORACLE中事務處理

編輯:Oracle數據庫基礎
事務:事務用於保證數據的一致性,它由一組相關的dml語句組成,該組的dml語句

 要麼全部成功,要麼全部失敗.

 事務和鎖:

 當執行事務操作時(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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved