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

Oracle知識整理筆記,oracle整理筆記

編輯:Oracle教程

Oracle知識整理筆記,oracle整理筆記


小編整理的一篇關於Oracle知識的學習筆記,希望對大家有幫助。

1.簡單對比一下SQL Server 和Oracle
  先給大家看一張我畫得圖:

  安裝完Sql Server後,我們打開、連接數據庫引擎後可以看到很多的數據庫有系統數據庫也有用戶數據庫。而Oracle安裝後,一個數據庫都對應一個服務,我們在使用前需要在計算機服務中開啟相應的服務,如圖中所示,服務開啟,用戶登錄後看到的是一個數據庫,一個數據庫中可以有表、視圖、存儲過程等數據對象。一個Oracle數據庫可以有多個用戶,用戶的權限不同,進入到數據庫中看到的數據對象也是不同的。

2.Oracle中基本的概念和關系
  我總結了一下Oracle中有5個必須要知道的概念:用戶、權限、角色、方案和數據對象。
用戶的概念大家都知道不用贅述;權限就是能不能做某一件事的證明;而角色可以看做是某些權限的集合體。在Oracle中權限有很多種,如果挨個給用戶授權會很麻煩,所以就把一些權限分配給一個角色,那麼給用戶授予這個角色就解決挨個授予權限的麻煩。方案這裡和用戶相對應。一個用戶,Oracle會默認給它一個方案,這個方案裡會存放數據對象。那麼數據對象又是什麼?一想便知,數據對象就是表、視圖、存儲過程等的總稱。他們之間的關系我用一張圖來說明。

  

 系統權限是用戶對數據庫的相關權限,比如:登錄。對象權限是用戶對其他用戶的數據對象的操作權限。比如:更新其他方案的表。看到這張圖不知道大家有沒有疑問:Oracle的權限有哪些?角色有哪些?我們怎麼操作這個數據庫呢?後面的博客會介紹這些。

3.Oracle的一種管理工具pl/sql Developer 
   pl/sql developer 是用於開發pl/sql塊的集成開發環境,它是一個獨立的產品,而不是oracle的一個附帶品。pl/sql是procedural language/sql是Oracle在標准sql語言上的擴展。pl/sql不僅允許嵌入sql語言,還可以定義變量和常量,允許使用例外處理各種錯誤,使得它的功能變得更強大。
pl/sql塊由三部分構成:定義部分、執行部分、例外處理部分。定義部分和例外部分可選。

Declear 
/* 定義部分-----定義變量,常量,游標,例外,復雜數據類型*/ 
Begin 
/*執行部分-----要執行的pl/sql語句和sql語句*/ 
Exception 
/*例外處理部分-----處理運行的各種錯誤*/ 
End; 
舉個最簡單的例子: 
Begin 
dbms_output.put_line('hello,world'); 
End; 

為什麼會出現pl/sql中文亂碼問題?
   前提是:本機沒有安裝Oracle,采用pl/sql遠程訪問Oracle數據庫。本機安裝了Oracle客戶端和pl/sql。
   服務器上的Oracle有一個字符設置,比如UTF-8或者簡體中文,若沒有手動修改那麼會有一個默認的。在本機上Oracle客戶端和pl/sql也需要字符設置.如果服務器和客戶端的字符編碼不一致,就會出現中文亂碼問題。所以,我們要做得就是修改他們使他們一致。(現在看來是如此簡單,當時怎麼會那麼糾結!)
   怎麼解決pl/sql中文亂碼問題?
   首先,我們要先知道服務器端的Oracle是什麼字符編碼。打開你的pl/sql,在命令窗口中輸入  select userenv('language') from dual;   就會先看到。如圖:

然後要做的就是設置本機的字符設置為 SIMPLIFIED CHINESE_CHINA.ZHS16GBK。辦法是設置環境變量。步驟:我的電腦-->右擊-->屬性-->環境變量-->系統變量-->把nls_lang修改成SIMPLIFIED CHINESE_CHINA.ZHS16GBK,然後需要重啟pl/sql。網上很多資料說做到這一步就可以解決問題了。但是我的亂碼問題還是解決不了。若你的問題也解決不了,請這樣做:打開你的注冊表找到這樣的目錄:找到:HKEY_LOCAL_MACHINE->SOFTWARE->ORACLE 中

設置右側NLS_LANG,將它的值也設置為SIMPLIFIED CHINESE_CHINA.ZHS16GBK。重啟pl/sql後,將已經添加進去的記錄刪除,重新添加一條再測試。以前添加的記錄很可能就是亂碼寫入的,看不到效果。

4、如何分配權限和角色
1).什麼是權限,什麼是角色?
   權限分為系統權限和對象權限。系統權限是指執行特定類型sql命令的的權利。比如用戶具有了create table的權限,可以在其方案中建表;當具有了create any table,可以在任何方案中建表。對象權限是指訪問其他方案的權利,用戶可以直接訪問自己方案的對象,但是如果要訪問別的方案的對象,則必須具有對象的權限。比如Scott用戶要訪問Jane.emp表(Jane方案,emp表),則必須在Jane.emp表上具有對象權限。
  角色是相關權限的命令集合,使用角色的目的主要是為了簡化權限的管理。
2).常用的權限和角色分類
  這裡我們只簡單介紹最常用的即可,若想了解可查閱幫助文檔也可通過查詢語句獲得。
  a.系統權限:關於數據庫連接(database link)、會話(session)、用戶(User)、表空間(tablespace)、角色(role)、數據對象(表、視圖、存儲過程)等這些操作的create、drop和alter。
  b.對象權限:insert --添加 、delete --刪除 (數據)、 Alter --修改(修改表結構) 、Update --修改(更新數據) 、Select --查詢 。也就是增刪改查四大類。
  c.角色分為預定義和自定義兩種。預定義是指Oracle所提供的角色,常用的包括:connect,resource,dba.
    dba角色具有所有的系統權限,默認的有dba角色的用戶是sys和system。 這兩個用戶可以將任何系統權限授予其他用戶。注意一點就是:dba角色沒有啟動關閉數據庫的權利.Connect角色具有一般開發人員需要的大部分權限,多數情況下,只要給用戶授權connect和resource角色就夠了。那麼connect和resource角色都有什麼權限呢?這裡沒有必要一一列舉。我們可通過查詢獲得。那麼如何查詢呢?
3).查詢
如何查詢Oracle有多少種角色? select * from dba_roles;
如何查詢Oracle有多少種系統權限和對象權限? select * from system_privilege_map order by name; select  distinct privilege  from dba_tab_privs;
如何查看某個用戶有什麼樣的角色?  select * from dba_role_privs where grantee='用戶名';
如何查看一個角色包括什麼系統權限和對象權限? select * from dba_sys_privs where grantee='角色名'; select * from dba_tab_privs where grantee='角色名';
4).授予和回收
   這部分知識在學習過程中是按一條一條規則來的,學完覺得特別亂。我把這裡的東西按照一個正常的操作過程編成了一條操作線。感覺知識比較清晰了。
   a.現在我要使用Oracle,必須要有用戶才行。Oracle默認創建兩個用戶sys和system.我們可以使用這兩個用戶登錄上去,建立自己的用戶,如:create user Ken identified by ken.現在我們使用Ken來登錄會給出錯誤信息。為什麼?因為Ken用戶沒有登錄的權限。現在我們需要給Ken授權:grant create session  to Ken  with admin option.這樣Ken用戶登錄就ok了。那麼with admin option能起到什麼作用?這說明被授權的用戶或者是角色還可以將該系統權限給其他用戶或者角色。
    回收系統權限操作:依然采用上面的例子:回收登錄權限:revoke  create session  from Ken;  系統權限的回收不是級聯的。比如:Ken又將登錄權限授予Jane,那麼回收Ken的權限後,Jane依然可以登錄。
    b.對於對象權限來說,我們舉個例子:如果我的方案中有一張表emp,現在我想讓Ken用戶有權限來操作我的表。那我怎麼辦?第一種辦法是用dba用戶將操作我的表emp的權限給Ken,這裡需要說明一點:dba用戶可以將任何對象上的對象權限授予其他用戶。第二種辦法是我自己來做。  如何做? grant select on emp to Ken with grant option.這裡我用到了 with grant option.這能起到這樣的作用:Ken用戶可以將操作我的表emp的權限在授予別的用戶。這裡注意一點。它跟with admin option 不同,with grant option只能授予用戶,不能授予角色。
    回收對象權限操作:revoke select on emp from Ken ;對象權限的回收是級聯的。比如:Ken將對emp表查詢的權限授予Jane,那麼回收Ken的權限後,Jane也不能對emp表進行查詢。
    c.角色授權這裡需要兩步:1給角色授權2將角色給某一個用戶。現在我們將登錄權限給一個角色:grant  create session  to 角色名;然後把這個角色給用戶Ken:grant 角色名 to Ken.刪除角色采用 drop role 角色名。

總結:這篇博客側重於介紹Oracle的基本機制,是最基本的知識,最後還介紹了如何分配權限和角色,包括它們是什麼,分類以及如何去用它們。這裡我們要搞明白一個前提就很好理解:我們要做某一件事必須要有權限。當我們沒有權限的時候可以使用系統用戶去做,如果系統授予我們權限那我們也可以做了。

以上就是對Oracle知識的整理,還有許多知識點未涉及到,在將來的文章更新中會陸續補充,希望大家繼續關注。

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