1. 程式人生 > >詳解Oracle 12c九項數據庫對象管理操作

詳解Oracle 12c九項數據庫對象管理操作

查看家目錄 緩存 函數索引 clu 磁盤 linux creat onu true

簡介

1.用戶管理
2.用戶授權
3.事務管理
4.索引
5.視圖以及物化視圖
6.序列
7.導入導出數據
8.同義詞
9.分區表

實驗環境

系統環境:centos7.4
Oracle服務IP地址:192.168.100.99
光盤掛載目錄:/mnt/sr0
安裝相關目錄:/opt

命令步驟

一、用戶管理

1、登錄Oracle數據庫

[oracle@oracle ~]$ lsnrctl start #啟動監聽

[oracle@oracle ~]$ sqlplus / as sysdba

SQL> startup                   #啟動數據庫
ORACLE 例程已經啟動。

Total System Global Area 1593835520 bytes
Fixed Size          8793256 bytes
Variable Size        1023411032 bytes
Database Buffers      553648128 bytes
Redo Buffers            7983104 bytes
數據庫裝載完畢。
數據庫已經打開。
SQL> show con_name

CON_NAME
------------------------------
CDB$ROOT           #默認數據庫容器,CDB模式下

2、創建表空間

SQL> create tablespace supermarket                                         #指定表空間名稱
  2  datafile ‘/opt/app/oracle/oradata/supermarket01.dbf‘   #指定數據文件路徑
  3  size 200M                                                                                   #指定表空間大小           
  4  autoextend on                                                                           #設置表空間自動擴展
  5  next 50M maxsize 20480M                                                     #每次擴展50M,最大擴展20480M 
  6  extent management local;                                                      #表空間的區管理為本地管理,為的是減少分配extent的時候產生的內部遞歸sql,提高數據庫分配空間的效率.

表空間已創建。

3、創建用戶

SQL> conn          #使用tom用戶進行登錄
請輸入用戶名:  c##tom  
輸入口令: 
已連接。
SQL> create user c##tom      #創建用戶"Tom"
  2  identified by 123               #設置用戶密碼"123"
  3  default tablespace supermarket    #指定默認表空間"supermarket"
  4  temporary tablespace temp           #指定默認臨時表空間"temp"
  5  quota unlimited on supermarket  #針對"supermarket"表空間不做磁盤配額限制
  6  password expire;                              #設置用戶每次登錄,強行修改密碼,此參數這裏不做演示

表空間已創建。

4、更改用戶密碼

SQL> alter user c##tom identified by 123123;       #將用戶"tom"密碼更改為"123123"

用戶已更改。

5、刪除用戶

SQL> drop user c##tom cascade;    

二、用戶授權

1、授予權限

SQL> conn          #使用系統dba身份用戶登錄
請輸入用戶名:  sys  
輸入口令: 
已連接。
SQL> grant connect,resource to c##tom;   #connect為連接權限;resource為管理數據庫權限

授權成功。
SQL> quit   #退出數據庫

2、登錄數據庫

[oracle@oracle ~]$ sqlplus c##tom/123123 as sysdba #連接數據庫


SQL*Plus: Release 12.2.0.1.0 Production on 星期三 10月 10 18:56:43 2018

Copyright (c) 1982, 2016, Oracle.  All rights reserved.

連接到: 
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

3、撤銷權限

revoke connect,resource from c##tom;      #通過sysdba身份登錄對用戶進行撤銷,這裏不做演示

三、事務管理

1、創建表結構

SQL> create table product
  2  (
  3  id number(4) constraint pk_id primary key,  
  4  name varchar2(10), 
  5  price number(10,2),
  6  createtime date,
  7  description varchar2(50)  
  8  );

表已創建。

2、添加數據

SQL> insert into product values (1,‘Olay‘,555,to_date(‘2018-10-10‘,‘yyyy-mm-dd‘),‘good‘);

已創建 1 行。

3、提交事務

SQL> commit;    #註意,oracle默認是手動提交事務,對數據編輯完之後,必須使用commit進行提交

提交完成。
SQL> rollback;   #註意,事務回滾使用此命令,這裏不再做演示

4、查看數據

SQL> select * from product;

    ID NAME                    PRICE CREATETIME
---------- ------------------------------ ---------- ------------
DESCRIPTION
--------------------------------------------------------------------------------
         1 Olay                                  555 10-10月-18
good

5、設置自動提交

SQL> set autocommit on;

6、添加數據

SQL> insert into product values (2,‘Kodak‘,77777,to_date(‘2018-10-09‘,‘yyyy-mm-dd‘),‘very good‘);

已創建 1 行。

提交完成。    #此時多出來一個提示,提交完成

四、索引

1、B數索引

SQL> create index index_product on product(price) ;  #通常情況下,使用日期,年齡,分數,價格,具有區間屬性的作為B數索引

索引已創建。

2、唯一索引

SQL> create unique index uni_index_product on product(id);

索引已創建。

3、反向索引

SQL> create index rev_index_product on product(createtime) reverse; 

索引已創建。

4、位圖索引

SQL> create bitmap index bt_index_product on product(description);

索引已創建。

5、其他索引

SQL> create index up_index_product on product(upper(name));  #大寫函數索引

索引已創建。

6、查看索引

……
SQL> select index_name,index_type,table_name,tablespace_name from user_indexes;
INDEX_NAME
--------------------------------------------------------------------------------
INDEX_TYPE
--------------------------------------------------------------------------------
TABLE_NAME
--------------------------------------------------------------------------------
TABLESPACE_NAME
--------------------------------------------------------------------------------
WRI$_ADV_DEF_PARAMETERS_PK
NORMAL
WRI$_ADV_DEF_PARAMETERS
SYSAUX

已選擇 1647 行。  #目前行數太多,可以自己測試查看

7、重建索引

SQL> alter index up_index_product rebuild;                                     

索引已更改。
SQL> alter index up_index_product rebuild tablespace supermarket;

索引已更改。

8、合並索引碎片

SQL> alter index up_index_product coalesce;

索引已更改。

9、刪除索引

SQL> drop index up_index_product;

索引已刪除。

五、視圖

1、普通視圖

1).創建視圖

SQL> create view view_product as select * from product;

視圖已創建。

2).查看視圖

SQL> select * from view_product;

    ID NAME                    PRICE CREATETIME
---------- ------------------------------ ---------- ------------
DESCRIPTION
--------------------------------------------------------------------------------
         1 Olay                                  555 10-10月-18
good

         2 Kodak                               77777 09-10月-18
very good

3).刪除視圖

SQL> drop view view_product;

視圖已刪除。

2、物化視圖

1).切換dba身份用戶

SQL> conn sys/123123 as sysdba
已連接。
SQL> show user;  #查看當前登錄用戶
USER 為 "SYS"

2).授權

SQL> grant create materialized view to c##tom;     #授予創建物化視圖權限

授權成功。
SQL> grant query rewrite to c##tom;                         #授予查詢、重寫權限

授權成功。
SQL> grant create any table to c##tom;                    #授予創建任何表權限            

授權成功。
SQL> grant select any table to c##tom;                     #授予查詢任何表權限  

授權成功。

3).創建物化視圖日誌

SQL> conn            #連接tom用戶
請輸入用戶名:  c##tom
輸入口令: 
已連接。
SQL> create materialized view log on product with rowid;

實體化視圖日誌已創建。

4).創建物化視圖

SQL> create materialized view mtrlview_pro
  2  build immediate           #創建物化視圖是否立即生成數據,immediate代表true
  3  refresh fast                    #設置與基表進行同步更新,如果不添加此參數,相當於快照功能
  4  on commit                     #開啟提交功能
  5  enable query rewrite   #開啟查詢、重寫功能
  6  as select * from product;

實體化視圖已創建

5).刪除視圖

SQL> drop materialized view mtrlview_pro;

六、序列

1、創建序列

SQL> create sequence toy_seq
  2  start with 3              #指定初始值 
  3  increment by 1        #指定增量
  4  maxvalue 2000       #指定最大值
  5  nocycle                   #指定工作模式為非循環
  6  cache 30;                #指定緩存區30個數值,空閑等待

序列已創建。

2、添加數據

SQL> insert into product values (toy_seq.nextval,‘Sony‘,999999,to_date(‘2018-10-09‘,‘yyyy-mm-dd‘),‘ok‘);

已創建 1 行。

提交完成。

3、查看序列

SQL> select toy_seq.currval from dual;

   CURRVAL
----------
     3

SQL> select sequence_name,increment_by,cache_size from user_sequences;                              

SEQUENCE_NAME
--------------------------------------------------------------------------------
INCREMENT_BY CACHE_SIZE
------------ ----------
TOY_SEQ
       1         30

4、更改序列

SQL> alter sequence toy_seq maxvalue 5000 cycle;

5、刪除序列

SQL> drop sequence toy_seq;

序列已刪除。

七、導入導出測試數據

[oracle@oracle ~]$ sqlplus / as sysdba

1、導入數據

1).創建用戶

SQL> create user c##scott identified by scott123
  2  default tablespace users                        #註意此表空間為系統自帶的表空間
  3  temporary tablespace temp
  4  quota unlimited on users;

用戶已創建。                    #導入數據時,sql語句綁定的是c##scott用戶,所以必須創建

2).授予權限

SQL> grant connect,resource,dba to c##scott;        #授予連接、管理數據庫權限以及dba權限

授權成功。

3).導入數據文件

SQL> ho ls /home/oracle   #oracle軟件可以兼容Linux 使用ho命令跟上liunx命令查看家目錄文件
database  flash-player-npapi-26.0.0.131-release.x86_64.rpm  test.sql
SQL> conn c##scott/scott123   #連接"scott"用戶
已連接。
SQL> @/home/oracle/test.sql  #導入數據
SQL> select * from tab;              #查看相關表信息

TNAME
--------------------------------------------------------------------------------
TABTYPE            CLUSTERID
--------------------- ----------
BONUS
TABLE

DEPT
TABLE

EMP
TABLE

TNAME
--------------------------------------------------------------------------------
TABTYPE            CLUSTERID
--------------------- ----------
SALGRADE
TABLE

2、導出數據

[oracle@oracle ~]$ exp c##tom/123123 file=/home/oracle/pro.sql #指定用戶進行導出數據

八、同義詞

1、私有同義詞管理

1).創建私有同義詞

SQL> show user;   #查看當前用戶
USER 為 "C##SCOTT"
SQL> create synonym pr_dept for dept;      #為"product"表設置了一個別名"pr_product"

同義詞已創建。

2).調用私有同義詞

SQL> select * from pr_dept;   #註意,此時定義的為私有同義詞,只是對當前用戶有效,切換另一個用戶無法識別

    DEPTNO DNAME
---------- ------------------------------------------
LOC
---------------------------------------
    10 ACCOUNTING
NEW YORK

    20 RESEARCH
DALLAS

    30 SALES
CHICAGO

    DEPTNO DNAME
---------- ------------------------------------------
LOC
---------------------------------------
    40 OPERATIONS
BOSTON
#### 3).刪除私有同義詞
SQL> drop synonym pr_dept;

同義詞已刪除。

2、公有同義詞管理

1).授予用戶權限

SQL> conn system/123 as sysdba    #管理員登錄 
已連接。
SQL> grant create public synonym to c##scott;

授權成功。

2).創建公有同義詞

SQL> conn c##scott/scott123  #連接普通用戶
已連接。
SQL> create public synonym public_sy_dept for dept;

同義詞已創建。

3).查看公有同義詞

SQL> select * from public_sy_dept;   #註意,切換其他用戶可以進行訪問,創建的為公有同義詞

    DEPTNO DNAME
---------- ------------------------------------------
LOC
---------------------------------------
    10 ACCOUNTING
NEW YORK

    20 RESEARCH
DALLAS

    30 SALES
CHICAGO

    DEPTNO DNAME
---------- ------------------------------------------
LOC
---------------------------------------
    40 OPERATIONS
BOSTON

九、分區表

1、建立若幹表空間

SQL> show user;  #當前用戶為系統管理員
USER 為 "SYS"
SQL> create tablespace tmp01   #註意建立4個表空間,依次為tmp01、tmp02、tmp03、tmp04
  2  datafile ‘/opt/app/oracle/oradata/tmp01.dbf‘
  3  size 100M;

表空間已創建。

2、創建數據表

SQL> create table sales       #創建表
  2  (
  3  sales_id number(4),
  4  product_id varchar2(5),
  5  sales_date date
  6  )
  7  partition by range (sales_date)   #指定時間字段進行分區
  8  (
  9   partition p1 values less than (to_date(‘2018-04-03‘,‘yyyy-mm-dd‘)) tablespace tmp01,  #p1指定名稱;less than小於指定的時間;tablespace指定表空間
 10   partition p2 values less than (to_date(‘2018-05-03‘,‘yyyy-mm-dd‘)) tablespace tmp02,
 11   partition p3 values less than (to_date(‘2018-06-03‘,‘yyyy-mm-dd‘)) tablespace tmp03,
 12   partition p4 values less than (maxvalue) tablespace tmp04
 13  );

表已創建。

3、插入測試數據

SQL> insert into sales values (1,‘ttt1‘,to_date(‘2018-05-23‘,‘yyyy-mm-dd‘));

已創建 1 行。

4、查詢分區

SQL> select * from sales partition(P3);  #按照時間分散存儲,已經存儲到p3中

  SALES_ID PRODUCT_ID      SALES_DATE
---------- --------------- ------------
         1 ttt1            23-5月 -18

詳解Oracle 12c九項數據庫對象管理操作