第六讲 Oracle数据库服务器例程
Oracle数据库管理与应用实例教程-数据库查询PPT课件
-
5.3 连接查询
等值连接 【例5-2】 需要了解所有订单中订购的商品信息(商品名称、购买价格 和购买数量)和订单日期。 【分析】在“订单表”中存放了订单号和订单产生日期等信息,而该订 单所购买的商品的信息(商品号、购买价格和购买数量)存放在“订单 详情”表中,商品的名称存放在“商品表”中,因此,订单表需要和订 单详情表通过订单号进行连接以获得订单中所购商品的商品号等信息, 而订单详情表需要和商品表进行连接以通过商品号获得商品名称信息。 主要涉及三个表的查询。 SELECT Orders.o_ID,o_Date,g_Name,d_Price,d_Number FROM SCOTT.Orders JOIN SCOTT.OrderDetails ON Orders.o_ID=OrderDetails.o_ID JOIN Goods ON OrderDetails.g_ID=Goods.g_ID;
8
-
5.2 简单查询
选择行-条件查询-使用通配符
【例2-7】 需要了解所有商品中以“三星”两个字开头的商品的详细信 息。 SELECT * FROM Goods WHERE g_Name LIKE '三星%‘ 【例2-8】 需要了解姓“黄”且名字中只有两个汉字的会员的会员名、 真实姓名、电话和电子邮箱。 SELECT c_Name, c_TrueName, c_Phone, c_E-mail FROM Customers WHERE c_TrueName LIKE '黄_'
6
-
5.2 简单查询
选择行-条件查询 【例2-1】 需要了解所有商品中的“热点”商品的所有信息。 SELECT * FROM SCOTT.Goods WHERE g_Status = '热点‘ 【例2-2】 需要了解商品类别为“01”,商品单价在2500元以上的商品 信息,要求以汉字标题显示商品号、商品名称、商品类别号和价格。 SELECT g_ID 商品号,g_Name 商品名称,t_ID 类别号,g_Price 价格 FROM Goods WHERE t_ID='01' AND g_Price>2500 【例2-3】 需要了解所有年龄在20~25岁之间的会员的名称和年龄 (用Nl表示,不是基本表中的字段,是计算出来的列)。 SELECT c_Name, TO_CHAR(SYSDATE,'YYYY') TO_CHAR(c_BIRTH,'YYYY') NL FROM Customers WHERE TO_CHAR(SYSDATE,'YYYY') - TO_CHAR(c_BIRTH,'YYYY') BETWEEN 20 AND 25
Oracle数据库应用课件6
CONN system/systempwd@orcl SET PAGESIZE 30 COL tablespace_name FORMAT A12
select tablespace_name, block_size, segment_space_management, status, contents, allocation_type, bigfile
6.1 创建Oracle数据库
创建Oracle数据库的先决条件
安装需要的Oracle软件 设置操作系统环境变量 在磁盘建立目录结构 获得相应的操作系统权限和Oracle的SYSDBA系统特权 充足的磁盘存储空间
创建数据库的方法
工具——DBCA 手工——使用SQL命令
使用DBCA创建数据库—推荐使用
Oracle数据库配置助手(DBCA),是一个图形用户界 面(GUI)工具,它可与Oracle通用安装程序进行交互 ,也可以单独使用,主要作用是简化数据库的创建 过程。
DBCA能完成的操作
➢ 创建数据库 ➢ 配置数据库选项 ➢ 删除数据库 ➢ 数据库创建模板管理 ➢ 配置自动存储管理(ASM)
操作方法:
手工创建Oracle数据库
在磁盘上建立相应的目录结构 设置操作系统环境变量 其他主要步骤如下:
➢ (1)决定实例标识符(Instance IDentifier,SID) ➢ (2)建立数据库管理员验证方法 ➢ (3)创建初始化参数文件 ➢ (4)在SQL*Plus中连接到实例 ➢ (5)启动实例 ➢ (6)发布CREATE DATABASE语句创建数据库 ➢ (7)创建其他表空间 ➢ (8)运行脚本来构建数据字典视图 ➢ (9)运行脚本来安装其它的选项
50M reuse uniform size 128k;
Oracle数据库系统教程PPT课件( 41页)
多个实体型之间的联系 同一个实体型内部联系
概念模型的表示方法
E-R图提供了表示实体型、属性和联系的方法。 实体:用矩形表示,矩形内写名实体名 属性:椭圆型表示 联系:用菱形表示,菱形内写明联系名,用无向 边分别与有关实体连接起来,同时在无向边旁标 上联系的类型(1:1 ,1:m或m:n)
数据库基础知识回顾 Oracle数据库产品介绍
本章要求
掌握数据库的基础知识 了解Oracle发展、产品组成、性能特点 了解Oracle数据库的应用架构
1.1数据库基础
数据库概念 数据管理的发展 数据库管理的特点 数据库管理系统 数据库系统构成
1.1.1数据库基本概念
应用程序1 应用程序2
……
数据库 管理系统
应用程序n
数据库
1.1.3数据模型
基本概念 概念模型 组织数据模型 关系模型
数据模型
是数据库系 统中用于提 供信息表示 和操作手段 的形式构架
应用 概念数据模型 结构数据模型
现实世界
信息世界
计算机世 界
实体型之间的联系
两个实体型之间的联系
人工管理阶段 文件管理阶段 数据库管理阶段
人工管理阶段
人工管理数据具有以下特点。
数据不保存
应用程序管理数据
数据不能共享
数据不具有独立性
应用程序是根据特定的一组数据结构进行编写的,当 数据的逻辑结构或物理结构发生变化时,必须对应用 程序进行针对性的修改。
应用程序 1
1.2 Oracle数据库系统
Oracle9i发展历史 Oracle9i产品组件 Oracle9i系统特点及新特征 Oracle9i数据库应用架构
Oracle数据库实操培训(汇编)(2024)
06
Oracle数据库安全防 护
2024/1/29
27
数据库安全策略制定
制定安全策略
根据业务需求,制定数据库的安全策略,包括访问控制、数据保护 、安全审计等方面。
安全风险评估
对数据库进行定期的安全风险评估,识别潜在的安全威胁和漏洞, 并采取相应的防护措施。
安全培训和意识提升
加强员工的安全培训和意识提升,提高员工对数据库安全的重视程度 和应对能力。
角色管理
创建角色并为其授予权 限,然后将角色授予用 户,实现权限的集中管
理和简化授权操作。
权限查询与监控
通过查询数据字典视图 ,如
`DBA_SYS_PRIVS`、 `DBA_TAB_PRIVS`、 `DBA_ROLES`等,了 解用户的权限情况和进
行权限监控。
2024/1/29
15
数据备份与恢复
数据备份策略
RMAN备份与恢复
数据泵导入导出
闪回技术
制定合适的数据备份策略,包 括备份类型(完全备份、增量 备份、差异备份等)、备份周 期、备份存储位置等。
2024/1/29
使用Oracle提供的RMAN( Recovery Manager)工具进 行备份和恢复操作,包括备份 数据库、归档日志、控制文件 等,并能够在数据丢失或损坏 时进行恢复。
使用表的别名
在SQL语句中,尽量使用表的别名,以减少解析的时间并增加可读性。
2024/1/29
18
索引优化
2024/1/29
选择性高的列
01
如果某个列的值很少重复,则该列的选择性就很高,适合创建
索引。
复合索引
02
对于经常一起使用的列,可以考虑创建复合索引。但要注意复
Oracle实例与管理数据库操作(ppt 22页)
wanghailiang
2—9
数据库简介
控制文件
数据文件
重做日志
数据库
wanghailiang
2—10
建立数据库
1. 启动实例
• 设置环境变量:SET ORACLE_SID=TEST • 以特权用户连接:sqlplus internal/admin • 启动实例:STARTUP NOMOUNT
2. 建立数据库
2. 数据字典视图 用catalog.sql脚本建立
wanghailiang
2—20
数据字典视图分类
DBA_xxx
数据库所有对象
ALL_xxx
用户可访问的所有对象
USER_xxx
用户所拥有的所有对象
wanghailiang
2—21
练习二
1. 建立参数文件initdb02.ora:
1. db_name=db02 2. control_files=c:\db02\db02.ctl 3. instance_name=db02 4. service_name=db02
CREATE DATABASE test LOGFILE GROUP 1 'g:\test\test1A.log' SIZE 1M, GROUP 2 'g:\test\test2A.log' SIZE 1M DATAFILE 'g:\test\sys1test.dbf' SIZE 70M CHARACTER SET WE8ISO8859P1;
wanghailiang
2—2
参数文件示例
db_name=test control_files=g:\test\test01.ctl db_block_size=2048 instance_name = test service_names = test …
Oracle 数据库应用PPT教学课件
在2001年6月的ORACLE OpenWorld大会中, ORACLE发布了ORACLE 9i。在ORACLE 9i的诸 多新特性中,最重要的就是Real Application Clusters(RAC集群服务器)。ORACLE 9i第2版 还做出了很多重要的改进。
2020/12/10
8
1 Oracle产品发展史
2020/12/10
9
第一讲:Oracle简介 (Oracle概况和体系结构)
内容提要
1 Oracle产品发展史 2 Oracle体系结构
2.1 Oracle数据库 2.2 Oracle实例 2.3 Oracle逻辑结构(表空间、数据文件)
2020/12/10
10
2 Oracle体系结构
系统全局共享区System Global Area(SGA) 和 后台进程Background Process 称为数据 库实例(INSTANCE)。
Oracle实例负责维持Oracle数据库系统的运 行。 Oracle实例是Oracle数据库系统的 “大脑”。
2020/12/10
17
2.2 Oracle实例
要了解Oracle体系结构,必须先了解两个基 本概念:数据库和实例。
2020/12/10
11
第一讲:Oracle简介 (Oracle概况和体系结构)
内容提要
1 Oracle产品发展史 2 Oracle体系结构
2.1 Oracle数据库 2.2 Oracle实例 2.3 Oracle逻辑结构(表空间、数据文件)
系统全局共享区(System Global Area, SGA) 是一块巨大的共享内存区域,它被看 作是Oracle 数据库的一个大缓冲池。
Oracle使用培训[1]
Oracle使用培训[1]
Oracle 数据库基本概念 Oracle 数据库系统结构
数据库
物理存储结构
数据 文件
控制 文件
重做 日志 文件
归档 文件
初始 化参 数文 件
跟踪 文件
口令 文件
警告 文件
备份 文件
其他 文件
学习改变命运,知 识创造未来
Oracle使用培训[1]
Oracle 数据库基本概念 Oracle 数据库系统结构
数据库服务器
作为输入、输出的设备。对服务器性能要
网络
求较高。
学习改变命运,知 识创造未来
客户机 Oracle使用培训[1]
客户机
Oracle 数据库介绍
Oracle 数据库应用结构
3.浏览器-服务器结构(Browser/Server,B/S)
B/S结构是3层结构。在B/S结构中, 客户端只需要安装浏览器就可以了,不 需要安装具体的应用程序;中间的Web 服务器层是连接前段客户机与后台数据 库服务器的桥梁,所有的数据计算和应 用逻辑处理都在此层实现。
Oracle使用培训[1]
Oracle 数据库基本概念
Oracle 数据库系统结构
数据库系统由数据库实例和物理存储结构组成。 实例包括内存结构(系统全局区域 system global area,SGA) 与后台进程。 物理存储结构包括存储在磁盘上的数据文件、控制文件、重 做日志文件、跟踪文件、初始化参数文件等。
安装 Oracle 10g 数据库服务器
2. 之后,系统将打开 如下界面:选择安装 方法。
Oracle提供了两种 安装方法:基本安装 (I)和高级安装(A )
Oracle 默认是选择 基本安装。
Oracle数据库管理与应用实例教程-数据库查询PPT课件
-
5.2 简单查询
选择行-条件查询 【例2-1】 需要了解所有商品中的“热点”商品的所有信息。 SELECT * FROM SCOTT.Goods WHERE g_Status = '热点‘ 【例2-2】 需要了解商品类别为“01”,商品单价在2500元以上的商品 信息,要求以汉字标题显示商品号、商品名称、商品类别号和价格。 SELECT g_ID 商品号,g_Name 商品名称,t_ID 类别号,g_Price 价格 FROM Goods WHERE t_ID='01' AND g_Price>2500 【例2-3】 需要了解所有年龄在20~25岁之间的会员的名称和年龄 (用Nl表示,不是基本表中的字段,是计算出来的列)。 SELECT c_Name, TO_CHAR(SYSDATE,'YYYY') TO_CHAR(c_BIRTH,'YYYY') NL FROM Customers WHERE TO_CHAR(SYSDATE,'YYYY') - TO_CHAR(c_BIRTH,'YYYY') BETWEEN 20 AND 25
10
-
5.2 简单查询
选择行-使用DISTINCT 【例2-11】 需要了解在WebShop网站进行了购物并下了订单的会员编 号。 SELECT g_ID FROM OrderDetails SELECT DISTINCT g_ID FROM OrderDetails
11
-
5.2 简单查询
选择行-使用ROWNUM
5
-
5.2 简单查询
选择列
【例1-4】 要求了解所有商品的商品号、商品名称和总价值,但希望分 别以汉字标题商品号、商品名称和总价值表示g_ID、g_Name和 g_Price*g_Number。 SELECT g_ID 商品号, g_Name 商品名称, g_Price*g_Number 总价值 FROM SCOTT.Goods 【例1-5】显示所有会员的编号、姓名、性别和年龄 SELECT c_ID 编号, c_NAME 姓名, c_GENDER 性 别,TO_CHAR(SYSDATE,‘YYYY’) - TO_CHAR(c_BIRTH,‘YYYY’) AS 年 龄 FROM SCOTT.CUSTOMERS;
超详细Oracle教程
超详细Oracle教程Oracle是一种关系型数据库管理系统(RDBMS),它是由甲骨文公司(Oracle Corporation)所开发的。
Oracle具有强大的数据管理和处理能力,被广泛应用于企业级应用程序中。
本教程将从基础知识开始介绍Oracle的主要概念和功能。
我们将深入讨论以下主题:1.数据库基础知识-数据库的定义和特点-数据库管理系统(DBMS)的作用和功能-关系型数据库的特点和优势2. Oracle的安装和配置-创建和配置数据库实例-设置数据库参数和权限3.SQL基础知识- SQL(Structured Query Language)的基本概念-SQL语句的分类:DDL、DML和DCL-常用的SQL语句:SELECT、INSERT、UPDATE和DELETE4.数据库对象- 表(Table)的创建、修改和删除- 索引(Index)的创建和使用- 视图(View)的创建和使用-存储过程、函数和触发器的概念和应用5.数据库管理和性能优化-用户管理和权限控制-数据备份和恢复-数据库性能优化的基本原则和方法-监控和调优工具的使用6.高级概念和功能-数据库复制和同步-数据库分区和分片-多表查询和连接操作-异常处理和事务控制在本教程中,我们将提供大量的实际示例和练习,以帮助您更好地理解和应用Oracle数据库。
无论您是初学者还是有一定经验的数据库开发人员,本教程都将为您提供全面而详细的Oracle学习资料。
总结:本教程以1200多字全面地介绍了Oracle数据库的基础知识、安装配置、SQL语言、数据库对象、数据库管理和性能优化、高级概念和功能等方面的内容。
无论您是初学者还是有一定经验的数据库开发人员,都可以通过本教程掌握Oracle数据库的基本知识和应用技巧。
希望本教程能对您提供有价值的帮助!。
Oracle数据库入门(培训课件)
安装前的准备工作
确保系统满足Oracle数据库的硬件和 软件要求,准备必要的安装文件和授 权文件。
执行安装程序
配置网络和系统参数
根据实际需求,配置Oracle数据库的 网络参数和系统参数,如主机名、端 口号等。
按照Oracle数据库的安装指南,运行 安装程序并按照提示进行操作。
Oracle数据库的配置
THANKS
谢谢您的观看
Oracle数据库的安全管理
用户管理
创建、修改和删除用户账户,设置用户权限和角色,控制对数据库的访问。
访问控制
通过使用权限和角色,限制用户对数据库的访问和操作,防止未经授权的访问。
数据加密
对敏感数据进行加密存储,保护数据安全,防止数据泄露和窃取。
安全审计
启用安全审计功能,记录用户对数据库的操作和访问,以便进行安全分析和监控。
事务定义
事务是一系列的操作单元,这些 操作要么全部成功,要么全部失 败。
使用BEGIN和END语句来标记事 务的开始和结束。
事务的回滚
使用ROLLBACK语句撤销事务中 的所有操作。
事务的提交
使用COMMIT语句提交事务,将 所有操作永久保存到数据库中。
05
Oracle数据库的优化与维护
Oracle数据库的性能优化
Oracle数据库的数据类型
数值型数据类型
包括整数、小数、货币等类型,用于 存储数值数据。
字符型数据类型
包括字符、字符串等类型,用于存储 文本数据。
日期和时间数据类型
包括日期、时间、时间戳等类型,用 于存储日期和时间数据。
大对象数据类型
用于存储大型数据,如BLOB(二进 制大对象)和CLOB(字符大对象) 。
oracle知识讲解和实例
---------------------1.数据库概念1)什么是数据库存储数据的仓库.数据库DataBase:指的是按一定组织和结构存储的数据集合.关系型数据库:以表结构存储NoSQL:非关系型数据库,以键值对形式存储数据Data:指的是程序中的字符串,数值,时间,图片,大文本等内容.DBMS(数据库管理系统):对数据库进行存储和管理的软件.例如Oracle,MySQL等2)为什么要使用数据库程序中的数据需要持久化.持久化可以采用文本和数据库系统.使用数据库系统存储具有以下优点:--存储和查询操作方便(SQL)--安全性高--大量数据存储常用数据库目前处于关系型数据库阶段:Oracle(Oracle)MySQLDB2(IBM)SQLServer(MS)Oracle发展史--Larry Ellision在1970年看到IBM一个研究员写的一篇文章<论大型关系型数据存储原型> --Larry和Bob Miner,ED oates三人成立了**研究实验室.1979开发出一套数据库系统.命名Oracle.(SCOTT/TIGER)--1983年为了突出Oracle数据库产品,将公司名改成了Oralce.--第一位使用Oracle客户是美国中央情报局--2009年4月20日74亿美金收购SUN*3)怎么使用数据库数据库通常分为客户端和服务器端两部分.服务器端负责创建存储结果,存储数据客户端提供使用者界面,操作服务器端的内容. Oracle客户端程序主要有下几个类型:--SQLPLUS命令行操作模式--SQL Developer可视化操作模式--DBA管理工具(DBA操作权限)客户端程序通过发送SQL指令操作服务器端, SQL分类如下:--DDL(Data Definition(定义)Language)数据定义语句.用于创建表结构--DML(Data Manipulation(操作)Language) 数据操作语句.用于增删改表中数据--DQL(Data Query Language)数据查询语句.用于查询表中数据--TCL(Transaction Control Language)事务控制语句.用于将多个DML操作封装成一个整体.--DCL(Data Control Language)数据控制语句.用于用户权限控制.日后,在Java需要通过JDBC技术+SQL实现对数据库的操作.*3.SQL初步数据库以表为单元进行存储.表结构如下:表是由行和列构成.列被称为字段;行被称为记录.需要存储Person对象信息,如果Person包含id,name,sex,age属性.1)DDL语句可以创建,删除,修改表结构.a.创建表create table 表名(列名类型,列名类型,...)注意:最后一列类型后面不加","逗号.create table person(id NUMBER(11),name VARCHAR2(20),sex VARCHAR2(2),age NUMBER(3));b.查看表结构desc 表名;desc person;c.删除表结构drop table 表名;//立刻删除,不放入回收站drop table person purge;//恢复回收站中的表flashback table 表名to before drop;2)DML语句负责添加,删除,更新记录.a.添加insert into 表名(字段名1,字段名2...) values (值1,值2...);insert into personvalues (4,'jack','男',30);insert into person (id,name,age,sex)values (1,'scott',40,'男');//age不指定值,默认为nullinsert into person (id,name,sex)values (2,'tigger','女');//为age显示指定null值insert into person (id,name,age,sex)values (3,'larry',null,'男');提示:执行DML操作需要commit才会将数据写入,更新,删除表b.更新update 表名set 字段名=值,字段名=值[where 字段名=条件值]//将表中所有记录的age值更新成20 update person set age=20;//将符合name=larry的记录,age值更新成20 update person set age=32where name='larry';//将id=2的记录age更新成20,sex更新成男update person set age=20,sex='男'where id=2;c.删除delete from 表名[where 字段名=条件值]提示:没有where子句,是删除所有记录.//删除id=4的记录delete from personwhere id=4;3)TCL负责事务处理.可以将一个或多个DML语句封装成一个整体.commit;事务提交,将先前执行的DML操作确认rollback:事务回滚,将先前执行的DML操作撤销, 撤销到上一次commit位置.4)DQL负责表数据的查询.select *或字段名...from 表名[where 字段名=条件值]提示: *代表所有字段;不写where子句是查询所有记录.//查询person表中所有记录所有字段的值select * from person;//查询person表中所有记录的name和sex值select name,sex from person;//查询name=scott的id和age值select id,age from personwhere name='scott';//查询name=scott并且sex=男的所有字段信息select *from personwhere name='scott'and sex='男';提示:多个查询条件,可以采用and和or关键字连接.and表示并且,条件必须同时满足;or表示或者,条件满足其中一个即可.5)DCL负责权限控制.(由DBA使用)create user...创建用户grant 授权revoke 收回权限============================Oracle-->数据库软件-->SQL-->Java+SQL NUMBER(11,2)//支持2位小数;9位整数1.字符串操作1)字符串类型char,varchar,varchar2,nvarchar2,long,clob字符串类型常量值,采用单引号''括起来.a.char和varchar的区别char固定长度字符串varchar变长字符串b.varchar和varchar2的区别varchar是ANSI标准组织制定的一个类型,目前Oracle中,varchar和varchar2含义相同,都代表变长字符串类型.日后,varchar类型含义可能会发生变化,但varchar2不会改变,因此Oracle推荐使用varchar2类型*c.char和varchar2存储问题存储单位(字节),能存储多少个字符,需要看存储编码.select userenv('language') from dual;dual:表示虚表;如果select查询内容不需要表参与,通常在from 写dual虚表.gbk-->a-z,0-9占1个字节长度中文字符占2个字节长度Unicode-->都占2个字节长度UTF-8-->中文占3个字节长度*提示:为了保险,可以将存储字符数*3开辟空间. GBK编码:abcde中文字-->11个字节长度abcdefghij -->10个字节长度d. char和varchar2最大长度varchar2最大长度4000,使用时必须指定大小.char最大长度2000,使用时可以不指定大小,默认大小为1.e. nvarchar2类型用于存储字符,不区分英文字符和中文字符.单位(字符).nvarchar2(5)意思是可以存储5个字符(一个中文算一个,一个英文也算一个).内部采用Unicode编码统一存储中文和非中文字符.create table foo_2(c1 varchar2(5),c2 nvarchar2(5));insert into foo_2 (c1,c2) values('中文','中文字'); insert into foo_2 (c1,c2) values('中文','插中文字符a'); //成功f. long,clob能存储字符类型,超过varchar2空间采用下面类型:long最大能存储2G空间.clob最大能存储4G空间.*使用建议:知道存储几个字符采用char如果存储字符在某个范围区间采用varchar2如果存储字符超出4000字节空间,采用clob.---------------------------------select id,name from personwhere name='scott';SELECT id,name FROM personWHERE name='scott'select ID,NAME from PERSONwhere NAME='scott'-------------------------------g.字符串函数(记住5个)--可以对字符串值进行操作.具体如下:concat(s1,s2)或者s1 || s2select concat(c1,c2) from foo_1;select concat('hello','scott') from dual;select concat('hello',c1) from foo_1;create table foo_3(first_name varchar2(10),last_name varchar2(20));insert into foo_3 (first_name,last_name)values ('larry','ellison');insert into foo_3 (first_name,last_name)values ('bob','miner');select concat(first_name,last_name) from foo_3;select first_name||last_name from foo_3;select first_name||' '||last_name from foo_3;--大小写转换upper(s):将s转成大写lower(s):将s转成小写initcap(s):将s中单词首字母大写select upper(first_name) from foo_3;select initcap(first_name) from foo_3;select initcap(first_name)||' '||initcap(last_name) from foo_3;select initcap(first_name||' '||last_name)from foo_3--过滤空格trim(s):过滤s中前后(左右)空格ltrim(s):过滤s中前面(左)空格rtrim(s):过滤s中后面(右)空格' hello '' scott 'select trim(' hello ')||trim(' scott ') from dual;结果helloscottselect ltrim(' hello ')||trim(' scott ') from dual;结果hello scott (保留hello后面的,其他去掉) select trim(' hello scott ') from dual;结果hello scott (中间空格无法去掉)--补位函数lpad(s,n,char) : 当s不够n位时,在s左边补充char字符.rpad(s,n,char) : 当s不够n位时,在s右边补充char字符.注意:如果s超出n位,采取截取方式保留n位.//将first_name值格式化成6位,不够右边补空格select rpad(first_name,6,' ')||last_name from foo_3;结果如下:larry ellisonbob miner--截取函数substr(s,begin[,size]):对s进行截取;begin表示从第几个字符开始截取;size表示截取多少个字符substr(s,begin):如果begin为负数,表示从后向前取begin位字符如果begin为正数,表示从begin位开始取到最后'javasejavaee12345'//从第7个字符开始截取,截取6个字符select substr('javasejavaee12345',7,6)from dual;结果javaee//从第13位开始截取,取5个字符select substr('javasejavaee12345',13,5)from dual;//从第13位开始截取,取到最后select substr('javasejavaee12345',13)from dual;结果12345//从第7位开始截取,取到最后select substr('javasejavaee12345',7)from dual;结果javaee12345//从后向前取5个字符select substr('javasejavaee12345',-5)from dual;结果12345//从第2个字符取,取2个(一个中文算一个长度) select substr('中文字符',2,2) from dual;结果:文字--字符查找instr(s,s1[,begin,n]):在s中查找s1出现的位置. begin表示从哪个字符开始查找;n表示第几次匹配.'abcabcabcabc'//查找第一个匹配'b'的字符位置select instr('abcabcabcabc','b') from dual;结果2//从第3个字符开始找'b',返回位置select instr('abcabcabcabc','b',3) from dual;结果5//从第3个字符开始找'b',返回第2次匹配的位置select instr('abcabcabcabc','b',3,2) from dual;结果8create table foo_4(name varchar2(20));insert into foo_4 values ('Hello.java');insert into foo_4 values ('Snake.java');insert into foo_4 values ('MyThread.java');练习:取出类名select substr(name,1,instr(name,'.')-1) from foo_4;结果: HelloSnakeMyThread--计算长度length(s):计算s字符个数.(一个中文算一个长度)2.数值操作1)数值类型numberOracle采用number类型定义整数和浮点数.number(p[,s]) : p表示有效位数;s表示小数位数.create table foo_5(c1 number,c2 number(2),c3 number(5,2),c4 number(3,-2),c5 number(2,3));number:默认有效位38,即可存整数,又可以存小数.位数可以动态分配.insert into foo_5 (c1) values (100);insert into foo_5 (c1) values (100.005);number(2):整数定义,有效位为2.存储0-99值.insert into foo_5 (c2) values (10);//允许insert into foo_5 (c2) values (100);//错误insert into foo_5 (c2) values (12.83);//采用四舍五入取整13 insert into foo_5 (c2) values (12.43);//采用四舍五入取整12number(5,2):浮点数定义,2位小数;整数5-2=3个.insert into foo_5 (c3) values (100.1356);//允许100.14 insert into foo_5 (c3) values (1000.1346);//错误insert into foo_5 (c3) values (999.9956);//错误number(3,-2):整数定义,整数位3-(-2)=5位.小数点左边2位按四舍五入清0; insert into foo_5 (c4) values (12345);//12300insert into foo_5 (c4) values (12354);//12400insert into foo_5 (c4) values (123.56789);//100insert into foo_5 (c4) values (12.356789);//0number(2,3):小于1的数,小数位是3位.insert into foo_5 (c5) values (0.02345);//0.023insert into foo_5 (c5) values (0.02354);//0.024insert into foo_5 (c5) values (0.12345);//错误========NUMBER使用规则==========NUMBER(p,s)--NUMBER(p):整数定义,整数位是p位--NUMBER(p,s)如果整数位超出p-s,会报错如果小数位超出s,会对s之后内容四舍五入处理--p>0时s>0时,会对数值小数点右边保留s位,后面的进行四舍五入s=0时,采用四舍五入取整s<0时,会对数值小数点左边s位四舍五入清0,小数点右边可以忽略不计--p<s时该数值是一个小于1的数.小数位是s位.小数点右侧s-p位为0.(否则报错)number(2,3)--- 0.0xxnumber(2,4)--- 0.00xx*提示:重点掌握住整数和浮点是定义.number(11);number(11,2)2)数值函数(记住2个)-- round():四舍五入//round(n)一个参数是取整select round(1.234) from dual;//四舍五入取整1select round(1.678) from dual;//四舍五入取整2//round(n,s)四舍五入保留s位小数select round(1.234,2) from dual;//1.23select round(1.678,2) from dual;//1.68--trunc():截取//trunc(n)一个参数取整,将小数截掉select trunc(1.678) from dual;//截掉,结果1//trunc(n,s)保留s位小数,将多余的截掉select trunc(1.678,2) from dual;//1.67--mod():求余数//取5除以2的余数select mod(5,2) from dual;//结果1select mod(5,3) from dual;//结果2--ceil(n):向上取整(取大于或等于n的整数)//对5/2=2.5结果向上取整select ceil(5/2) from dual;//3//取大于或等于-2.5的整数select ceil(-2.5) from dual;//-2--floor(n):向下取整(取小于或等于n的整数) //对5/2=2.5结果向下取整select floor(5/2) from dual;//2//对3.0向下取整select floor(3.0) from dual;//3//取小于或等于-2.5的整数select floor(-2.5) from dual;//-3=======================create table foo_6(name varchar2(20),salary number(11,2));insert into foo_6 (name,salary)values ('Scott',4000.58);insert into foo_6 (name,salary)values ('tiGGER',3000.25);1)查看名字和工资,工资只看整数位select name,trunc(salary) from foo_6; select name,floor(salary) from foo_6;2)查询名字是scott的信息select name,salary from foo_6where lower(name)='scott';select name,salary from foo_6where upper(name)='SCOTT';liangjq@1.日期操作*1)日期类型date:存储年月日小时分钟秒timestamp:存储年月日小时分钟秒毫秒时区上述类型定义时不需要指定大小.*2)日期关键字sysdate : 获取Oracle服务器系统当前时间systimestamp : 获取Oracle服务器系统当前时间create table goo_1(c1 date,c2 timestamp);//查询Oracle服务器系统时间select sysdate from dual;//将Oracle系统时间插入insert into goo_1 (c1,c2)values (sysdate,systimestamp);*3)转换函数默认情况下,Oracle date格式是'DD-MON-RR',即'日-月-年'.只有输入此格式字符串Oracle才能转换成date插入数据表.insert into goo_1 (c1,c2)values ('08-DEC-08',systimestamp);to_date(s,format):将符合format格式的s字符串转成dateto_char(date,format):将date值按format转换成字符串to_timetamp(s,format):将s字符串转成timestamp类型format格式元素为yyyy-mm-dd hh:mi:ss//将字符串转成日期插入insert into goo_1 (c1)values (to_date('2008-08-08','yyyy-mm-dd'));//将date值转成字符串select to_char(c1,'yyyy-mm-dd') from goo_1;//提取date值的月份信息select to_char(c1,'mm') from goo_1;//将date值转成年月日小时(24小时制)分钟秒字符串select to_char(c1,'yyyy-mm-dd hh24:mi:ss')from goo_1;//插入一个timestamp值insert into goo_1 (c2)values (to_timestamp('2013-12-1 15:10:20','yyyy-mm-dd hh24:mi:ss'));4)其他函数2013-12-6--->2013-12-31--last_day(d):返回d日期中月份的最后一天的日期select last_day(sysdate) from dual;select last_day(to_date('2008-02-05','yyyy-mm-dd')) from dual;--add_months(d,n):对d日期值的月份加n.n值可以为负数. //对月份加1,结果2008-03-05select add_months(to_date('2008-02-05','yyyy-mm-dd'),1)from dual;======案例======create table goo_2(name varchar2(20),birth date);insert into goo_2 values('scott',to_date('1990-08-08','yyyy-mm-dd'));insert into goo_2 values('tiger',to_date('1995-12-05','yyyy-mm-dd'));insert into goo_2 values('larry',to_date('1950-01-08','yyyy-mm-dd'));insert into goo_2 values('bob',to_date('1945-12-08','yyyy-mm-dd'));//获取当前月过生日的员工select * from goo_2where to_char(birth,'mm')=to_char(sysdate,'mm'); //获取下个月过生日的员工.//如果加-1表示上个月过生日的员工select * from goo_2where to_char(birth,'mm')=to_char(add_months(sysdate,1),'mm');提示:对月份进行加减,需要对年进行加减可以add_months(d,12)加1年;add_months(d,-12)减1年. 需要对日进行加减,使用date+1或date-1操作.--months_between(d1,d2):计算d1和d2差多少个月计算d1-d2=月份差select months_between(to_date('2013-8-20','yyyy-mm-dd'),to_date('2013-5-5','yyyy-mm-dd')) from dual;//查询员工名字和年龄select name,floor(months_between(sysdate,birth)/12) from goo_2;--next_day(d,星期几):从d日期开计算下一个星期几的时间日期.select next_day(sysdate,1)from dual;//1周日,2周一,3周二,....7周六select next_day(sysdate,'tue')from dual; //下周二日期select next_day(sysdate,'fri')from dual; //下周五日期--least(n1,n2):返回两个数值中小的那一个select least(2,5) from dual;//2select least(sysdate,to_date('2008-8-8','yyyy-mm-dd'))from dual;//返回2008-8-8日期--greatest(n1,n2):返回两个数值中大的那一个select greatest(2,5) from dual;//5select greatest(sysdate,to_date('2008-8-8','yyyy-mm-dd'))from dual;//返回sysdate--round(d):对日期的小时分钟秒部分进行舍入操作(12小时前的舍弃;12小时后的日期加1)select round(to_date('2013-12-6 11:59:59','yyyy-mm-dd hh24:mi:ss'))from dual;//返回2013-12-6 00:00:00select round(to_date('2013-12-6 12:00:00','yyyy-mm-dd hh24:mi:ss'))from dual;//返回2013-12-7 00:00:00--trunc(d):对日期的小时分钟秒部分截取掉.--extract函数extract(year from 日期值)//返回日期值的年extract(month from 日期值)//返回日期值的月extract(day from 日期值)//返回日期值的日select extract(year from sysdate) from dual;select extract(month from sysdate) from dual;//获取小时分钟秒部分,//必须是timestamp类型值才可以用extract(hour from timestamp类型值)//返回小时extract(minute from timestamp类型值)//返回分钟extract(second from timestamp类型值)//返回秒select extract(hour from systimestamp) from dual;select systimestamp from dual;2.空值操作(null)各个字段都可以放null,意思是没有值.create table goo_3(id number(3),name varchar2(20));*1)null的写入//插入空值insert into goo_3 (id,name) values(1,null);//不指定insert into goo_3 (id) values (2);//更新成空值insert into goo_3 (id,name) values (3,'scott');update goo_3 set name=null where id=3;*2)null条件查询select * from goo_3 where name=null;//错误应用select * from goo_3 where name is null;//正确select * from goo_3 where name is not null;//正确3)空值函数--nvl(字段,值1):当字段值为null时返回值1;字段值不为null返回字段值;//查询id和name列值,如果name为null//显示'无名氏'select id,nvl(name,'无名氏') from goo_3;--nvl2(字段,值1,值2):当字段值不为null返回值1;当字段值为null返回值2; //name有值返回'有名字';为null返回'无名氏'select id,nvl2(name,'有名字','无名氏')from goo_3;*4)非空约数不允许某列出现null的写入.create table goo_4(id number(3) not null,name varchar2(20) not null);insert into goo_4 (id,name) values(1,null);//错误insert into goo_4 (id) values (2);//错误-------------面试题----------------drop table xxx;//删除表结构和数据,释放空间delete from xxx;//删除表数据,结构还在.可以回滚truncate table xxx;//删除表数据,结构还在,//效率高,数据不能回滚-------------------------------------3.DDL操作可以创建,删除和修改表结构信息.1)添加一列字段alter table 表名add 字段名类型;--------案例---------create table goo_5(id number(3) not null,name varchar2(20) not null);//添加salary工资列number(9,2),不允许为null2)修改字段类型和大小,是否允许为空alter table 表名modify (字段类型);//将salary大小改成number(11,2),允许为空alter table goo_5modify (salary number(11,2) null);提示:如果修改类型;或将存储空间大改成小的;修改成非空;可能会产生错误,原因是可表中现有数据冲突导致改表结构失败.3)删除一列字段alter table 表名drop column 字段名;//删除salary列alter table goo_5 drop column salary;4)修改表名字rename 表名to 新表名;提示:表名最大长度30,一个中文占2个的话,最大用15个中文字符.避免名称与关键字冲突.不要以数字和_开始.create table _a(id number(2));//命名错误*5)字段设置default默认值在insert操作时,不为该字段指定值时,采用默认值写入.显式指定值时,指定什么写入什么,null也可以写入.create table goo_6(id number(3),name varchar2(20) not null,salary number(11,2) default 1000,login_time date default sysdate);//salary和login_time的default值有效insert into goo_6 (id,name) values (1,'scott');//显式指定,salary的default无效,写入1500 insert into goo_6 (id,name,salary)values (2,'tiger',1500);//显式指定,salary的default无效,写入null insert into goo_6 (id,name,salary)values (2,'tiger',null);6)创建表create table 表名(字段名类型,.....字段名类型)上面是创建一个新表及其结构.如果需要从现有表复制一个表出来,可以采用下面语法:create table 表名asselect 语句;//基于goo_6复制一个新表goo_7create table goo_7 asselect id,name,salary from goo_6;//基于goo_6复制表结构,没有数据create table goo_8 asselect id,name,salary from goo_6where name is null;*7)主键约束a.主键特点--非空,不允许为null--唯一,不允许重复--企业中一个表肯定会定义一个主键--主键其实就是字段(可以由一到多个字段承担主键职责)--主键用于定位要操作的某一条记录(利用主键值查询,最多返回一条)--主键值一般不参与业务操作,不允许更新//oracle自动分配一个存储主键名称create table goo_9(id number(11) primary key,name varchar2(20),idcardno varchar2(18),age number(3)) ;或指定主键存储名称goo9_pkcreate table goo_9(id number(11) ,name varchar2(20),idcardno varchar2(18),age number(3),constraint goo9_pk primary key(id)) ;insert into goo_9 (id,name,idcardno,age)values (1,'scott','123213123223222321',20);//建完表之后,添加主键约束create table goo_10(id number(3),name varchar2(20));id number(3) primary key;alter table 表名add constraint 约束名primary key(字段);提示:如果字段数据违反主键规则,会创建失败.alter table goo_10add constraint goo10_pk primary key(id);insert into goo_10 (id,name) values (1,'scott');insert into goo_10 (id,name) values (1,'scott');//错误id=1重复---------多字段当主键(联合主键)-----------create table goo_11(first_name varchar2(20),last_name varchar2(20));alter table goo_11add constraint goo11_pkprimary key(first_name,last_name);insert into goo_11 (first_name,last_name)values('larry',null);//错误,违反非空insert into goo_11 (first_name,last_name)values('larry','ellison');//成功insert into goo_11 (first_name,last_name)values('larry','ellison');//错误,违反唯一性insert into goo_11 (first_name,last_name)values('larry','Ellison');//成功提示:联合主键,任何一个字段都不能为null;当主键字段都相同才认为违反唯一性.提示:表名和字段名用双引号引起来,"表名"是强制性大小写的意思.例如create table "emp"表名就是小写的emp.不采用双引号指定, oracle会统一转成大写执行.create table emp表名是EMP.主键:非空且唯一.一个表只能创建一次,不能创建多次.==========查询操作============1.基本语句(最简单的结构)select *或字段名... from 表名;--*代表表中所有字段名--select 决定返回哪些列的值--from决定对哪些表查询2.where子句select * from 表名;默认是对表中所有记录查询.如果需要提取一部分记录,需要用where指定过滤条件.满足指定条件的记录返回.1)使用>,<,>=,<=,!=,<>,=注意:上述比较符号字段类型和字段值要保持一致.select empno,ename,sal from empwhere sal>=2000;//字符串值当条件大小写必须一致select * from emp where ename='SCOTT';//2085-1-1之后(包含2085-1-1)入职的员工信息select empno,ename from empwhere hiredate>=to_date('2085-01-01','yyyy-mm-dd');select empno,ename from empwhere to_char(hiredate,'yyyy-mm-dd')>='2085-01-01'"ab""ac""b""b">"ac">"ab"2)使用and ,or关键字and (并且) 用于关联的条件必须同时满足.or (或者) 用于关联的条件满足其中之一即可.//查询20部门工资大于1200的员工信息select * from empwhere deptno=20 and sal>1200;//查询10和20部门中工资大于1200的员工select empno,ename,deptno,salfrom empwhere (deptno=10 or deptno=20) and sal>1200;注意:条件比较多时,and比or的优先级高.例如a or b and c 含义是满足a或者满足b且c条件. 可以使用()括号提升优先级.例如(a or b) and c满足a或b条件,并且满足c条件.//查询2082和2081两年入职的员工中//工资大于1200的信息select empno,ename,hiredate,salfrom empwhere (to_char(hiredate,'yyyy')='2081' orto_char(hiredate,'yyyy')='2082') and sal>1200;---------------------------------select empno,ename,hiredate,salfrom empwhere to_char(hiredate,'yyyy')>='2081' andto_char(hiredate,'yyyy')<='2082' and sal>1200;3)使用like条件(模糊查询)用于模糊条件值的查询;适用于字符串类型字段--%表示0到多个任意字符.--_下划线表示1个任意字符//查询名字中含有O字符的员工信息select empno,ename from empwhere ename like '%O%';%O : 最后一个字符是OO% : 第一个字符是O%O%: O可以任何位置//查询名字中第二个字符是A的员工信息select empno,ename from empwhere ename like '_A%';4)使用in和not in//字段值等于值1或者等于值2或者等于值3...字段名in (值1,值2,值3...)//字段值不等于给出的值列表中字段名not in (值1,值2,值3...)//查询10,20,30,40部门,工资大于1200的员工信息select empno,ename,deptno,salfrom empwhere deptno in (10,20,30,40) and sal>1200;//查询工资等于1000,1500,2000,5000的员工信息select empno,ename,salfrom empwhere sal in (1000,1500,2000,5000);//查询工资不等于1000,1500,2000,5000的员工信息select empno,ename,salfrom empwhere sal not in (1000,1500,2000,5000);5)使用between...and...字段名between 最小值and 最大值判断某个字段值在指定范围区间.即某个字段值大于等于?并且小于等于?//查询工资大于等于1000并且小于等于3000 select empno,ename,salfrom empwhere sal between 1000 and 3000;6)使用is null,is not null判断某个字段值是否为null;//查询没有奖金comm的员工信息select empno,ename,commfrom empwhere comm is null or comm=0;7)使用any和all条件--字段名>any(值1,值2,值3...)含义:字段值大于指定集合中任意一个值,就算满足条件.(即工资大于最小的值)//查询工资大于1000或1500或2000的员工select empno,ename,sal from empwhere sal >any(1000,1500,2000);--字段名>all(值1,值2,值3...)含义:字段值大于指定集合中所有值,才算满足条件.(即工资大于最大的值)//查询工资值大于1000并且大于1500,并且大于2000 select empno,ename ,sal from empwhere sal >all(1000,1500,2000);8)使用表达式和函数select和where部分可以利用一些运算符和函数.函数:字符串函数,数值函数,日期函数,空值函数//查看员工编号,名称,工资总额(sal和comm之和) select empno,ename,sal+nvl(comm,0) from emp;提示:null进行数值运算结果还是null//查询员工信息,加薪20%后的总收入低于2000的select empno,ename,sal,commfrom empwhere (sal*1.2+nvl(comm,0)) < 2000;//查询名字大于5个字符的员工(中文字符算一个) select * from empwhere length(ename) > 5;3.select子句过滤重复记录功能select [distinct] *或字段名...from 表名;distinct作用是过滤重复的记录.两行记录如果各个字段值都相同才算重复;有一个字段不同都不算重复.//查询deptno一列值,过滤重复记录select distinct deptno from emp;//过滤empno和ename都相同的记录select distinct empno,ename from emp;4.order by子句作用是将查询结果进行排序.select ...from ... where...order by 字段名... [asc或desc];--asc表示升序,默认值--desc表示降序--排序字段名可以写一个或多个//查询结果按sal升序排列select empno,ename,sal from emporder by sal;//查询结果按sal降序排列select empno,ename,sal from emporder by sal desc;//查询结果先按deptno升序排列,//deptno相同的按sal降序排列select empno,ename,deptno,salfrom emporder by deptno,sal desc;提示:desc或asc只对前面一个字段有效. order by deptno,sal desc;等价于order by deptno asc sal desc;5.聚合函数(分组函数)max():取一组中的最大值min():取一组中的最小值avg():求一组的平均值sum():求一组的合计值count():统计一组中非空值的个数--空值不参与分组统计和计算.--一组执行一次返回一个结果.默认所有记录算一组//返回sal列的最大值.默认所有记录当一组select max(sal) from emp;//返回sal列的最小值select min(sal) from emp;//返回sal列的平均值select avg(sal) from emp;//返回sal列的合计值select sum(sal) from emp;//返回sal列非空值个数select count(sal) from emp;//返回结果集记录的行数select count(*) from emp;select max(sal),min(sal),avg(sal) from emp;6.group by子句前面5个聚合函数,默认将所有结果当作一组进行计算.可以利用group by将结果分成若干小组,之后聚合函数会以小组为单位执行计算.提示:SQL中使用了聚合函数,返回记录数由分组决定,有几组就会返回几行记录.//查询各个部门的最高工资select deptno,max(sal) from empgroup by deptno;//查询各个职位(JOB)的平均工资select job,avg(sal)from empgroup by job;//查询各个部门员工人数select deptno,count(*)from empgroup by deptno注意:当select后面使用了聚合函数,此外还有其他查询字段,其他查询字段必须在group by后面存在.聚合函数使用的字段可以不用写在group by后面.(Oracle必须按此规则编写,其他数据库例如MySQL有时可省略一两个字段)7.having子句having用于使用聚合函数条件过滤.where子句中不能使用聚合函数.//查询平均工资大于2000的职位select job,avg(sal)from empgroup by jobhaving avg(sal)>2000order by avg(sal) desc;----------完整SQL的SELECT结构-------------select ...//显示哪些列信息from ...//从哪些表查询where ...//限定条件,不符合的过滤掉group by ...//按指定字段分组having ...//指定聚合函数过滤条件order by ...//按指定字段排序--------------------------------------------8.使用别名在select,from,where ,order by子句中经常会使用别名.1)select后面使用别名select 字段名[as] 别名字段名[as] 别名....select empno no,ename name,sal+nvl(comm,0) totalfrom emp;2)from后面使用别名from 表名别名;注意:在遇到多表关联查询时才使用表别名.3)order by后面使用别名select empno no,ename name,sal+nvl(comm,0) totalfrom emporder by total;4)having使用别名select e.deptno,avg(e.sal) as avg //4from emp e //1group by e.deptno //2having avg(e.sal)>2000 //3order by avg;//59.使用子查询子查询可以用在where,having,from,select子句中注意:子查询语句需要用()括起来.1)where部分a.单行子查询例如使用>,<,>=,<=,=,<>条件时,子查询语句只能返回一个值.//查询工资最高的员工信息select * from empwhere sal = (select max(sal) from emp);//查询工资大于平均工资的员工信息select * from empwhere sal > (select avg(sal) from emp);b.多行子查询例如使用in,not in,>any,>all等条件,子查询可以返回一列多行值.//查询工资等于各部门平均工资的员工select * from emp where sal in(select avg(sal) from emp group by deptno);//查询工资大于各部门平均工资的员工select * from emp where sal >all(select avg(sal) from emp group by deptno);2)having部分//查询各部门平均工资大于公司平均工资的部门select deptno,avg(sal)from empgroup by deptnohaving avg(sal) >(select avg(sal) from emp);3)from部分//from后面子查询充当临时数据源select * from (select empno,ename,sal from emp); //根据from子查询结果查询name以A开头的信息select no,namefrom (select empno no,ename name from emp) where name like 'A%';4)select部分//查询部门编号,工资大于等于2000的人数,//工资小于2000的人数select deptno,(select count(*)from empwhere sal>=2000and deptno=e.deptno) as great,(select count(*)from empwhere sal<2000and deptno=e.deptno) as lessfrom emp egroup by deptno;--------提取某个部门工资>=2000的人数------------ select count(*)from empwhere sal>=2000and deptno=10;--------提取某个部门工资<2000的人数------------ select count(*)from empwhere sal<2000and deptno=10;==========面试题===========1.1.34. 【赞同科技】1.建一个员工信息表employee, 表中id (员工代码)、sex (员工性别)、name(姓名)、departmentid (部门代码) 、address (地址),birthdate (生日)、postcode (邮编) 、salary〔薪水)、workdate (入职日期) 、remark (备注信息),其中postcode 、remark 可以为空,薪水需为numher 类型.,生日、入职日期为date 类型。
oracle数据库基本操作讲义
• SQL> select * from test; NAME ---------scott SQL> select owner ,table_name from dba_tables where table_name=upper(‘test’); OWNER TABLE_NAME ------------------------------ -----------------------------SCOTT TEST SYSTEM TEST --在使用上,shcema与user完全一样。
• <4>定义表列时,应该选择合适的数据类型 和长度,为了节省存储空间,应该将可以取 Null值的列放在后面.
• <5>确定表中所需的完整性约束。 • <6>在合适的情况下,使用簇表以节省存储
空间并提高特定类型的SQL语句的性能.
预备知识2:管理表的策略
• 2、规划表的类型
• 在Oracle数据库中,存储用户数据可以使用标准表 索 引表 簇表 和分区表.
• Oracle数据库中不能新创建一个schema,要想创 建一个schema,只能通过创建一个用户的方法解 决
• 在创建一个用户的同时为这个用户创建一个与用 户名同名的schem并作为该用户的缺省shcema。
• schema的个数同user的个数相同,而且schema 名字同user名字一一 对应并且相同(别名,不准确 )。
– 标准表:数据按堆组织,以无序方式存放在单独表的表段中 .这种表是最基础最常用的数据库表类型,是默认情况下创 建的表.
– 索引表:数据是以”B-树”结构存放在主键约束所对应的索引 段中.使用索引表时,索引叶子节点不仅包含了键列的数据 还包含了其他非键列的数据。
数据库实施oraclelinux6安装oracle11gR2RAC
系统集成——数据库实行部署Oracle Linux6.5下安装Oracle11gr2 RAC2018 年版本1 集群规划 (4)1.1 硬件环境 (4)1.2 软件环境 (4)1.3 RAC拓朴 (4)1.4 IP 规划 (4)1.5 储存规划 (5)2 安装实行 (5)2.1 安装前准备 (5)2.2 主机环境准备 (5)2.2.1 操作系统安装 (5)2.2.2 服务器内存要求 (6)2.3 网络配置 (6)2.3.1 配置 IP (6)2.3.2 配置主机名 (7)2.3.3 配置 /etc/hosts (7)2.4 安装依靠包 (7)2.5 改正内核参数 (9)2.6 改正 oracle 用户限制 (9)2.7 改正 /etc/pam.d/login (10)2.8 封闭防火墙 (10)2.9 停用 ntp 服务 (10)2.10 改正安装全部者的 ulimit 设置 (11)2.11 增添用户及创立安装目录 (11)2.12 设置 oracle 用户环境变量 (12)2.13 设置 grid 用户环境变量 (12)2.14 全部节点履行,测试 SSH联通性 (13)2.14.1 配置 SSH (13)2.14.2 考证 SSH (13)3. 共享储存配置 (13)3.1 共享储存服务器配置 (13)3.2 共享储存客户端配置 (13)4 两个节点 ASM搭建 (14)4.1 安装 ASM包 (14)4.2 配置 ASM (14)4.3 共享磁盘分区 (14)4.4 创立 ASM磁盘 (15)4.4 扫描磁盘 asm 磁盘,检查有哪些asm 磁盘: (15)5 安装 Oracle grid 集群件 (15)5.1 安装前检查 (15)5.2 解压及安装 (15)5.3 安装检查 (27)5.4 卸载 grid (27)6 配置 ASM磁盘 (28)7 安装 Oracle 数据库软件 (31)8 创立数据库实例 (37)9.1RAC的启停 (48)9.2 RAC 检查运转情况 (48)9.3测试考证 (49)1集群规划1.1 硬件环境服务器: HP DL980 G7 256G 内存储存: HP 3PAR SS74001.2 软件环境数据库: linux.x64_11gR2集群件: linux.x64_11gR2_grid操作系统: oracle linux 6.5ASM包:oracleasm 在操作系统oracle linux中已内置安装1.3 RAC拓朴1.4 IP 规划地点要求每个节点一个public IP每个节点一个public VIP每个节点一个private IP一个用于集群的SCAN名称和一到三个和public IP同网段的IP ,本处用一个配置当地 /etc/hosts分析1.5 储存规划磁盘名称磁盘大小磁盘用途说明OCR_VOTE 2G Ocr 磁盘,即集群注册磁盘,用于储存集群配置信息, oracle 要求磁盘最小空间为 256M Voting disk( 表决磁盘 ) ,用于记录集群节点信息, oracle 要求磁盘最小空间 5 为 256MDATA 20G 寄存 oracle 数据文件FRA 10G 用于寄存日记文件,归档日记,闪回数据等2安装实行2.1安装前准备储存环境准备1.将主机、储存等接入 SAN互换机,按需区分相应的 zone;2.清理全部设施的 WWN号;3.在储存端增添数据库主机,将两节点绑定为一个Host set ;4.储存区分VV,并分派给数据库 Host set。
Oracle 数据库操作实例讲解
Oracle 数据库操作实例讲解一、数据库系统配置数据库系统配置主要包括初始化参数配置和网络服务配置。
初始化参数的配置方法有以下几种方式:1、直接更改初始化参数文件。
在ORACLE9i和ORACLE10g中参数文件有两种形式,一种是文本格式,一种是二进制格式。
数据库启动后,可以通过下列SQL语句查找数据库使用的是哪种格式的初始化参数。
Show parameter spfile;更改文本格式的初始化参数,可以利用文本编辑工具,如vi 等打开,然后进行编辑。
要使编辑后的参数生效,一定要重新启动数据库,并应用此初始化参数文件。
2、命令行修改参数。
不能直接使用编辑工具打开二进制格式的初始化参数文件(即使可以打开),这样会损坏参数文件,导致下次数据库不能正常启动。
可以通过下面的SQL 语句进行参数修改。
ALTER SYSTEM parameter name =value SCOPE=[BOTH|MEM]3、使用图形化通过EM console进行修改。
登录EM console http://ip address :1158/em 在图形化工具里面,可以看到哪些参数是静态参数(不能修改,修改后要重新启动数据库才能生效),哪些是动态参数(可以直接修改,并生效)。
网络服务配置主要包括侦听(listener)配置和客户端服务(tnsnames)配置。
侦听配置在服务器端(安装了ORACLE数据库的服务器),客户端服务配置在需要连接ORACLE数据库的客户机上(当然也可以在服务器端进行配置)。
这两个配置文件都可以利用文本编辑工具直接打开修改。
修改侦听后,用下列命令把侦听服务重新启动:$ lsnrctl start用下列命令查看侦听是否正常:$lsnrctl status下面给出实例。
listener.oraSID_LIST_LISTENER =(SID_LIST =(SID_DESC =(SID_NAME = PLSExtProc)(ORACLE_HOME = /oracle/app/10.2)(PROGRAM = extproc))(SID_DESC =(SID_NAME = CLRExtProc)(ORACLE_HOME = /oracle/app/10.2)(PROGRAM = extproc)))LISTENER =(DESCRIPTION_LIST =(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = 10.136.70.93)(PORT = 1521))(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))))tnsnames.oraTEST =(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 10.136.70.93)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME =test)))二、性能调优1、查找失效对象并修复SQL> select owner,object_name,object_type from dba_objects where status = ’INVALID’;SQL> alter object_type object_name complie;2、查找无用索引并修复SQL> select owner, index_name from dba_indexes where status='UNUSABLE';SQL> alter index index_name rebuild online nologging;3、使用ORACLE指导中心进行调优首先修改参数statistics_level=typical 主要用于收集数据。