Oracle數據庫經常使用操做命令

1、啓動和關閉Oracle數據庫sql

  1. 數據庫啓動數據庫

    以SYSDBA身份登陸緩存

    數據庫啓動命令:STARTUP 【啓動選項】安全

    數據庫啓動三個階段:oracle

                啓動Oracle實例(非安裝階段)分佈式

                由實例安裝數據庫(安裝階段)ide

                打開數據庫(打開階段)函數

    2018-04-14_105919.png

    2018-04-14_105957.png

  2. 數據庫的關閉性能

  以SYSDBA身份登陸
測試

  數據庫關閉命令:SHUTDOWN 【啓動選項】

  數據庫關閉三個階段:

              關閉數據庫

              卸載數據庫

              關閉Oravle實例

2018-04-14_110027.png

2018-04-14_110046.png

2、啓動、關閉Oracle監聽進程

*監聽器lsnrctl:提供數據庫訪問,默認端口1521

*爲了使客戶端用戶能鏈接到Oracle實例,要啓動監聽

1.啓動監聽

啓動(START)監聽是Oracle用戶在操做系統下執行的命令,能夠直接在LSNRCTL後加參數,也能夠在該命令提示符後在進行操做。

2018-04-14_111718.png

2.關閉監聽

2018-04-14_111744.png

注意:先啓動監聽,後啓動數據庫。


3、表空間

  1. 建立表空間

    2018-04-14_112114.png

    參數解釋:

    tablespacename:表空間名稱

    DATAFILE:指定組成表空間的一個或多個數據文件,當有多個數據文件時使用逗號分隔

    filename:表空間中數據文件的路徑和名稱

    SIZE:指定文件的大小,用K指定千字節大小,用M指定兆字節大小

    AUTOEXTEND:用來啓用或禁用數據文件的自動擴展

    舉例:

    QQ圖片20180414112333.png

  2. 表空間的管理

(1)調整表空間的大小。當表空間已滿的狀況下,能夠經過ALTER語句來調整表空間的大小。

  方法一:更改數據文件的大小,並指明數據文件的存放路徑,經過使用RESIZE關鍵字,用於指定調整後的表空間的大小

  QQ圖片20180414112333.png

  方法二:向表空間內添加數據文件。爲表空間添加一個新的數據文件

  QQ圖片20180414112333.png

 (2)改變表空間的讀寫狀態。

 ALTER  TABLESPACE  表空間名  READ   WHITE ;      --使表空間可讀寫

 ALTER  TABLESPACE  表空間名  READ   ONLY ;       --使表空間只讀

 (3)刪除表空間,能夠經過DROP語句來刪除表空間,再加上表空間的名字便可。

 DROP  TABLESPACE  表空間名 [INCLUDING  CONTENTS] ;

其中INCLUDING  CONTENTS是可選項。若是刪除仍包含數據的表空間,須要加上該選項。

4、用戶管理

  1. 建立用戶

    2018-04-14_122503.png

    舉例:

    2018-04-14_122624.png

  2. 修改用戶的密碼

    ALTER  USER  用戶名  IDENTIFIED  BY  密碼

  3. 刪除用戶。使用DROP USER命令能夠刪除用戶,當用戶擁有模式對象時則沒法刪除用戶,而必須使用CASCADE選項以刪除用戶及用戶模式對象。

    DROP  USER  用戶名  CASCADE;

建立用戶前的準備工做:

1)       選擇用戶名和密碼

2)       識別用戶需用於存儲對象的表空間

3)       決定每一個表空間的限額

4)       分配缺省表空間和臨時表空間

5)       建立用戶

6)       向用戶授予權限和角色

5、數據庫權限管理

  1. 系統權限

    系統權限是指在數據庫中執行某種系統級別的操做,或者針對某一類對象執行某種操做的權利

    2018-04-14_123611.png


    經常使用的系統權限以下:

    CREATE SESSION:鏈接到數據庫

    CREATE TABLE:建立表

    CREATE VIEW:建立視圖

    CREATE SEQUENCE:建立序列

  2. 對象權限

    對象權限是指針對某個特定模式對象執行操做的權利,只能針對模式對象來設置管理對象權限,包括:表、視圖、序列、存儲過程等。

    2018-04-14_124041.png

    Oracle數據用戶有兩種途徑得到權限:

    (1)直接向用戶授予權限

    (2)將權限授予給角色,再將角色授予給一個或多個用戶。使用角色可以更加方便和高效地對權限進行管理,因此數據庫管理員一般使用角色向用戶授予權限,而不是直接向用戶授予權限。

    Oracle中經常使用系統預約義角色以下:

    (1)CONNECT:擁有鏈接數據庫的權限

    (2)RESOURCE:擁有建立表、觸發器、過程等權限

    (3)DBA:數據庫管理員角色,擁有管理數據庫的最高權限

  3. 新建的用戶必須授予必定的權限才能進行相關數據庫操做。受權經過GRANT語句,取消受權則經過REVOKE語句。

    授予權限語法格式以下:

    GRANT   權限 | 角色   TO    用戶名;

    2018-04-15_095628.png

    撤銷權限語法格式以下:

    REVOKE     權限  |  角色    FROM    用戶名;

    2018-04-15_095653.png

 6、事務控制

2018-04-15_100918.png

 COMMIT:提交事務,即把事務中對數據庫的修改進行永久保存。

 ROLLBACK:回滾事務,即取消對數據庫所作的任何修改

 自動提交:  set  autocommit on

 關閉自動提交: set autocommit off

 7、索引

索引是oracle的一個對象,是與表關聯的可選結構,提供了一種快速訪問數據的途徑,提升了數據庫檢索性能。索引使數據庫程序無需對整個表進行掃描,就能夠在其中找到所須要的數據。就像書的目錄,能夠經過目錄快速查找所需信息,無需閱讀整本書。

一、索引的特色

適當地使用索引能夠提升查詢速度

能夠對錶的一列或多列創建索引

創建索引的數量沒有限制

索引須要磁盤存儲,能夠指定表空間,由oracle自動維護

索引對用戶透明,檢索時是否使用索引由oracle自身決定

Oracle數據庫管理系統在訪問數據時使用如下三種方式:

n  全表掃描

n  經過ROWID(行地址,快速訪問表的一行)

n  使用索引

當沒有索引或者不選擇使用索引時就用全表掃描的方式

2.索引的分類

2018-04-15_101611.png

(1)建立普通索引(B樹索引)

2018-04-15_101936.png

參數解釋:

index_name:建立索引的名稱

tablename:爲之建立索引的表名

columnname:在其上建立索引的列名列表,能夠基於多列建立索引,列之間用逗號分隔

tablespace:爲索引指定表空間

(2)建立惟一索引

保證定義索引的列中沒有任何兩行有重複值。惟一索引中的索引關鍵字只能指向表中的一行。

2018-04-15_102618.png

(3)建立反向鍵索引

與常規B樹索引相反,反向鍵索引在保持列順序的同時反轉索引列的字節。反向鍵索引經過反轉索引鍵的數據值,使得索引的修改平均分佈到整個索引樹上。主要應用於所多個實例同時訪問一個數據庫的場景中。

2018-04-15_102801.png

(4)建立位圖索引

優勢:相對於B樹索引而言,基於位圖索引列的查詢能夠減小響應時間。

    相比其餘索引技術,位圖索引佔用空間明顯減小。

2018-04-15_103341.png

2018-04-15_103151.png

(5)其餘索引

組合索引:在表內多列上建立。索引中的列沒必要與表中的列順序一致,也沒必要相互鄰接。

基於函數的索引:須要建立的索引須要使用表中一列或多列的函數或表達式,也能夠將基於函數的索引建立爲B樹索引或位圖索引

2018-04-15_103704.png

三、建立索引的原則

頻繁搜索的列能夠做爲索引列

常常排序,分組的列能夠做爲索引

常常用做鏈接的列(主鍵/外鍵)能夠做爲索引

將索引放在一個單獨的表空間中,不要放在有回退段、臨時段和表的表空間中

對於大型索引而言,考慮使用NOLOGIN子句建立大型索引。

      根據業務數據發生頻率,按期從新生成或從新組織索引,進行碎片整理


4.查看索引

和索引有關的數據字典:

USER_INDEXS:用戶建立的索引信息

USER_IND_COLUMNS:與索引相關的表列信息

2018-04-15_104124.png

5.維護索引

(1)重建索引

索引須要維護,若是創建了索引的表中有大量的刪除和插入操做,會使得索引很大,由於刪除操做後,刪除值的索引空間不能被自動從新使用,對於大表和DML操做很頻繁的表,索引的維護是很重要的。Oracle提供了rebuild指令來重建索引。使索引空間能夠重用刪除值所佔用的空間,使索引更加緊湊。

2018-04-15_104608.png

(2)合併索引碎片

合併索引碎片能夠釋放部分磁盤空間,是索引維護的一種重要方式,也是維護磁盤空間的方式,相似於磁盤碎片整理,把不用的空間釋放出來再利用。

2018-04-15_104620.png

(3)重命名索引

2018-04-15_105008.png

(4)刪除索引

2018-04-15_104632.png

8、視圖

視圖是一個虛表,不佔用物理空間,由於視圖自己的定義語句存儲在數據字典裏,視圖中的數據是一個或多個實際表中得到的。那些用於產生視圖的表叫作該視圖的基表。一個視圖也能夠從另外一個視圖中產生。

一、視圖的優勢:

1)       提供了另一種級別的表安全性

2)       隱藏的數據的複雜性:一個視圖多是用多表鏈接定義的,但用戶不須要知道多表鏈接的語句也能夠查詢數據。

3)       簡化的用戶的SQL命令:查詢視圖的時候不須要寫出複雜的查詢語句,只須要查詢視圖名稱便可。

4)       隔離基表結構的改變:視圖建立好了以後,若是修改了表的結構,也不會影響視圖的

    5)經過重命名列,從另外一個角度提供數據:例如在銷售系統中,每日下班前要對當日數據進行彙總,在銷售人員眼中,該彙總表成爲日銷售統計表,在財務人眼中,該銷售表成爲銷售日報表

2.建立視圖

2018-04-15_105406.png

參數解釋:

OR REPLACE:若是視圖已存在,此選項將從新建立該視圖。

FORCE:若是使用此關鍵字,則不管基表是否存在,都將建立視圖。

NOFORCE:這是默認值,若是使用此關鍵字,則僅當基表存在時才建立視圖。

VIEW_NAME:要建立視圖的名稱

Alias:指定由視圖的查詢所選擇的表達式或列的別名。別名的數目必須與視圖所選擇的表達式的數目相匹配。

Select_statement:select語句

WITH CHECK OPTION :此選項指定只能插入或更新視圖能夠訪問的行。術語constraint表示爲CHECK OPTION約束指定的名稱。

WITH READ ONLY:此選項保證不能在此視圖上執行任何修改操做。

三、DML語句和複雜視圖

DML語句是指用於修改數據的insertdeleteupdate語句。由於視圖是一個虛擬的表,因此這些語句也能夠與視圖一同使用。通常狀況下不經過視圖修改數據,而是直接修改基表,由於這樣條例更清晰。在視圖上使用DML語句有以下限制(相對於表)。

1)DML語句只能修改視圖中的一個基表。

2)若是過記錄的修改違反了基表的約束條件,則將沒法更新視圖。

3)若是建立的視圖包含鏈接運算符,DISTINCT運算符、集合運算符、聚合函數和groupby子句,則將沒法更新視圖。

4)若是建立的視圖包含僞列表達式,則將沒法更新視圖。

簡單視圖基於單個基表,不包括函數和分組函數,那麼能夠在此視圖中進行insert、update、delete操做,這些操做實際上在基表中插入、更新和刪除行

複雜視圖從多個表提取數據,包括函數分組函數。複雜視圖不必定能進行DML操做。

4.查詢視圖

select    view_name   from    user_views;

5.刪除視圖

drop  view   view_name;

6.物化視圖

含義:

就是具備物理存儲的特殊視圖,佔據物理空間,就像表同樣

是遠程數據的本地副本,或者用來生成基於數據表求和的彙總表

2018-04-15_110819.png

物化視圖中兩個重要概念:查詢重寫和物化視圖同步

(1)查詢重寫:對sql語句進行重寫,當用戶使用sql語句對基表進行查詢時,若是已經創建了基於這些表的物化視圖,oracle將自動計算和使用物化視圖來完成查詢,在某些狀況下能夠節約查詢時間,減小系統i/o。Oracle將這種查詢優化技術成爲查詢重寫。參數QUERY_REWRITE_ENABLED決定是否使用重寫查詢,該參數爲布爾型。在建立物化視圖須要用ENABLE_QUERY REWRITE來啓動查詢重寫功能。經過SHOW指令能夠查看該參數的值

(2)物化視圖的同步:

物化視圖是基於表建立的,因此當基表變化時,須要同步數據以更新物化視圖中的數據,這樣保持物化視圖中的數據和基表的數據一致性。Oracle提供了兩種物化視圖的刷新方式,決定什麼時候進行刷新,即ON COMMIT方式和ON DEMAND方式。

ON COMMIT方式:指物化視圖在對基表的DML操做事務提交的同時進行刷新。

ON DEMAND方式:指物化視圖在用戶須要的時候進行更新,能夠手工經過DBMS_MVIEW.REFRESH等方式來進行刷新,也能夠經過JOB定時進行刷新。

選擇刷新方式以後,還須要選擇一種刷新類型,刷新類型指定刷新時基表與物化視圖如何實現數據的同步,oracle提供瞭如下4種刷新類型。

COMPLETE:對整個物化視圖進行徹底的刷新。

FAST:採用增量刷新,只刷新自上次刷新後進行的修改。

FORCE:oracle在刷新時會去判斷是否能夠進行快速刷新,若是能夠則採用FAST方式,不然採用COMPLETE方式。

NEVER:物化視圖不進行任何刷新。

默認值是FORCE刷新類型。

建立物化視圖

(1)授予權限,具有建立物化視圖的權限、QUERY  REWRITE的權限,以及對建立物化視圖所涉及的表的訪問權限和建立表的權限。

經過SCOTT用戶來演示

2018-04-15_111655.png

(2)建立物化視圖日誌

2018-04-15_111723.png

(3)建立物化視圖語句

2018-04-15_111809.png

其中:

bulid immediate:該參數的含義是當即建立物化視圖,也能夠選擇build  deffered,該參數說明在物化視圖定之後不會當即執行,而是延遲執行,在使用該視圖時再建立。

Reffesh fast:刷新數據的類型選擇FAST類型。

ON COMMIT:在基表有更新時提交後當即更新物化視圖。

ENABLE QUERY REWRITE:啓動查詢重寫功能。在建立物化視圖時明確說明啓用查詢重寫功能。

As:定義後面的查詢語句。

查詢體:物化視圖的查詢內容,該sql語句的查詢結果集輸出到物化視圖中,保存在由oracle自動建立的表中。

(4)刪除物化視圖

drop  materialized  view  view_name;

9、序列

序列是用來生成惟1、連續的整數數據庫對象。序列一般用來自動生成主鍵或惟一鍵的值。序列能夠按升序排列,也能夠按降序排列。

1.建立序列

2018-04-15_112820.png

參數解釋:

START WITH:指定要生成的第一個序列號,對於升序序列,其默認值爲序列的最小值,對於降序序列,其默認值爲序列的最大值。

INCREMENT BY:用於指定序列號之間的間隔,默認值爲1,若是n爲正值,則生成的序列將按升序排序,若是n爲負值,則生成的序列按降序排列。

MAXVALUE:指定序列能夠生成的最大值

NOMAXVALUE:若是指定了NOMAXVALUEoracle將升序序列的最大值設爲1027,將降序序列的最大值設爲-1

MINVALUE:指定序列最小值。MINVALUE必須小於或等於START WITH的值,而且必須小於MAXVALUE

NOMINVALUE:若是指定了NOMINVALUEoracle將升序序列的最小值設爲1,或將降序列的值設置爲-1026

CYCLE:指定序列在達到最大值或最小值後,將繼續從頭開始生成值。

NOCYCLE:指定序列在達到最大值或最小值後,將不在繼續生成值。

CHCHE:使用CACHE選項能夠預先分配一組序列號,並將其保留在內存中,這樣能夠更快地訪問序列號,當用完緩存中的全部序列號時,oracle將生成另外一組數值,並將其保留在緩存中。

NOCACHE:使用NOCACHE選項,則不會爲加快訪問速度而預先分配序列號。若是在建立序列時忽略了CACHENOCACHE選項,oracle將默認緩存20個序列號。

2.訪問序列

建立了序列以後,能夠經過NEXTVALCURRVAL僞列來訪問該序列的值。能夠從僞列中選擇值。可是不能操縱他們的值。

NETXVAL:建立序列後第一次使用NEXTVAL時,將返回該序列的初始值。之後再引用NETXVAL時,將使用INCREMENT BY子句的值來增長序列值,並返回這個新值

CURRVAL:返回序列的當前值,即最後一次引用NEXTVAL時返回的值

舉例:

建立序列

2018-04-15_113855.png

建立表

2018-04-15_113244.png

插入數據

2018-04-15_113323.png

查看數據

2018-04-15_113358.png

查看序列的當前值

2018-04-15_113429.png

Currval返回序列的當前值,即最後一次引用NEXTVAL時返回的值

測試currval

2018-04-15_113516.png

重啓實例以後再次寫入數據發現從40開始,由於按建立序列的要求,每次會拿30個序列號放到緩存中,實例重啓後,緩存中的序列就會消失

2018-04-15_113550.png

3.更改序列

Alter sequence命令用於修改序列的定義。若是要進行下列操做,則會修改序列。

 設置或刪除MINVALUEMAXVALUE

  修改增量值

修改緩存中的序列號的數目

  不能修改序列的START WITH參數

2018-04-15_114436.png

4.刪除序列

2018-04-15_114452.png

10、同義詞

同義詞是對象的一個別名,不佔用任何的實際存儲空間,只在oracle的數據字典中保存其定義描述,在使用同義詞時,oracle會將其翻譯爲對應對象的名稱。

1.用途:

   簡化SQL語句

   隱藏對象的名稱和全部者

   爲分佈式數據庫的遠程對象提供位置透明性

   提供對數據庫對象的公共訪問

建立數據庫連接的語法:

CREATE DATABASE LINK 數據庫連接名 CONNECT TO user名 IDENTIFIED BY 口令 USING ‘Oracle連接串’;

2.同義詞的分類

(1)私有同義詞

私有同義詞只能被當前模式的用戶訪問,私有同義詞名稱不可與當前模式的對象名稱相同。要在自身的模式建立私有同義詞,用戶必須擁有create synonym系統權限。要在其餘用戶模式建立私有同義詞,用戶必須擁有create any  synonym系統權限。

語法:

CREATE [OR REPLACE] SYNONYM  [schema.]synonym_name  FOR  [schema.]object_name ; 

參數解釋:

[OR REPLACE]:在同義詞存在的狀況下替換該同義詞

synonym_name:要建立同義詞的名稱

object_name:指定要爲之建立同義詞的對象的名稱

2018-04-15_120312.png

(2)共有同義詞

公有同義詞被全部的數據庫訪問。公有同義詞能夠隱藏基表的身份,並下降sql語句的複雜性。要建立公有公有同義詞,用戶必須擁有create public SYNOYM的系統權限。

語法:

CREATE   [OR REPLACE]     PUBLIC    SYNONYM    [schema.]synonym_name    FOR    [schema.]object_name ;

2018-04-15_120325.png

(3)刪除同義詞

DROP [PUBLIC] SYNONYM  [schema.]synonym_name;

2018-04-15_120430.png

2018-04-15_120440.png

11、分區表

1.含義:

Oracle容許把一個表重的全部行分紅幾個部分,並將它們存儲在不通的表空間,分紅的每一部分紅爲一個分區,被分區的表成爲分區表。

對於包含大量數據的表來講,分區頗有用,優勢有如下幾點:

1)改善表的查詢性能。在對錶進行分區後,用戶執行sql查詢時能夠只訪問表中的特定分區而非整個表。

2)表更容易管理。由於分區表的數據存儲在多個部分中,按分區加載和刪除數據比在表中加載和刪除更容易。

3)便於備份和恢復。能夠獨立地備份和恢復每一個分區。

4)提升數據安全性。將不一樣的分區分佈在不一樣的磁盤,能夠減小全部分區的數據同時損壞的可能性。

符合一下條件的表能夠建成分區表:

1)數據量大於2GB

2)已有的數據和新添加的數據有明顯的界限劃分。

表分區對用戶是透明的,及應用程序能夠不知道表已被分區,在更新和查詢分區表時當作普通表來操做,但oracle優化程序知道表已被分區。

2.分區表的分類

Oracle提供的分區方法有範圍分區、列表分區、散列分區、複合分區、間隔分區和虛擬列分區等。

3.舉例

(1)建立表而且分區,以age分區

2018-04-15_121553.png

(2)向表中插入數據

2018-04-15_121844.png

(3)查詢P100分區的數據

2018-04-15_121907.png

查詢P200分區的數據

2018-04-15_121938.png

(4)若是向表中插入如下記錄,會提示插入的分區關鍵字未映射到任何分區

2018-04-15_122014.png

(5)按範圍分區是,若是某些記錄暫時沒法預測範圍,能夠建立maxvalue分區,全部不在指定範圍內的記錄都會被存儲到maxvalue所在的分區中

2018-04-15_122035.png

(6)再次插入如下數據

2018-04-15_122107.png

(7)查詢

2018-04-15_122137.png

(8)查看全部分區的命令

2018-04-15_122203.png

通常建立範圍分區時都會將最後一個分區設置爲maxvalue,將其餘數據落入此分區,一旦須要時能夠利用拆分分區的技術將須要的數據從最後一個分區分離出入,單獨造成一個分區,若是沒有建立最大的分區,插入的數據查出範圍就會報錯。若是插入的數據是分區鍵上的值,則該數據落入下一個分區。

相關文章
相關標籤/搜索