Oracle SQL命令通解三步曲,Oracle演變歷程

你知道嗎?Oracle 11g(11g Release 2)的SQL語言參考(SQL Language Reference)一共有1522頁,其中CREATE TABLE這個命令的語法圖解就有20頁之多,而整個命令的說明更是達到了76頁!

到了Oracle 12c(12c Release 1),整個手冊的頁數則達到1824頁,CREATE TABLE命令的語法圖解是21頁,整個命令的說明則達到87頁!Oracle語法是如此繁雜,簡直讓人望而卻步!

你可能會說,我知道啊!我看過這個手冊,而且CREATE TABLE 這個命令其實還不是最複雜的,最複雜的命令是ALTER TABLE,12c中佔據了103頁的篇幅,其中語法圖解就有34頁!

對,如果你知道,那說明你蠻厲害,你對Oracle的SQL語法不陌生。

可是如果我告訴你,在Oracle 版本7中,CREATE TABLE和ALTER TABLE這兩個命令的語法圖解都不足一頁!你會不會感到驚訝?

選擇了Oracle,就得去面對它繁雜的語法文檔。但是一個人的精力是有限的,要想又快又好地掌握Oracle語法,就得講究方式方法了。

Oracle SQL命令通解三步曲》將引領大家從Oracle基本概念入手瞭解某個早期版本語法命令,而後逐步瞭解各版本新增命令,從而建立起一個SQL命令的完整視圖


第一步:瞭解Oracle基本概念

SQL語法與Oracle基本概念緊密相關,在爲數衆多的SQL命令中,大部分命令是圍繞Oracle基本概念設計的。比如CREATE TABLEALTERTABLEDROP TABLE這三個命令,圍繞TABLE(表)這個概念來設計,用於定義TABLE的結構。類似的SQL命令還有很多很多。所以我們要掌握SQL命令,首先應理解Oracle的基本概念。


讓我們從關係數據庫最基本、同時也是最核心的概念開始,分析幾個Oracle基本概念的由來及含義。


首先,爲了在數據庫中存放數據,Oracle定義了。表是數據的集合,由行和列組成。


當一個表很大的時候(包含成千上萬的行),爲了提升數據檢索的速度,Oracle引入了索引。索引是實現數據高效檢索的基礎,也是SQL調優的最基本手段。


表中包含行,不同的行代表不同的實體。行不允許相同,否則無法代表不同實體,這就是實體的完整性約束。爲了實現完整性約束,Oracle引入了序列:序列用來在整個數據庫範圍內產生唯一的順序編號。


關係數據庫的基本目的是在不同的用戶間共享數據。表級別的授權無法實現行粒度和列粒度的權限管理,爲此Oracle引入了視圖。視圖對錶的行和列進行帥選,實現了行粒度和列粒度的權限管理目的。


有時我們要頻繁地從多個表檢索數據。各個表的數據默認存放到不同的段中,這意味着要到不同的數據塊獲取數據。爲了加快檢索速度,Oracle把若干個表的行存放到相同的數據塊,這就是。簇提高了多表關聯的性能,Oracle內部的數據字典表設計就用到了簇。


有了表、索引、序列和視圖之後,Oracle把這些對象聚合在一起,形成數據庫。表和索引之類的東西最終會存放到磁盤,其存在形式就是數據庫文件。


讓我們思考一個問題:如果定義表時,直接把表關聯到文件會有什麼問題?答案很明顯:如果數據文件位置發生變化,就得修改表的定義。爲了解決此問題,Oracle引入了表空間。表空間是多個文件的集合,實現了數據庫的邏輯表現與數據存儲的分離,使之更易於管理。


大機構的數據很多,通常會分散到不同的數據庫中。爲了在不同數據庫之間訪問彼此的數據,Oracle引入了數據庫鏈接。數據庫鏈接是不同數據庫間互相訪問的通道。


如果應用程序訪問了多個數據庫,當某個庫的部署發生變動時,如何避免對應用程序的代碼做更改呢?和表空間類似,Oracle引入了同義詞來解決該問題。同義詞是模式對象的別名,提供了數據獨立性和位置透明性的功能。


上述概念是Oracle早期版本就具有的。在後續各個版本中,Oracle不斷補充新概念,功能不斷增強,Oracle數據庫管理系統就像一棵樹一樣茁壯成長,枝繁葉茂。

上面簡單地引出了幾個Oracle基本概念,對於概念本身的闡述只是點到爲止,未做深入解釋。爲了準確理解這些概念,我們看看Oracle是如何定義這些概念的:


表(table):Basic unit of data storage in Oracle Database. Data in tables is storedin rows and columns.
索引(index):Optional schema object associated with a nonclustered table, tablepartition, or table cluster. In some cases indexes speed data access.
序列(sequence):A schema object that generates a serial list of unique numbers for tablecolumns.
視圖(view):A custom-tailored presentation of the data in one or more tables. Theviews do not actually contain or store data, but derive it from the tables onwhich they are based.
簇(cluster):Optional structure for storing table data. Clusters are groups of one ormore tables physically stored together because they share common columns andare often used together. Because related rows are physically stored together,disk access time improves.
數據庫(database):Organized collection of data treated as a unit. The purpose of adatabase is to store and retrieve related information. Every Oracle databaseinstance accesses only one database in its lifetime.
表空間(tablespace):A database storage unit that groups related logical structures together.The database data files are stored in tablespaces.
數據庫鏈接(database link):A named schema object that describes a pathfrom one database to another. Database links are implicitly used when areference is made to a global object name in a distributed database.
同義詞(synonym):An alias for a schema object. You can use synonyms to provide dataindependence and location transparency.
注:以上內容來自Oracle手冊《DatabaseConcepts》。

要注意的是,應結合實際例子來理解這些概念,而不能只停留在文字上。Oracle在不同版本中對某個概念的定義可能不同,若想透徹理解其本質,應仔細閱讀《Database Concepts》相關內容。很多DBA反覆閱讀該文檔,就是爲了把握概念的本質。

第二步:瞭解Oracle版本6SQL命令

事物的發展是循序漸進的,因此認識事物也應如此。
爲了全面瞭解SQL命令,我們從Oracle版本6開始,構建一個最初的SQL命令清單,然後不斷擴充其內容。

OracleSQL命令按功能分爲六大類:
1數據定義語言命令Data Definition Language commands,簡稱DDL命令)
2數據操縱語言命令Data Manipulation Language commands,簡稱DML命令)
3事務控制命令Transaction Control commands
4會話控制命令Session Control commands
5系統控制命令System Control commands
6嵌入式SQL命令EmbeddedSQL commands
其中,DDL命令又分爲如下細類:
·        對象的創建、修改與刪除相關命令(create, alter, and drop objects
·        授權、權限回收以及角色管理相關命令(grant and revoke privileges and roles
·        表、索引及簇統計信息分析命令(analyze information on a table, index, orcluster
·        數據庫安全審計相關命令(establish auditing options
·        數據庫對象備註相關命令(add comments to the data dictionary

首先看DDL命令。
還記得我們前面介紹的那些Oracle基本概念嗎?這些概念對應瞭如下27DDL命令:

上述命令的含義無須過多解釋,大家一看自明。
值得關注的是,爲什麼沒有DROP DATABASEALTER DATABASE LINKALTERSYNONYMCREATE USERDROP USER這些命令呢?
我猜測,Oracle一開始不提供DROP DATABASE命令的原因,是覺得這個命令過於危險;不提供ALTER DATABASE LINKALTER SYNONYM這兩個命令,是因爲數據庫鏈接和同義詞本身結構簡單,沒有修改的必要;而不提供CREATE USERDROP USER命令的原因,是早期的Oracle採用系統用戶登錄的方式(和DB2類似)。(注意:Oracle在後續版本中陸續補充了CREATE USER,DROP USER, DROP DATABASEALTER DATABASE LINK這些命令。)
與授權及權限回收相關的DDL命令有2個:GRANTREVOKE。前者用於授權,後者用於收回權限。
與數據庫安全審計相關的DDL命令也有2個:AUDIT (Traditional Auditing)NOAUDIT(Traditional Auditing),前者用於開啓審計,後者用於取消審計。
COMMENT命令用於給數據庫對象添加備註,RENAME命令用於重命名數據庫對象,二者亦爲DDL命令。

再看DML命令。
版本6中提供瞭如下6DML命令:
·        INSERTUPDATEDELETE三個命令用於插入、修改及刪除表中的行;
·        SELECT命令用於從表中檢索行
·        LOCKTABLE命令以顯式的方式給表和視圖加鎖
·        EXPLAINPLAN命令用於查看Oracle優化器預期的執行計劃
剩下5個命令是事務控制和會話控制命令:
1COMMITROLLBACKSAVEPOINTSETTRANSACTION4個命令用來控制事務
2ALTER SESSION命令用於控制會話
(注意,Oracle版本6中還沒有系統控制命令,該命令在Oracle版本7中首次出現)


至此,我們構建了一個Oracle版本6的命令清單:


第三步:瞭解Oracle各版本新增SQL命令

Oracle從版本6到目前最新的版本12c,期間經歷了:版本7,版本8,版本8i,版本9i,版本10g,版本11g,每一次版本發佈都出現了或多或少的新命令,下面逐一介紹。


Oracle 版本7新增SQL命令
版本7引入了衆多新概念及相關SQL命令,包括過程化SQL、觸發器、安全管理、對象管理、系統控制等一共30個新命令。



Oracle版本8新增SQL命令
版本8引入了目錄、庫、物化視圖、類型等概念及18個相關命令。



Oracle8i新增SQL命令
8i版本引入了上下文、維度、Java、統計信息等概念以及18個相關命令。




Oracle 9i新增SQL命令
9i版本引入了服務器參數文件的概念,新增了3個命令。



Oracle 10g新增SQL命令
10g版本引入了ASM磁盤組以及閃回數據庫的概念及9個相關新命令。



Oracle 11g新增SQL命令
11g版本引入了閃回數據歸檔模式對象多版本的概念,以及相關的7個命令。



Oracle 12c新增SQL命令
12c版本爲了支撐軟件即服務的應用模式,提供了多租戶架構的數據庫支撐,引入可插拔式數據庫的概念以及相關的安全審計策略,包含了10個新增命令。
 


至此,我們簡單介紹了Oracle各個版本引入的關鍵概念,並通過這些概念來把握相關的SQL命令,從而對整個SQL命令體系有了大致瞭解。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章