OCP-047(Les13 Managing Schema Objects)[20171220]

目的:

增加约束

创建索引

使用CREATE TABLE语句创建索引

创建函数索引

删除列和将列置为UNUSED

平台FLASHBACK闪回操作

创建临时表

创建和使用外部表

ALTER TABLE语句

-增加列

-修改已存在的列

-定义列的默认值

-删除列

语法

ALTER TABLE table_name ADD (column datatype [DEFAULT expr] [,column datatype] . . .);

ALTER TABLE table_name MODIFY (column datatype [DEFAULT expr] [,column datatype] . . .);

ALTER TABLE table_name DROP (column);

ALTER TABLE table_name SET UNUSED column_name;

ALTER TABLE table_name DROP UNUSED COLUMNS;

ALTER TABLE table_name READ ONLY;

ALTER TABLE table_name READ WRITE;

增加列

-新增列不能指定列的显示位置。新列成为最后一列

注意:增加新列NOT NULL约束时,如果表中已有资料NOT NULL约束将失败。

修改列

-可以对列的数据类型、大小和默认值进行更改。

-满足以下条件,可以减少列的宽度

-该列仅包含空值

-空表

-减少的列宽不小于该列中的现有值

-如果该列子包含空值,则可以更改数据类型。char-to-varchar2有数据也可以转换。

-对列的默认值更改只会影响后续的插入。

删除列

-该列包含或不包含数据

-使用ALTER TABLE 语句,一次只能删除一列

-表格中必须至少保留一列

-列被删除后,无法恢复

-如果列是约束的一部分或者是索引键上的栏(测试主键和外键),则不能删除列,除非添加了cascade级联选项

-如果列上有大量的数据,删除列需要一些时间。这种情况下最好将其设置为UNUSED状态,并在系统上的用户较少时将其丢弃,以避免扩大锁定。

注意:某些列永远不能被删除,例如构成分区表分区键的列或构成索引组织表的主键一部分的列。

SET UNUSED

-SET UNUSED将一列或多列标记为未使用,以便在系统资源需求较低时可将其删除。它并不会从实际空间进行删除,因此响应时间比执行DROP子句更快。列被标记为未使用之后,将无权访问该列。

-SET UNUSED信息存储于USER_UNUSED_COL_TABS数据字典中。

注意:SET UNUSED的原则与DROP相似

约束

-可以增加、删除、启用/关闭约束,但不能改变其结构。

-增加NOT NULL约束,必须使用ALTER TABLE MODIFY语句。

注意:只能在空表的列上增加NOT NULL约束或者列上每一行都有值。

语法

ALTER TABLE <table_name > ADD [CONSTRAINT <constraint_name>] TYPE (<column_name>);

-ON DELETE CASCADE级联删除

允许子表引用的父键数据被删除,但不被更新。当父表中键值删除时,子表中依赖值的所有行也被删除。在FOREIGN KEY外键约束中指定ON DELELTE CASCADE选项。

-ON DELETE SET NULL级联置空

当父表中键值删除时,子表中依赖值置空。

延迟约束

-DEFERRABLE or NOT DEFERRABLE

-INITIALLY DEFERRED or INITIALLY IMMEDIATE

推迟约束检查,直达事务结束时才进行约束检查。如果违反约束,则整个事务将回滚。

ALTER TABLE <table_name> ADD CONSTRAINT <constraint_name> PRIMARY KEY (column_name) DEFERRABLE INITIALLY DEFERRED;

SET CONSTRAINTS <constraint_name> IMMEDIATE;

ALTER SESSION SET CONSTRAINTS=IMMEDIATE;

删除约束

ALTER TABLE <table_name> DROP CONSTRAINT <constraint_name>;

ALTER TABLE <table_name> DROP PRIMARY KEY|UNIQUE (column) | CONSTRAINT <constraint_name> [CASCADE];

关闭约束

ALTER TABLE <table_name> DISABLE CONSTRAINT <constraint_name> [CASCADE];

注意:关闭唯一性约束和主键约束时,相关的索引会进行删除。

启用约束

ALTER TABLE <table_name> ENABLE CONSTRAINT <constraint_name> ;

注意:启用主键约束时,依赖此主键的外键约束不会级联启用。

级联约束

ALTER TABLE <table_name> DROP COLUMN <column_name> CASCADE CONSTRAINTS;->如果列上有引用使用cascade constraints选项可以级联删除列。

索引

索引类型:

唯一性索引:PRIMARY KEY和UNIQUE约束会自动创建唯一性索引。

非唯一性索引:用户自定义创建索引。CREATE INDEX/CREATE TABLE

注意:创建唯一性索引时,建议创建一个唯一性约束,因为它会隐式的创建一个唯一性索引。

重用Index

ALTER TABLE <table_name> ADD PRIMARY KEY (column_name) USING INDEX <index_name>;

基于函数的索引

-索引上是表达式可以是:列、约束、SQL 函数和用户自定义函数。

注意:使用函数索引必须将参数QUERY_REWRITE_ENABLED设定为TRUE

CREATE INDEX <index_name> ON table_name(UPPER(column_name));

select * from ocp_047_base_function where upper(col)=upper(‘name‘);

select * from table(dbms_xplan.display_cursor());

删除索引

DROP INDEX <index_name>;

删除表

DROP TABLE <table_name> [PURGE];

Oracle 10g引入了一个删除表的新功能。删除表时,数据库不会立即释放与该表关联的空间。而是将表重命名放入回收站中,如果发现错误地删除,则可以使用FLASHBACK TABLE语句恢复该表。如果想立即释放空间可以使用DROP TABLE [PRUGE]语句。

注意:SYS(AS SYSDBA)账户删除的表不会放入回收站中。

FLASHBACK TABLE闪回

FLASHBACK TABLE [schema .] table [, [schema.] table ...] TO { TIMESTAMP | SCN } expr [ { ENABLE | DISABLE} TRIGGERS];

-Oracle 10g提供的新特性DDL命令,FLASHBACK TABLE

-将表恢复到较早的时间点或防止意外删除和修改表

-FLASHBACK TABLE 是一种自助修复工具,用于恢复表中的数据以及索引或视图

-数据库联机时完成,只需回滚指定的表。

-与传统恢复机制相比,此功能提供了易用性、可用性和更快恢复等优势。

-默认情况下所有涉及的表都禁用触发器,也可以指定ENABLE TRIGGERS来启用。

SQL>  show recyclebin

ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME

---------------- ------------------------------ ------------ -------------------

EMP#             BIN$X5JCv1b5JHDgU+sCHqzk8Q==$0 TABLE        2017-12-05:13:39:38

EMP$_#           BIN$X5JCv1b+JHDgU+sCHqzk8Q==$0 TABLE        2017-12-05:13:40:12

EmP              BIN$X5JCv1cDJHDgU+sCHqzk8Q==$0 TABLE        2017-12-05:13:40:21

INSERT_TAB       BIN$X6NQR/0SAVbgU+sCHqzqQg==$0 TABLE        2017-12-06:10:39:32

INSERT_TAB       BIN$X6NQR/0MAVbgU+sCHqzqQg==$0 TABLE        2017-12-06:10:20:06

SQL> desc recyclebin

Name                                      Null?    Type

----------------------------------------- -------- ----------------------------

OBJECT_NAME                               NOT NULL VARCHAR2(30)

ORIGINAL_NAME                                      VARCHAR2(32)

OPERATION                                          VARCHAR2(9)

TYPE                                               VARCHAR2(25)

TS_NAME                                            VARCHAR2(30)

CREATETIME                                         VARCHAR2(19)

DROPTIME                                           VARCHAR2(19)

DROPSCN                                            NUMBER

PARTITION_NAME                                     VARCHAR2(32)

CAN_UNDROP                                         VARCHAR2(3)

CAN_PURGE                                          VARCHAR2(3)

RELATED                                   NOT NULL NUMBER

BASE_OBJECT                               NOT NULL NUMBER

PURGE_OBJECT                              NOT NULL NUMBER

SPACE                                              NUMBER

SQL> select original_name,operation,droptime from recyclebin;

ORIGINAL_NAME                    OPERATION DROPTIME

-------------------------------- --------- -------------------

EMP#                             DROP      2017-12-05:13:39:38

EMP$_#                           DROP      2017-12-05:13:40:12

EmP                              DROP      2017-12-05:13:40:21

TAB_04                           DROP      2017-12-06:10:00:19

T01                              DROP      2017-12-20:17:11:48

INSERT_TAB                       DROP      2017-12-06:10:39:32

OCP_047_BASE_FUNCTION_V0         DROP      2017-12-20:17:05:53

OCP_047_BASE_FUNCTION            DROP      2017-12-20:17:05:53

INSERT_TAB                       DROP      2017-12-06:10:20:06

闪回表

FLASHBACK TABLE <table_name> TO BEFORE DROP;

临时表

CREATE GLOBAL TEMPORARY TABLE <table_name> ON COMMIT [PRESERVE | DELETE ] ROWS;

-PRESERVE ROWS :保留至会话结束

-DELETE ROWS:保留至事务结束

14:17:38 SQL> create global temporary table temp_t0

14:18:23   2  on commit preserve rows as select * from employees where rownum<20;

已建立表格.

14:19:21 SQL> select count(*) from temp_t0;

COUNT(*)

----------

19

14:19:25 SQL> commit;

確認完成.

14:19:29 SQL> select count(*) from temp_t0;

COUNT(*)

----------

19

14:20:27 SQL> create global temporary table temp_t0 on commit

14:28:25   2  delete rows as select * from employees where rownum<20;

已建立表格.

14:28:44 SQL> select * from temp_t0;

沒有任何資料列被選取

14:28:51 SQL> select count(*) from temp_t0;

COUNT(*)

----------

0

14:29:06 SQL> insert into temp_t0  select * from employees;

已建立 107 個資料列.

14:29:23 SQL> select count(*) from temp_t0;

COUNT(*)

----------

107

14:29:33 SQL> commit;

確認完成.

14:29:36 SQL> select count(*) from temp_t0;

COUNT(*)

----------

0

14:29:37 SQL>

外部表

外部表是一个只读表,元数据存储在数据库中,但其数据存储在数据库之外。外部表可以被认为是一个视图,可以对外部数据进行SQL查询,而不需要将外部数据加载到数据库中。

外部表不能进行DML操作、建立索引。但可以使用CREATE TABLE AS SELECT加载数据到数据库中。

外部表提供了两个访问驱动程序:ORACLE_LOADER和ORACLE_DATAPUMP

-ORACLE_LOADER将外部数据映射到数据库

-ORACLE_DATAPUMP将数据库资料卸载到外部文件

外部表的创建

-创建目录提供给外部表 CREATE [OR REPLACE] DIRECTORY <directory_name> AS ‘directory_path‘;

-授权目录给使用账户 GRANT READ ON DIRECTORY <directory_name> TO schema_name;

ORACLE_DATAPUMP

CREATE TABLE extract_emps

ORGANIZATION EXTERNAL (TYPE ORACLE_DATAPUMP

DEFAULT DIRECTORY ...

ACCESS PARAMETERS (...)

LOCATION (...)

PARALLEL 4

REJECT LIMIT UNLIMITED

AS

SELECT * FROM ...;

create table extract_datapump

(last_name,employee_id,salary)

organization external

(type oracle_datapump

default directory expdp_path

location(‘emp_01.bat‘,‘emp_02.bat‘))

parallel

as

select last_name,employee_id,salary from employees

;

[[email protected] bak]$ strings emp_01.bat|tail

      Perkins

      Bell

      Everett

ORACLE_LOADER

CREATE TABLE extract_loader ( --表名称

fname char(25), --字段名

lname char(25)) --字段名

ORGANIZATION EXTERNAL --外部表

(TYPE ORACLE_LOADER  --外部表驱动器

DEFAULT DIRECTORY <directory_name> --默认目录

ACCESS PARAMETERS --标识访问参数

(RECORDS DELIMITED BY NEWLINE

NOBADFILE --不产生故障文件

NOLOGFILE --不产生日志文件

FIELDS TERMINATED BY ‘,‘ --区分符

(fname POSITION (1:20) CHAR, --定义文件类型对应值

lname POSITION (22:41) CHAR))

LOCATION (‘file_name‘))--加载文件名称

PARALLEL 5 --并行度

REJECT LIMIT 200; --限制错误的个数及停止查询

外部表创建语法

CREATE TABLE <table_name>

(<col_name> <datatype>, ... )

ORGANIZATION EXTERNAL

(TYPE <access_driver_type>

DEFAULT DIRECTORY <directory_name>

ACCESS PARAMETERS

( ... ) )

LOCATION (‘<localtion_specifier>‘) )

REJECT LIMIT [ 0 | <number> | UNLIMITED];

时间: 2024-08-11 07:20:25

OCP-047(Les13 Managing Schema Objects)[20171220]的相关文章

Oracle Schema Objects

One characteristic of an RDBMS is the independence of physical data storage from logical data structures. RDBMS的特点之一是物理数据与逻辑数据结构的独立性. Introduction to Schema Objects Schema Object Types Schema Object Storage Schema Object Dependencies SYS and SYSTEM S

Oracle Schema Objects——伪列ROWID Pseudocolumn(ROWNUM、ROWID)

Oracle Schema Objects Oracle Schema Objects——Tables——Oracle Data Types Oracle伪列 在Oracle数据库之中为了实现完整的关系数据库的功能,专门为用户提供了许多的伪列. “NEXTVAL”和“CURRVAL”就是两个默认提供的操作伪列Oracle Schema Objects——Sequences(伪列:nextval,currval) SYSDATE与SYSTIMESTAMP也属于伪列SQL Fundamentals

Oracle Database Concepts:介绍模式对象(Introduction to Schema Objects)

数据库模式(schema)是数据结构的逻辑容器,被称作模式对象(schema objects) 每一个数据库用户拥有一个和用户名相同的模式,例如hr用户拥有hr模式. 在一个产品数据库中,模式的拥有者通常是数据库应用程序而不是一个人. 在一个模式中,每一个模式对象都有一个唯一的名字.如hr.employees代表hr模式下的employees表. 如下图所示: 模式对象的类型 最重要的模式对象是关系型数据库中的表(table), Oracle SQL使你能创建和操作其他类型的模式对象.如下: 1

Oracle Schema Objects——PARTITION

Oracle Schema Objects 表分区 表- - 分区( partition )TABLE PARTITION 一段时间给出一个分区,这样方便数据的管理. 可以按照范围range分区,列表分区,哈希分区等. 创建表分区: SQL> create table t_part(id int) 2 partition by range(id) 3 (partition p1 values less than(5), 4 partition p2 values less than(10), 5

Oracle Schema Objects——Tables——Table Compression

Table Compression 表压缩 The database can use table compression to reduce the amount of storage required for the table. 数据库可以使用表压缩来消除数据块中的重复值. Compression saves disk space, reduces memory use in the database buffer cache, and in some cases speeds query

Oracle Schema Objects——Tables——Oracle Data Types

Character Data Types 字符数据类型 Character data types store character (alphanumeric) data in strings. 字符数据类型存储在字符串中的字符 (字母或数字) 数据. The most commonly used character data type is VARCHAR2, which is the most efficient option for storing character data. 最常用的字

Oracle Schema Objects——Tables——Overview of Tables

Overview of Tables A table is the basic unit of data organization in an Oracle database. 表是Oracle数据库中的数据组织的基本单位. A table describes an entity, which is something of significance about which information must be recorded. 一个表描述了一个实体,其相关重要信息必须被记录. A tabl

Oracle Schema Objects——Tables——TableStorage

Table Storage Oracle数据库如何保存表数据? Oracle Database uses a data segment in a tablespace to hold table data. Oracle 数据库使用表空间中的数据段保存表数据. As explained in "User Segments", a segment contains extents made up of data blocks. 如"用户段"所述,段包含由数据块组成的扩

Oracle_071_lesson_p15

Managing Schema Objects管理模式对象 you should be able to: 1.Manage constraints 2.Create and use temporary tables3.Create and use external tables Use the ALTER TABLE statement to:1.Add or drop a constraint, but not to modify its structure2.Enable or disabl