詳解Oracle 12c九項數據庫對象管理操作
阿新 • • 發佈:2018-10-12
查看家目錄 緩存 函數索引 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九項數據庫對象管理操作