Duangw

Oracle SQL参考

索引:

  1. 创建表
  2. 修改表
  3. 创建完整性约束的表
  4. 增加/修改完整性约束
  5. 设置约束的时效
  6. 创建索引
  7. 创建视图
  8. 创建序列
  9. 创建同义词
  10. 创建/修改用户
  11. 创建操作系统用户
  12. 权限管理
  13. 设置表空间限额
  14. 资源限制
  15. 管理表空间
  16. 控制文件
  17. 段、区间和数据块
  18. 回滚段
  19. 表分区
  20. 索引分区

1.创建表

CREATE TABLE [Schema.]table_name
( column datatype [DEFAULT expression]
[, column datatype [DEFAULT expression] ]
[… other column .. ]
)

 

2.修改表

ALTER TABLE [Schema.]table_name
[ ADD column datatype [ DEFAULT expression] ]
[ MODIFY column [datatype] [DEFAULT expression] ]
[ DROP column ]

 

3.创建完整性约束的表

CREATE TABLE [Schema.]table_name (
{ column datatype [DEFAULT expression]
  [CONSTRAINT constraint]
  {  [ NOT] NULL
     | {UNIQUE|PRIMARY KEY
  }
  | REFERENCES [ Schema.]table [(column)] [ON DELETE CASCADE]
  |CHECK (condition)
}
[another constraint specification ]
| [CONSTRAINT constraint ]
{ {UNIQUE|PRIMARY KEY} (column [, column] …)
  | FOREIGN KEY (column [, column] …) REFERENCES \
         [Schema.] table [(column [, column] …)] \
         [ ON DELETE {CASCADE|SET NULL}]
  | CHECK (condition)
}
[, … other columns/constraints or constraints ]
)

 

4.增加/修改完整性约束

ALTER TABLE [Schema.] table_name
 ADD [CONSTRAINT constraint]
 { {UNIQUE|PRIMARY KEY} (column [, column] …)
 | FOREIGN KEY (column [, column] …) REFERENCE \
        [Schema.] table [ (column [, column] …)] \
        [ ON DELETE {CASCADE|SET NULL}]
 | CHECK (condition) }

 

5.设置约束的时效

SET CONSTRAINT[S]
{ [Schema.]constraint [, [Schema.]constraint] …
| ALL}
{IMMEDIATE | DEFERRED }

 

6.创建索引

CREATE [UNIQUE] INDEX  [Schema.] index
  ON  [Schema.] table
  ( column [ASC|DESC] [, column [ASC|DESC] ] …)

 

7.创建视图

CREATE [ OR REPLACE] VIEW [Schema.] view
AS subquery
[ WITH READ ONLY ]

 

8.创建序列

序列是一个能生成一系列唯一整数值的模式对象,它仅适用于使用简单数值列作为主键的表。

CREATE SEQUENCE [Schema.] sequence
[ START WITH integer ]
[ INCREMENT BY integer ]
[ MAXVALUE integer | NOMAXVALUE ]
[ MINVALUE integer | NOMINVALUE ]
[ CYCLE | NOCYCLE ]
[ ORDER | NOORDER ]

使用方法:

CREATE SEQUENCE order_ids
  START WITH 2
  INCREMENT BY 1
  NOMAXVALUE;

为了替用户生成一个新的序列号,SQL语句必须引用该序列和它的NEXTVAL伪列。如:

INSERT INTO orders( id, c_id, orderdate, status )
VALUES ( order_ids.NEXTVAL, 2, ’18-JUN-99’, ‘B’ );

使用当前的序列号,使用CURRVAL伪列,可以任意次重用当前的序列号。如:

INSERT INTO items( o_id, id, quantity)
  VALUES(order_ids.CURRVAL, 1, 1 );
INSERT INTO items( o_id, id, quantity)
  VALUES(order_ids.CURRVAL, 2, 4 );

 

9.创建同义词

同义词是存储在数据库中的表、视图、序列或其他模式对象的别名。有公用同义词和私有同义词。

CREATE [PUBLIC] SYNONYM [Schema.] synonym
  FOR [Schema.] object

 

10.创建/修改用户

{CREATE|ALTER} USER user
 IDENTIFIED BY password
 [DEFAULT TABLESPACE tablespace ]
 [TEMPORARY TABLESPACE tablespace ]
 [PASSWORD EXPIRE]
 [ACCOUNT {LOCK|UNLOCK}]

可指定用户缺省表空间,缺省为SYSTEM表空间。

可指定用户临时表空间,缺省临时表空间为SYSTEM空间。

系统缺省用户帐号:

 

11.创建操作系统用户

创建操作系统用户方法:

对于Oracle7.x:

create user ops$username identified externally …;

对于Oracle8i:

create user username identified externally…;

其中username是操作系统的用户。

使用时,以username用户登陆,执行“sqlplus /”即可,不需输入用户名和密码。

 

12.权限管理

(1).系统权限常用列表
权限 说明
CREATE SESSION 能连接到数据库服务器并建立数据库会话
CREATE TABLE 能在自己的模式中创建表
CREATE ANY TABLE 能在数据库的任何模式中创建表
CREATE ANY TYPE 能在数据库的任何模式中创建类型及关联类型体
SELECT ANY TABLE 能查询数据库中的任何表
EXECUTE ANY PROCEDURE 能在数据库中执行任何存储过程、存储函数或打包部件
EXECUTE ANY TYPE 能引用和执行数据库中任何类型的方法
(2).授予用户系统权限
GRANT privilege [, privilege ] …
 TO user [, user ] …
 [WITH ADMIN OPTION ]

要向所有用户授权,可以使用PUBLIC。

(3).撤销用户系统权限
REVOKE privilege [, privilege ] …
 FROM user [, user ] …
(4).对象权限列表
对象类型 对象权限 特别说明
SELECT、INSERT、UPDATE、DELETE、ALTER、INDEX、REFERENCES INDEX权限允许为表创建索引;当声明了参照完整性约束时,REFERENCES允许参照这个表;可以为INSERT、UPDATE和REFERENCES权限授予列选择权。
视图 SELECT、INSERT、UPDATE、DELETE 可以为INSERT、UPDATE权限授予列选择权。
序列 SELECT、ALTER SELECT权限能利用序列的NEXTVAL和CURRVAL来生成和重用序列号。
过程、函数、包、对象类型 EXECUTE
(5).授予用户对象权限
GRANT
 { privilege [, privilege ] …
 | ALL [PRIVILEGES] }
 ON { [Schema.]object | DIRECTORY directory }
 TO user [, user ] …
 [WITH GRANT OPTION]
(6).撤销用户对象权限
REVOKR
 { privilege [, privilege] …
 | ALL [PRIVILEGE ] }
 ON { [Schema.]object | DIRECTORY directory }
 FROM user [, user] …
 [CASCADE CONSTRAINTS]
 [FORCE]
(7).预定义数据库角色
角色 说明
CONNECT 能连接到数据库,在相关模式中创建表、视图、同义词、序列和一些其它的对象类型。
RESOURCE 能在相关模式中创建表、序列、数据镞、过程、函数、包、触发器、对象类型、基于函数的索引和用户自定义的操作符。
DBA 能执行任何数据库功能。
SELECT_CATALOG_ROLE 查询管理员(DBA_)数据字典视图
EXECUTE_CATALOG_ROLE 能运行预制的DBMS工具包
(8).创建角色
GRANT ROLE role
[ NOT IDENTIFIED | IDENTIFIED BY password ]
(9).给角色授予系统权限和角色
GRANT privilege|role [, privilege|role ] …
TO role [, role ] …
[WITH ADMIN OPTION]
(10).给角色授予对象权限

同“授予用户对象权限”。但不允许向一个角色授予用于表的REFERENCES对象权限。

(11).向用户授予角色
GRANT role [, role ] …
TO user [, user ] …
[WITH ADMIN OPTION ]
(12).设置用户的缺省角色
ALTER USER user
 [ DEFAULT ROLE
 { role [, role ] …
 | ALL [ EXCEPT role [, role ] … ]
 | NONE } ]
(13).启用和禁用角色
SET ROLE
 { role [IDENTIFIED BY password] \
 [, role [IDENTIFIED BY password]…]
 | ALL [EXCEPT role [, role ] .. ]
 | NONE }

 

13.设置表空间限额

ALTER USER user
 [ QUOTA {integer [ K | M] |UNLIMITED } ON tablespace] …

若要为所有的表空间授予无限制的定额,可直接给用户授予UNLIMITED TABLESPACE权限。如:

GRANT UNLIMITED TABLESPACE TO rlane;

不能向角色授予该权限。

 

14.资源限制

(1).启用资源限制

缺省时,启动数据库不实施资源限制。要启用/禁止该限制,使用如下命令:

ALTER SYSTEM
  SET RESOURCE_LIMIT = { TRUE | FALSE }

该命令只对当前实例有效,若要永久使用资源限制,编辑服务器的初始化参数文件,包含如下设置:

RESOURCE_LIMIT = TRUE
(2).创建资源配置表
CREATE PROFILE profile  LIMIT
 [SESSIONS_PER_USER {integer|UNLIMITED|DEFAULT}]
 [CPU_PER_SESSION {integer|UNLIMITED|DEFAULT}]
 [CPU_PER_CALL {integer|UNLIMITED|DEFAULT}]
 [CONNECT_TIME {integer|UNLIMITED|DEFAULT}]
 [IDLE_TIME {integer|UNLIMITED|DEFAULT}]
 [LOGICAL_READS_PER_SESSION {integer | UNLIMITED | DEFAULT}]
 [LOGICAL_READS_PER_CALL {integer | UNLIMITED | DEFAULT}]
 [COMPOSITE_LIMIT {integer | UNLIMITED | DEFAULT}]
 [PRIVATE_SGA {integer [K|M]| UNLIMITED | DEFAULT}]
 [FAILED_LOGIN_ATTEMPTS {integer | UNLIMITED | DEFAULT}]
 [PASSWORD_LIFE_TIME {integer | UNLIMITED | DEFAULT}]
 [PASSWORD_REUSE_TIME {integer | UNLIMITED | DEFAULT}]
 [PASSWORD_REUSE_MAX {integer | UNLIMITED | DEFAULT}]
 [PASSWORD_LOCK_TIME {integer | UNLIMITED | DEFAULT}]
 [PASSWORD_GRACE_TIME {integer | UNLIMITED | DEFAULT}]
 [PASSWORD_VERIFY_FUNCTION {NULL | function | DEFAULT } ]
(3).更改资源配置表设置
ALTER PROFILE profile LIMIT
[SESSIONS_PER_USER {integer|UNLIMITED|DEFAULT}]
 [CPU_PER_SESSION {integer|UNLIMITED|DEFAULT}]
 [CPU_PER_CALL {integer|UNLIMITED|DEFAULT}]
 [CONNECT_TIME {integer|UNLIMITED|DEFAULT}]
 [IDLE_TIME {integer|UNLIMITED|DEFAULT}]
 [LOGICAL_READS_PER_SESSION {integer | UNLIMITED | DEFAULT}]
 [LOGICAL_READS_PER_CALL {integer | UNLIMITED | DEFAULT}]
 [COMPOSITE_LIMIT {integer | UNLIMITED | DEFAULT}]
 [PRIVATE_SGA {integer [K|M]| UNLIMITED | DEFAULT}]
 [FAILED_LOGIN_ATTEMPTS {integer | UNLIMITED | DEFAULT}]
 [PASSWORD_LIFE_TIME {integer | UNLIMITED | DEFAULT}]
 [PASSWORD_REUSE_TIME {integer | UNLIMITED | DEFAULT}]
 [PASSWORD_REUSE_MAX {integer | UNLIMITED | DEFAULT}]
 [PASSWORD_LOCK_TIME {integer | UNLIMITED | DEFAULT}]
 [PASSWORD_GRACE_TIME {integer | UNLIMITED | DEFAULT}]
 [PASSWORD_VERIFY_FUNCTION {NULL | function | DEFAULT } ]
(4).手工强制用户口令过期
ALTER USER user
 PASSWORD EXPIRE
(5).使用口令复杂性检查

将PASSWORD_VERIFY_FUNCTION设置为一个函数名,若不使用,则将其置为NULL。

函数可参考$ORACLE_HOME/rdbms/admin/utlpwdmg.sql。

(6).设置用户的配置表
ALTER USER user
 PROFILE profile
(7).更改数据库的缺省配置表
ALTER PROFILE default LIMIT …

缺省配置表名为profile。

 

15.管理表空间

(1).创建表空间
CREATE TABLESPACE tablespace
 DATAFILE
   ‘filename’ [SIZE integer [K|M] ] [REUSE]
    [ AUTOEXTEND
     ( OFF
     | ON
      [NEXT integer [K|M] ]
      [MAXSIZE {UNLIMITED |integer [K|M]}] } ]
   [, … other data file specifications … ]
 [ ONLINE|OFFLINE]
 [PERMANENT|TEMPORARY]
(2).修改数据文件的存储特性
ALTER DATABASE
 DATAFILE ‘filename’
 { RESIZE integer [K|M]
 | AUTOEXTEND
 { OFF
 | ON [NEXT integer [K|M]] [MAXSIZE {UNLIMITED | \
                            integer[K|M] } ] } }
(3).转化成临时表空间或永久表空间
ALTER TABLESPACE tablespace
 [ PERMANENT | TEMPORARY ]
(4).合并表空间数据文件中的空闲空间
ALTER TABLESPACE tablespace
 COALESCE
(5).控制表空间的可用性
ALTER TABLESPACE tablespace
 { ONLINE | OFFLINE [ NORMAL | TEMPORARY | IMMEDIATE
 | FOR RECOVER ] }

 

16.控制文件

查看当前的控制文件,可查表v$controlfile。或者查询v$parameter视图:

SELECT name, value FROM v$parameter
  WHERE name = ‘control_files’;

 

17.段、区间和数据块

Oracle为数据库对象(表、索引、数据镞等)分配一组连续的数据块作为区间。段是专用于数据库对象存储的所有区间的集合。

数据库可以包含许多不同类型的段,如数据段、索引段、LOB段、溢出段、会滚段和临时段。

当创建数据库时,可以指定数据块的大小,块的大小必须等于服务器操作系统块的大小或其倍数的大小。

(1).在指定的表空间创建表
CREATE TABLE table (
…
) TABLESPACE tablespace;
(2).控制表区间的数量和大小

在创建表语句之后增加STORAGE子句:

CREATE/ALTER TABLE table (
 …
)
STORAGE (
 [ INITIAL integer [K|M] ]
 [ NEXT integer [K|M] ]
 [ MINEXTENTS integer ]
 [ MAXEXTENTS { integer | UNLIMITED } ]
 [ PCTINCREASE integer ]
(3).更改表区间的设置
ALTER TABLE table
STORAGE (
 [ NEXT integer [K|M] ]
 [ MAXEXTENTS { integer | UNLIMITED } ]
 [ PCTINCREASE integer ]
(4).设置对象的数据块

在对象的CREATE命令后面增加如下设置:

[ PCTUSED integer ] [ PCTFREE integer ]
[ INITRANS integer ] [ MAXTRANS integer ]
[ STORAGE (
… other storage parameters …
[ FREELIST GROUPS integer ] [ FREELISTS integer ] ) ]
(5).为对象存储进行缺省设置

可以在对象使用的表空间中进行缺省设置:

CREATE/ALTER TABLESPACE tablespace
…
DEFAULT STORAGE (
[ INITIAL integer [K|M] ]
 [ NEXT integer [K|M] ]
 [ MINEXTENTS integer ]
 [ MAXEXTENTS { integer | UNLIMITED } ]
 [ PCTINCREASE integer ]

 

18.回滚段

Oracle使用回滚段来记录事务的回滚数据,回滚段是一个区间构成的环形结构。

每个Oracle数据库都至少有一个会滚段,即SYSTEM(系统)回滚段。当创建新的数据库后,应该创建附加的回滚段。

数据库中可以有多个回滚段。多个事务可以共享一个单独的回滚段,但一个事物从不使用超过一个的回滚段。

(1).创建回滚段
CREATE [PUBLIC] ROLLBACK SEGMENT segment
 [TABLESPACE tablespace ]
 [STORAGE (
  [INITIAL integer [K|M] ]
  [NEXT integer [K|M] ]
  [MINEXTENTS integer ]
  [MAXEXTENTS integer ]
  [OPTIMAL { integer [K|M] | NULL } ] ) ]

回滚段始终不少于两个区间(即MINEXTENTS>=2)。

(2).控制回滚段的可用性
ALTER ROLLBACK SEGMENT segment
 { ONLINE | OFFLINE }
(3).更改回滚段的存储设置
ALTER ROLLBACK SEGMENT segment
STORAGE (
  [NEXT integer [K|M] ]
  [MINEXTENTS integer ]
  [MAXEXTENTS integer ]
  [OPTIMAL { integer [K|M] | NULL } ] ) ]
(4).指定事务使用的回滚段
SET TRANSACTION USE ROLLBACK SEGMENT segment

 

19.表分区

(1).创建范围分区表
CREATE TABLE table
( … columns and constraints … )
PARTITION BY RANGE ( column [, column] … )
 ( PARTITION [ partition ]
  VALUES LESS THAN ( {value list | MAXVALUE} )
  [ PCTFREE integer ] [ PCTUSED integer ]
  [ INITRANS integer ] [ MAXTRANS integer ]
  [ TABLESPACE tablespace ]
  [ STORAGE ( … ) ]
[, … ] )
(2).更改范围分区表

增加:

ALTER TABLE table
 ADD PARTITION [ partition ]
  VALUES LESS THAN ( {value list | MAXVALUE} )
  [ PCTFREE integer ] [ PCTUSED integer ]
  [ INITRANS integer ] [ MAXTRANS integer ]
  [ TABLESPACE tablespace ]
  [ STORAGE ( … ) ]

删除:

ALTER TABLE table
 DROP PARTITION [ partition ]
(3).创建散列分区表
PARTITION BY HASH ( column [, column ] … )
 { PARTITION integer STORE IN ( tablespace [, tablespace ] … )
 | ( PARTITION [ parition ]
  [ PCTFREE integer ] [ PCTUSED integer ]
  [ INITRANS integer ] [ MAXTRANS integer ]
  [ TABLESPACE tablespace ]
  [ STORAGE ( … ) ]
 [, … ] ) }

 

20.索引分区

(1).创建全局索引

在CREATE INDEX中增加GLOBAL、PARTITION BY RANGE子句,形式同前面CREATE TABLE。

(2).创建局部、等同分区索引

在CREATE INDEX语句中增加LOCAL关键字。