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