oracle数据库对象
第四章理论课数据库对象

《Oracle数据库应用》理论课数据库对象⏹本章技能目标◆使用同义词◆使用序列◆创建视图◆创建索引1.数据库对象Oracle 数据库对象又称模式对象。
数据库对象是逻辑结构的集合,最基本的数据库对象是表。
其他数据库对象包括:同义词,序列,视图,索引。
下面我们依次讲解这几个数据库对象的使用。
2.同义词同义词是数据库对象的一个别名,这些对象可以是表,视图,序列,过程,函数,程序包,甚至其它同义词,通过使用同义词,用户可以访问其它模式的数据库对象而无需指定模式前缀,例如用户USER1要访问用户USER2的表EMP,必须使用USER2.EMP,那么USER1就可以使用同义词像访问自己的表一样引用USER2.EMP了。
同义词有以下用途:简化SQL语句隐藏对象的名称和所有者提供对对象的公共访问为分布式数据库德远程对象提供了位置透明性同义词允许应用程序访问数据库对象,不论那个用户或哪个数据库拥有该对象。
但是同义词不能代替权限,在使用同义词之前确保用户已得到访问对象的权限。
可以通过同义词执行SELECT,INSERT,UPDA TE,DELETE,LOCK TABLE ,GRANT和REVOKE 等语句。
同义词只是表的一个别名,因此对它的操作都会影响到表。
同义词共有两种类型:公有同义词。
私有同义词。
2.1私有同义词和公有同义词2私有同义词只能在其模式内访问,且不能与当前模式的对象同名。
要在自身的模式创建私有同义词,用户必须拥有CREATE SYNONYM 系统权限。
要在其它用户模式的创建私有同义词,用户必须CREATE ANY SYNONYM 系统权限.。
创建私有同义词语法如下:OR REPLACE 表示在同义词存在的情况下替换该同义词。
synonym_name 表示要创建的同义词的名称。
object_name 指定要为之创建同义词的对象的名称。
例1:假定两个用户模式:ACCP 和SCOTT ,SCOTT 用户拥有EMP表,ACCP 用户需要频繁引用EMP表,为了简化SQL语句,需要为ACCP 用户创建一个同义词。
Oracle中无效数据库对象的处理方法

Oracle中无效数据库对象的处理方法Oracle总是会尝试自动重编译无效的PL/SQL对象和视图,但是可能不会成功。
虽然Oracle可能建议手动地进行编译,不过我们并非必须进行这个操作。
通常无效对象的产生是由于数据库迁移,针对无效对象,我们可以采取重编译和索引重建。
1.1、标识无效的对象为了标识数据库中的所有无效的对象,我们可以作为SYSTEM用户或其他有权限的用户做如下查询。
SQL> select owner, object_name, object_typefrom dba_objectswhere status = 'INVALID';1.2、修正无效的对象编译对象SQL> alter procedure ADD_NUMS compile;Procedure altered.如果编译成功,就不存在问题,如果编译失败,就需要找出失败的原因。
SQL> show errors如果希望确定编译错误的原因,通常需要首先使用DBA_DEPENDENCIES视图。
SQL> desc dba_dependencies;Name Null? Type----------------------------------------- -------- ---------------OWNER NOT NULL VARCHAR2(30)NAME NOT NULL VARCHAR2(30)TYPE VARCHAR2(17)REFERENCED_OWNER VARCHAR2(30)REFERENCED_NAME VARCHAR2(64)REFERENCED_TYPE VARCHAR2(17)REFERENCED_LINK_NAME VARCHAR2(128)DEPENDENCY_TYPE VARCHAR2(4)如果要重新编译成百上千的的无效对象,可以运行下面命令。
SQL> @?/rdbms/admin/utlrp--编译无效对象脚本utlrp.sql$ sqlplus '/as sysdba' @?/rdbms/admin/utlrp.sqlutlrp.sql脚本可以在数据库运行的状态下执行以编译、数据库中的invalid对象.oracle建议在对数据库进行迁移、升级、降级后都运行一遍utlrp.sql以编译无效对象编辑于联动北方技术论坛。
Oracle数据库中的Cache对象

Oracle数据库中的Cache对象在Oracle10g之前,数据库中存在一个独一无二的Cache对象,这个对象就是:这个对象的名称来自于文件号和数据块号,1.417正好就是文件1的第417个数据块。
这个Cache对象在Oracle数据库中的含义非同一般,在bootstrap$的过程中,这个对象之前的所有对象都需要用来bootstrap。
我们看一下1.417之前的所有对象:一共有44个对象。
我们再来看一下初始化过程中bootstrap$中的信息:bootstarp的对象都是在1.417之前的,当然有部分对象是基于Cluster创建的。
那么这个对象在启动之前有什么作用呢?itpub上的jametong同学给出了一个重要的信息,在SYSTEM文件头, Oracle存储了一个root dba:Root dba: This field only occurs in data file #1, and is the location of blocks required during bootstrapping the data dictionary (bootstrap$)。
这个root dba指向了1.417对象,而1.417对象的上一个对象正是bootstrap$,Oracle 通过1.417找到了bootstrap$对象就可以启动了数据库。
我们可以从文件头的转储中找到这个root dba,以下是一个Oracle9i的数据文件头信息:这个root dba:0x004001a1 正好指向的是file 1 block 417而我们dump file 1 block 417就可以找到bootstrap$的地址:dba号00400179 正好指向的file 1 block 377。
在Oracle10g中,Oracle将这个root dba更改得更为直接:这里的root dba直接指向了0x00400179 ,也就是file 1 block 377。
Oracle 管理对象权限

Oracle 管理对象权限对象权限指访问其他用户模式对象的权利。
在Oracle数据库中,用户可以直接访问其模式对象,但如果要访问其他用户的模式对象时,必须具有相应的对象权限。
1.对象权限的分类根据不同的对象类型,Oracle数据库设置了不同类型的对象权限。
对象权限及对象之间的对应关系如表13-5所示。
表13-5 对象、对象权限的对应关系ALTE R DELETEEXECUTEINDEXINSERTRREADREFERENCESELECTUPDA TEDIRECTORY√FUNCTION √PROCEDURE√PACKAGE √SEQUENCE √√TABLE √√√√√√√VIEW √√√√其中,“√”表示某种对象所具有的对象权限,空格表示该对象没有某种权限。
例如,对于基本表TABLE,具有ALTER、DELETE、INDEX、INSERT、REFERENCES、SELECT、UPDATE权限,而没有EXECUTE权限。
多种权限组合在一起时,可以使用ALL关键字,表示该对象的全部权限,对于不同的对象,ALL组合的权限数量是不相同的。
对于表TABLE而言,ALL表示ALTER、DELETE、INDEX、INSERT、REFERENCES、SELECT、UPDATE权限;对于存储过程,ALL只代表EXECUTE权限。
2.授予对象权限对象权限由该对象的拥用者为其他用户授权,非对象的拥有者不得向其他用户授予对象授权。
将对象权限授出后,获权用户可以对对象进行相应的操作,没有授予的权限不得操作。
从Oracle 9i开始,DBA用户可以将任何对象权限授予其他用户。
授予对象权限所使用的GRANT语句形式如下:grant { object_priv [ (column_list) ] [,object_priv[(column_list)]]….| ALL [PRIVILEGES] ON [ schema.]objectTO { user | role | PUBLIC} [,{user | role | public}] …[with grant option]其中,OBJECT_PRIV是对象权限,COLUMN_LIST用于标识权限所对应列的列表,SCHEMA表示模式名,USER表示被授权的用户,ROLE表示被授权的角色。
数据库对象

实验四oracle对象管理及使用一、实验目的及要求掌握Oracle的常用对象的操作方法。
会使用常用对象解决一些实际问题。
二、实验主要内容(1) 表结构的建立、修改、查看、删除操作。
(2) 索引的建立、修改、查看、删除操作。
(3) 视图的建立、查询、修改、删除操作。
(4) 同义词的建立、查询、修改、删除操作,比较对同义词的操作与对原数据库对象的操作是否一致。
(5) 掌握序列的建立、查询、修改、删除操作,利用序列向数据库表中插入数据。
三、实验仪器设备在局域网环境下,有一台服务器和若干台客户机。
服务器成功安装Oracle 10g数据库服务器(企业版),客户机成功安装Oracle 10g客户端软件,网络服务配置正确,数据库和客户端正常工作。
四、实验步骤1.创建表结构利用命令行方式将下列各表建立到员工医疗保险系统数据库中。
表结构如附录员工医疗保险系统表1-表7所示。
2.查看表结构(1) 利用数据字典查看员工医疗保险系统所有表的字段信息和约束信息。
从数据字典DBA_TAB _COLUMNS查看员工医疗保险系统所有表的字段信息。
从数据字典DBA_ CONSTRAINTS查看员工医疗保险系统所有表的约束信息。
3.修改表结构(1) 将表“staff_sql”重新命名为“staff_sql0”。
(2) 为“staff_sql0”表添加“age ”字段,利用DESC命令查看“staff_sql0”表的字段信息。
(3) 为“staff_sql0”表添加“salary NUMBER(5,2)”、“salary_add NUMBER(3,1)”两个字段,利用DESC命令查看“staff_sql0”表的字段信息。
(4) 向“staff_sql0”表添加“sname”字段惟一性约束,从数据字典DBA_CONSTRAINTS查看“staff_sql0”表的约束信息。
(5) 删除“staff_sql0”表上“sname”字段惟一性约束,从数据字典DBA_CONSTRAINTS查看“staff_sql0”表的约束信息。
解析Oracle数据库中的对象集合schema

解析Oracle数据库中的对象集合schema搭建⼀个oracle,下⾯会有很多schema,每个schema下的数据都不影响。
感觉和mysql的库的概念很像,现在⽤的数据库管理系统其实也是这么划分的,mysql⽤的ip+port+库标识,oracle⽤ip+port+schema标识,平时还总听到⼀个实例的概念,我的理解就是实例就是⼀系列相关进程,代表了⼀个数据库服务。
⽬前线上为了节省资源,常常把机器分成多个实例,⽤不同的端⼝号标识,每个实例上有多个schema。
旭哥跟我说的很形象,oracle⼀个实例上有对应多个库。
mysql⼀个库上应多个实例。
mysql的建库很灵活。
websql中⼀⾏数据中,name为mgmt_view,displayName为mgmt_view@dev_crm,jdbc为jdbc:oracle:thin:@10.232.31.XXX:1521:newcrm,jdbcusername为dev_ddl,DSName为dev_crm,DBName为newcrm(和jdbaURL上的⼀致),DBuser为mgmt_view,TNSName为dev_crm(应该是ora⽂件上的配置)。
name为stat,displayName为stat@dev_dbc ,jdbc为jdbc:oracle:thin:@10.232.31.XXX:1521:dev-dbc,jdbcusername为dev_ddl,DSName为dev-dbc,DBName为dev-dbc(和jdbaURL上的⼀致),DBuser为stat,TNSName为dev_dbc(应该是ora⽂件上的配置),我本地的ora⽂件有如下配置:LOCALTEST =(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = )(PORT = 1521))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = localtest)))这⾥⾯有个serviceName,还有的地⽅是SID,另外最开始还有个LOCALTEST名字,这个标识链接描述符。
Oracle基础必学知识点

Oracle基础必学知识点1. 数据库概念:Oracle是一种关系型数据库管理系统(RDBMS),用于存储和管理大量结构化数据。
它支持SQL语言,可以通过SQL语句进行数据查询、插入、更新和删除操作。
2. 数据库对象:Oracle数据库由多个对象组成,包括表、视图、索引、序列、存储过程等。
这些对象用于存储和处理数据,可以通过SQL语句进行操作。
3. 数据类型:Oracle支持多种数据类型,包括数字、字符、日期、大对象(LOB)等。
不同的数据类型用于存储不同类型的数据,可以根据需求选择合适的数据类型。
4. 表操作:在Oracle中,表用于存储数据。
可以使用CREATE TABLE语句创建表,使用INSERT语句插入数据,使用SELECT语句查询数据,使用UPDATE语句更新数据,使用DELETE语句删除数据。
5. 索引:索引是一种用于提高查询性能的数据结构。
在Oracle中,可以使用CREATE INDEX语句创建索引,通过索引可以快速定位到需要查询的数据,提高查询效率。
6. 数据约束:数据约束是用于保证数据的完整性和有效性的规则。
在Oracle中,可以使用约束来限制数据的取值范围、保证数据的唯一性等。
常见的约束类型包括主键约束、外键约束、唯一约束、非空约束等。
7. 视图:视图是一种虚拟表,它是从一个或多个表中获取数据的查询结果。
在Oracle中,可以使用CREATE VIEW语句创建视图,通过视图可以简化复杂的查询操作,提高数据的安全性。
8. 存储过程:存储过程是一组预先编译的SQL语句,存储在数据库中,并可以通过调用来执行。
在Oracle中,可以使用CREATE PROCEDURE语句创建存储过程,通过存储过程可以实现复杂的数据处理逻辑。
9. 事务控制:事务是一组逻辑操作,要么全部执行成功,要么全部回滚。
在Oracle中,可以使用BEGIN/END语句或者显式的事务语句(如COMMIT和ROLLBACK)来控制事务的提交或回滚。
Oracle 数据库对象_序列_索引_视图_同义词

查看序列情况
SELECT s_test.currval FROM dual; SELECT s_test.nextval FROM dual;
删除序列
删除序列使用DROP SEQUENCE语句
例如,删除s_test3序列
DROP SEQUENCE s_test3;
执行效果如下图所示:
索引介绍
使用序列填充主键-2
查询插入结果
SELECT * FROM order_status2;
查询结果如图所示
注意
Hale Waihona Puke 当使用序列填充主键列时,通常应使用NOCACHE避免序列产生的数 值发生遗漏(数值产生遗漏是因为缓存数值时,数据库被关闭)。然 而,使用NOCACHE虽然会降低性能。但是如果不介意主键值产生遗 漏,可以再考虑使用CACHE。
案例
使用默认选项创建序列
CREATE SEQUENCE s_test;
说明
创建序列忽略了其他选项,那么将会使用默认值。 start_num和increment_num都是1
指定相关选项创建序列
CREATE SEQUENCE s_test2 START WITH 10 INCREMENT BY 5 MINVALUE 10 MAXVALUE 20 CYCLE CACHE 2 ORDER;
说明
minimum_num:序列中的最小值,该值必须比start_num小,比 maximum_num也要小 NOMINVALUE:对于序列最小值,不指定最小值,对于升序最小值是1 ,对于降序最小值是-1026 CYCLE:对于序列的值达到最大值或最小值时的处理方法。如果是升序 达到最大值了,那么下一个生成的值将是最小值;如果是降序达到最小值 时,那么下一个值将是最大值。 NOCYCLE:当序列的值达到最大或最小值时,序列将不再产生任何数值 。默认是NOCYCLE。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
15
临时表
临时表:在一个会话或者是一个事务中保存临时数据的表。 有两种类型: 会话临时表(Session-Specific Temporary Table ) CREATE GLOBAL TEMPORARY TABLE ... [ON COMMIT PRESERVE ROWS ] 事务临时表(Transaction-Specific Temporary Table ) CREATE GLOBAL TEMPORARY TABLE ... [ON COMMIT DELETE ROWS ]
26
重建索引
为什么要重建索引? 对索引的表中的数据进行频繁的更新操作和删除时, 会导致索引的表空间中产生大量的碎片,会对查询和DM L语句的性能造成很大的影响;同时,会导致空间的浪费; 如何重建? 可以使用alter index ….. Rebuild来进行索引的重 建工作。
21
唯一索引
唯一索引 • 确保在定义索引的列中没有重复的值 • Oracle 自动为主键和唯一键列创建唯一索引 • CREATE UNIQUE INDEX 语句用于创建唯一索引
22
组合索引
组合索引 • 在表的多个列上创建的索引 • 也称为“连接索引” • 组合索引中的列可以按任意顺序排列 • 对于在 WHERE 子句中包含多个列的查询,可以提高数据 访问速度
4
表空间分类
表空间分为本地管理表空及字典管理表空二大类: a.本地管理表空 本地管理表空: 本地管理表空 减少了对数据字典表的争用 分配或回收空间时不生成还原数据 无需合并 建立本地管理表空方法如下:
CREATE TABLESPACE userdata DATAFILE ‘/home/ecif/oradata/dbs/userdata01.dbf' SIZE 500M EXTENT MANAGEMENT LOCAL UNIFORM SIZE 256K;
5
表空间分类
b.字典管理的表空间 b.字典管理的表空间 在数据字典中管理区 存储在表空间中的每个段都可以有不同的存储子句 需要合并
CREATE TABLESPACE userdata DATAFILE ‘/home/ecif/oradata/dbs/userdata01.dbf ' SIZE 500M EXTENT MANAGEMENT DICTIONARY DEFAULT STORAGE ( initial 1M NEXT 1M );
1
表空间和数据文件
Oracle 在逻辑上以表空间存储数据,而实际上以数据文件 进行存储。 表空间: – 某一时刻只能属于一个数据库 – 由一个或多个数据文件组成 – 可进一步划分为逻辑存储单元 数据文件: – 只能属于一个表空间和一个数据库 – 是方案对象数据的资料档案库
16
约束
约束强制规则在表级,是为了防止无效的数据进入表中而 设置的,由ORACLE数据库服务器对进入表中的数据进行的合 法性检查。 如果有从属关系,约束防止表的删除• 主要的约束类型有: –NOT NULL NOT –UNIQUE 唯一性约束 UNIQUE –PRIMARY KEY PRIMARY –FOREIGN KEY FOREIGN –CHECK CHECK
19
索引特点
加快 SQL 语句的执行 减少磁盘 I/O CREATE INDEX 语句用于创建索引 在逻辑上和物理上独立于表中的数据 Oracle 自动维护索引
ቤተ መጻሕፍቲ ባይዱ
20
索引分类
从逻辑上,索引可分为以下几类 – 单列/组合索引 – 唯一/非唯一 – 函数索引 从物理上,索引可以分为以下几类 – 分区或非分区 – B 树 – 位图(位图索引不能是唯一索引)
25
创建索引
参数说明 其中UNIQUE指定索引所基于的列(或多列)值必须唯一;默 认的索引是非唯一索引。Oracle 9i建议不要在表上显示定 义唯一索引;BITMAP指定建立位图索引而不是b-tree索引; index_name表示创建的索引名字;table_name指要创建索引 的表;cluster_name指创建索引的簇;n可以为任意正整数 值;tablespace_name表示要用于该索引的表空间。只有确 保拥有CREATE ANY INDEX系统权限时,才能使用CREATE INDEX语句。像INIYTRANS,MAXTRANS,PCTFREE,STORAGE, TABLESPACE等与存储有关的参数可以使用用户定义的缺省值。 参数No sort告诉Oracle 9i该表已经排序因此不需要再重新 排序。
100M app_data_02.dbf
200M app_data_03.dbf
8
删除表空间
不能删除下列表空间: – SYSTEM 表空间 – 具有活动段的表空间 INCLUDING CONTENTS 将删除段 INCLUDING CONTENTS AND DATAFILES 将删除 数据文件 CASCADE CONSTRAINTS 将删除所有引用完整性约束
23
基于函数的索引
基于函数的索引 • 基于一个或多个列上的函数或表达式创建的索引 • 表达式中不能包含聚集函数(sum,count,avg,min,max) • 不能在 LOB、REF 或嵌套表列上创建
24
创建索引
创建索引的语法形式 CREATE [UNIQUE | BITMAP] INDEX index_name ON table_name (column_name[ASC | DESC][,column_name[ASC | DESC]] …) [CLUSTER cluster_name] [INITRANS n] [MAXTRANS n] [PCTFREE n] [STORGE storage] [TABLESPACE tablespace_name] [NO sort]
6
改变数据文件的大小
通过如下命令改表数据文件的大小
ALTER DATABASE DATAFILE '/home/ecif/oradata/dbs/user01.dbf ' RESIZE 200M;
7
向表空间中添加数据文件
11
表的类型
常规表
分区表
12
创建分区表
表的分区类型: Hash分区 范围分区 列表分区 组合分区 Hash partitioning Composite partitioning
List partitioning
Range partitioning
13
17
定义约束示例
CREATE TABLE constraint_tab_infor( cust_id INTEGER PRIMARY KEY , first_name VARCHAR2(40) NOT NULL , age INTEGER CONSTRAINT age_constraint NOT NULL , salary NUMBER(18,2) CONSTRAINT salary_min CHECK( salary > 0 ) , email VARCHAR2(256), CONSTRAINT cust_email_uk UNIQUE(email) );
10
ORACLE内置的数据类型 内置的数据类型
Data type User-defined Scalar CHAR(N), NCHAR(N) VARCHAR2(N), NVARCHAR2(N) NUMBER(P,S) DATE TIMESTAMP RAW(N) BLOB, CLOB, NCLOB, BFILE LONG, LONG RAW ROWID, UROWID Built-in Collection VARRAY TABLE Relationship REF
18
索引的概念
索引允许Oracle 更快地访问数据。系统创建 了这个内部的数据结构(即索引),它导致当查 询以列为索引的时候搜索行,这样查询会快得 多。这个索引对于给定的列值通知Oracle找到 表中某一行,这有点类似书的索引,它告诉你 对于给定的关键字你能找到哪一页。 从内部结构看,索引就是一个表。索引具有多 行数据,在索引的列中包括一个索引的列的拷 贝和在被索引的表的相应的行ID。
2
表空间的类型
SYSTEM 表空间 – 随数据库创建 – 包含数据字典 – 包含SYSTEM 还原段 SYSTEM 非SYSTEM 表空间 SYSTEM – 用于分开存储段 – 易于空间管理 – 控制分配给用户的空间量
3
创建表空间
分区表的作用
减少I/O 提供表的数据的可维护性 提高访问性能 支持并行操作 等等
14
建表原则
创建表:原则 将各个表存放在单独的表空间中。 使用本地管理的表空间以避免产生存储碎片。 将表的标准区大小设置小一些,以减少表空间 存储碎片。
oracle 数 据 库 对 象
ORACLE数据库对象 数据库对象
ORACLE数据库主要有如下的数据库对象 tablespace and datafile(表空间和数据文件) Table(表) Constraints(约束) index(索引) View(视图) SEQUENCE(序列) Synonyms(同义词,又称别名) DB-LINK(数据库链路)
使用以下命令创建表空间: CREATE TABLESPACE 使用CREATE TABLESPACE 命令可创建表空间: CREATE TABLESPACE tablespace [DATAFILE clause] [MINIMUM EXTENT integer[K|M]] [BLOCKSIZE integer [K]] [LOGGING|NOLOGGING] [DEFAULT storage_clause ] [ONLINE|OFFLINE] [PERMANENT|TEMPORARY] [extent_management_clause] [segment_management_clause]