Oracle Database 常用 SQL
Based on Oracle Database 11gR2
系统查询
查询系统视图或表
1 | -- DBA/ALL/USER/V_$/GV_$/SESSION/INDEX开头的绝大部分都是视图 |
常用 DBA 开头的视图
1 | SELECT * FROM DBA_USERS; -- 数据库用户信息 |
常用 ALL 开头的视图
1 | SELECT * FROM ALL_USERS; -- 数据库所有用户的信息 |
常用 USER 开头的视图
1 | SELECT * FROM USER_OBJECTS; -- 用户对象信息 |
常用 V$开头的视图
1 | SELECT * FROM V$VERSION; -- 版本信息 |
常用 SESSION 开头的视图
1 | SELECT * FROM SESSION_ROLES; -- 会话的角色信息 |
常用 INDEX 开头的视图
1 | SELECT * FROM INDEX_STATS; --索引的设置和存储信息 |
系统参数
数据库名
- 查看状态:
SHOW PARAMETER GLOBAL_NAME;
- 查值:
SELECT * FROM GLOBAL_NAME
; - 改值:
1
2ALTER SYSTEM SET GLOBAL_NAMES = true;
ALTER DATABASE RENAME GLOBAL_NAME TO orcl;
节省空间的参数
deferred_segment_creation
是11.2.0.4
版本的 Oracle 数据库新增参数,默认是 true。这会导致在 exp 时,没有 segment 的对象不会导出。即空表不会导出。
- 查看状态:
SHOW PARAMETER DEFERRED_SEGMENT_CREATION;
- 改值:
ALTER system SET deferred_segment_creation = false;
,关闭该功能,只对之后导入的表有效。
TABLESPACE 表空间
- 查询表空间存储路径:
SELECT * FROM dba_data_files;
创建表空间
1 | CREATE TEMPORARY TABLESPACE TEST_TEMP TEMPFILE 'C:\APP\USERNAME\ORADATA\LOCAL\TEST_TEMP01.DBF' SIZE 1024M AUTOEXTEND ON NEXT 32M MAXSIZE unlimited EXTENT MANAGEMENT LOCAL; |
TEMPORARY
,表示临时表空间,而且使用数据文件类型需设置为TEMPFILE
。TEMPFILE | DATAFILE
,表示存储的数据文件的类型。SIZE
,表示数据文件的初始大小AUTOEXTEND ON NEXT 32M
,表示自增长,当初始大小不够时,会自增长 32MMAXSIZE [unlimited | 2048M]
,表示自增长到不限制或限制为 2048M
修改表空间
1 | ALTER USER username defalut|temporary TABLESPACE tablespace_name; |
删除表空间
1 | -- 删除空的表空间,但是不包含物理文件 |
USER&ROLE 用户&赋权
创建用户
1 | -- Create the user |
删除用户
1 | drop user test cascade |
DBLink 数据库链接
查看 DBLink
1 | select owner,object_name from dba_objects where object_type='DATABASE LINK'; |
创建 DBLink
- 查看用户是否有权限
1 | select * from user_sys_privs t where t.privilege like upper('%link%'); |
- 所创建的 dblink 只能是创建者能使用,别的用户使用不了
SYS CREATE DATABASE LINK NO
- 删除权限
SYS DROP PUBLIC DATABASE LINK NO
- public 表示所创建的 dblink 所有用户都可以使用
SYS CREATE PUBLIC DATABASE LINK NO
- 如没有权限
1
2-- sys 用户下
grant CREATE PUBLIC DATABASE LINK,DROP PUBLIC DATABASE LINK to test; - 创建
1
2
3
4
5
6
7
8
9
10
11
12-- 没有配置 tnsnames.ora
create public database link dblinkname
connect to username
identified by password
using '(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = database_ip)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME =servicename)
)
)';1
2
3
4
5
6-- 已配置 tnsnames.ora
create public database link dblinktest
connect to username
identified by password
using 'test';
-- `test`即为 tnsnames.ora 中的 test = (DESCRIPTION = .....
删除 DBLink
1 | drop public database link dblinkname; |
常用查询
ROWNUM
1 | -- ROWNUM 小于某个数时可以直接作为查询条件(注意 ORACLE 不支持 SELECT TOP) |
分页
不排序
1 | -- 效率低 |
排序
1 | --排序 + 区间查询 1(效率低) |
时间
TO_CHAR
1 | SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') CURRENTTIME, |
TO_DATE
1 | SELECT TO_DATE('2009-07-04 05:02:01', 'YYYY-MM-DD HH24:MI:SS') CURRENTTIME, |
MONTHS_BETWEEN
1 | SELECT MONTHS_BETWEEN(TO_DATE('03-31-2014', 'MM-DD-YYYY'), |
NEXT_DAY
1 | SELECT SYSDATE TODAY, NEXT_DAY(SYSDATE, 6) NEXTWEEK FROM DUAL; |
INTERVAL
1 | SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') CURRENTTIME, |
BETWEEN AND
1 | SELECT id, date |
字符相关
长度
1 | SELECT LENGTH('ABCDEFG') LEN -- LENGTH |
截取、查找、连接、替换
1 | SELECT SUBSTR('ABCDEFG', 1, 5) SUBSTR, -- 字符串截取 |
去空格
1 | SELECT TRIM(' WISH ') TRIM, -- 去前后空格 |
去前后缀
1 | SELECT TRIM('W' FROM 'WISH') TRIM1, |
转码
1 | SELECT ASCII('A') A1, |
大小写转换
1 | SELECT LOWER('WISH') LOWER, |
转换
1 | SELECT TRANSLATE('WISH1', '1', 'Y') TRANSLATE, -- 转换,对应一位 (前面的位数大于等于后面的位数) |