【Oracle】運維常用SQL


用戶

Oracle中的用戶可以分爲兩類:一類是Oracle數據庫創建時,由系統自動創建的用戶,稱爲系統用戶,如sys和system;另一類用戶是利用系統用戶創建的用戶,稱爲普通用戶。平常我們登錄就是該類用戶。


可以通過以下語句查看:

SELECT USERNAME, ACCOUNT_STATUS, DEFAULT_TABLESPACE FROM DBA_USERS;
 
 
 用戶密碼過期處理
 1 以sys模式登錄
 conn / as sysdba
 2 修改密碼(簡單粗暴)
 SQL> alter user test identified by [new password];
 3 解鎖(也許嘗試多次登錄,用戶被鎖)
 SQL> alter user test account unlock;
 4 設置用戶密碼永不過期
  1 查看用戶概要文件(一般是DEFAULT)
select * from dba_users where username=test;

2 查看指定概要文件(如default)的密碼有效期設置(默認在default概要文件中設置了 “PASSWORD_LIFE_TIME=180天”):

SELECT * FROM dba_profiles WHERE profile='DEFAULT' and  resource_name='PASSWORD_LIFE_TIME';

3 將密碼有效期由默認的180天修改成“無限制”:
sql>alter profile default limit password_life_time unlimited;
修改之後不需要重啓動數據庫,會立即生效。


權限

Oracle中共有兩種權限:系統權限和對象權限。
系統權限是指針對數據庫中特點操作,比如創建數據表。
對象權限是指對已存在對象的訪問和操作權限,這些權限包括:
select:用於查詢表、視圖和序列 
insert:向表或視圖中插入新的記錄
update:更新表中的數據
delete:刪除表中的數據
execute:函數、存儲過程、程序包等的調用或執行
index:爲表創建索引
reference:爲表創建外鍵
alter:修改表或序列的屬性


通常,不同的數據庫用戶擁有不同的使用權限,比如某用戶不能delete或insert數據,這裏的權限指的是對象權限。




DDL

數據庫模式定義語言(Data Definition Language)。一旦執行,立即生效,不會回滾。

DDL包括:
CREATE DATABASE
CREATE TABLE
ALTER TABLE
DROP TABLE
CREATE VIEW
ALTER VIEW
DROP VIEW
TRUNCATE TABLE

DELETE、TRUNCATE和DROP 的一句話區別
想刪除表,當然用drop;
想保留表而將所有數據刪除. 如果和事務無關,用truncate即可;
如果和事務有關,或者想觸發trigger,還是用delete。

DML

數據庫操縱語言(Data Manipulation Language)。執行後,需要提交才能正式生效。也可以回滾,返回之前的狀態。

DML包括:
SELECT
INSERT
UPDATE
DELETE 


主鍵

主鍵是對錶數據唯一性的規定,一張表只能有一個主鍵約束。主鍵約束和唯一性約束區別,可以這樣理解,主鍵約束是對錶數據的標示,而唯一性約束是從業務對數據的標示。


創建主鍵方法:
ALTER TABLE 表名 ADD (
CONSTRAINT PK_HUBOHK_STORE_RATE
PRIMARY KEY
(字段1, 字段2, ...));


如果以一個字段當主鍵,這樣寫:
CREATE TABLE 表名
(
  ID VARCHAR2(10 BYTE) NOT NULL PRIMARY KEY,
  NAME VARCHAR2(10 BYTE) NOT NULL,
...
...
...
);


索引

注意事項
1,小數據量的表不宜使用索引
2,頻繁使用insert、delete和update不宜使用

使用索引誤區,導致索引失效
1,使用比較運算符
select * from test where name <> 'DEMO';
2,使用函數
select * from test where instr(name, '_') = 5;
3,聯合索引
建立的索引,由3個字段組成
CREATE INDEX idx_test ON test
(col_1, col_2, col_3);
使用其中一個字段作爲查詢條件:select * from test where col_2 = 'RED';這種情況,索引效果失效。
只有當查詢條件中包含前導列(即聯合索引的第一列),才能發揮聯合索引idx_test的作用。

寫法:
CREATE INDEX 索引名 ON 表名
(字段1, 字段2, ...)


觸發器

觸發器,不允許顯示調用,只能在Oracle在合適的時機自動調用。可以在動作執行之前或執行之後,進行自定義操作。


語句觸發器,是指建立在表上的、由表的特定操作觸發的觸發器。這些操作可以是insert、update或者delete。常見用法,記錄表的修改日誌。


創建語句觸發器:
create or replace trigger tr_employee_log
before insert or update
on t_employees

begin
insert into employee_log values(user, sysdate);
end;

當嘗試向表 t_employees插入數據時,那麼同樣的employee_log也會查詢一條數據,用來記錄日誌。

行觸發器,顧名思義指的是針對行數據操作,必須包含for each row子句。
常見的用法,轉換大小寫、取最大值、數據初始0
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章