数据库开发工具有哪些?

4、Oracle数据库。

Transwarp Waterdrop

oracle数据库管理工具 oracle数据库管理系统oracle数据库管理工具 oracle数据库管理系统


oracle数据库管理工具 oracle数据库管理系统


星环科技数据库开发工具Waterdrop是为开发人员和数据库管理人员提供的数据库管理工具,它可进行跨平台管理,可作为Incep11.查询薪水为1600到3000的员工(种方式,采用>=和<=)tor SQL客户端,除了Inceptor还支持并兼容其余多种数据库,帮助用户实现数据库管理、SQL编辑、SQL执行和数据作,若是还有不明白可以统一去知道了解下

如何使用 REORG 和 RUNSTATS 命令优化数据库性能

说明会话的I/O信息

1、调整数据结构的设计。这一部分在开发信息系统之前完成,程序员需要考虑是否使用ORACLE数据库的分区功能,对于经常访问的数据库表是否需要建立索引等。

64.union可以合并(相加)

2、2、调整应用程序结构设计。这一部分也是在开发信息系统之前完成,程序员在这一步需要考虑应用程序使用什么样的体系结构,是使用传统的/两层体系结构,还是使用Browser/Web/Database的三层体系结构。不同的应用程序体系结构要求的数据库资源是不同的。

3、3、调整数据库SQL语句。应用程序的执行最终将归结为数据库中的SQL语句执行,因此SQL语句的执行效率最终决定了ORACLE数据库的性能。ORACLE公司使用ORACLE语句优化器(Oracle Optimizer)和行锁管理器(row-ll mar)来调整优化SQL语句。

4、4、调整内存分配。内存分配是在信息系统运行过程中优化配置的,数据库可以根据数据库运行状况调整数据库系统全局区(SGA区)的数据缓冲区、日志缓冲区和共享池的大小;还可以调整程序全局区(PGA区)的大小。需要注意的是,SGA区不是越大越好,SGA区过大会占用作系统使用的内存而引起虚拟内存的页面交换,这样反而会降低系统。

5、5、调整硬盘I/O,这一步是在信息系统开发之前完成的。数据库可以将组成同一个表空间的数据文件放在不同的硬盘上,做到硬盘之间I/O负载均衡。

6、6、调整作系统参数,例如:运行在UNIX作系统上的ORACLE数据库,可以调整UNIX数据缓冲池的大小,每个进程所能使用的内存大小等参数。

实际上,上述数据库优化措施之间是相互联系的。ORACLE数据库性能恶化表现基本上都是用户响应时间比较长,需要用户长时间的等待。但性能恶化的原因却是多种多样的,有时是多个因素共同造成了性能恶化的结果,这就需要数据库有比较全面的计算机知识,能够敏感地察觉到影响数据库性能的主要原因所在。另外,良好的数据库管理工具对于优化数据库性能也是很重要的。

ORACLE数据库性能优化工具

常用的数据库性能优化工具有:

1、1、ORACLE数据库在线数据字典,ORACLE在线数据字典能够反映出ORACLE动态运行情况,对于调整数据库性能是很有帮助的。

2、2、作系统工具,例如UNIX作系统的vmstat,iostat等命令可以查看到系统系统级内存和硬盘I/O的使用情况,这些工具对于弄清出系统瓶颈出现在什么地方有时候很有用。

3、3、SQL语言跟踪工具(SQL TRACE FACILITY),SQL语言跟踪工具可以记录SQL语句的执行情况,可以使用虚拟表来调整实例,使用SQL语句跟踪文件调整应用程序性能。SQL语言跟踪工具将结果输出成一个作系统的文件,可以使用TKPROF工具查看这些文件。

4、4、ORACLE Enterprise Mar(OEM),这是一个图形的用户管理界面,用户可以使用它方便地进行数据库管理而不必记住复杂的ORACLE数据库管理的命令。

5、5、EXPLAIN PLAN——SQL语言优化命令,使用这个命令可以帮助程序员写出高效的SQL语言。

ORACLE数据库的系统性能评估

信息系统的类型不同,需要关注的数据库参数也是不同的。数据库需要根据自己的信息系统的类型着重考虑不同的数据库参数。

ORACLE数据库的入门知识问题。

Alter table EMP add sale number;

1.远程登录oracle需要配置tnsnames.ora把其中的host改为远程登录的ip,端口不一定是默认的1521,

在sql语句中如果是字符串采用单引号,引起来,不同于Ja中采用双引号,如果是数值型也可以引起来,只不过是数值类型数据当成字符串来处理

2.我不太明白你说的第二个问题,数据库实例用哪个pl可以看到你装的实例。

3.select from user_tables 可以看到你以什么身份登录的下的表,如果你用自己的用户去登录,应该显示的就是你当前用户下的表,可以用sys或者用户用此语句,这样可以看到表。

4.查看什么用户 得看你有啥权限 ,就是说你用的什么的权限问题。

1、关于配置使用PLSQL Dloper的问题,只要你通过oracle的工具“Net Configuration Assistant”将所有数据库都配置了即在tnsname.ora中都有记录,PLSQL Dloper就可以使用了。

2、查看上有几个数据库,最直接的方法就是到“控制面板-管理工具-服务”下查看有几个“OracleServ”开头的服务,就说明有几个数据库。

3、你可以直接使用PLSQL Dloper连接到数据库上查看,数据库中有几个用户,每个用户下有几张表,非常方便。

4、数据库常用的命令,你到网上输入关键字,一搜一大堆。

oracle怎样查询两个表格中的全部数据

在一个关系(参照表)中是主键,而另一个关系引用这个键。那么这个键在另一个关系中就是外键。

1、首先在使用的电脑上,添加想要查询数据库的服务和,通过Oracle客户端管理工具中的Net Mar来完成。

2、创建两个数据库的连接---DBLink,可以通过指令完成,也可以通过图形界面完成。

3、在Oracle管理工具中开启一个新的SQL windows窗口,测试作我们连接的异地Oracle数据库。

4、编写一bind N个查询语句来测试,这里做一个select作。

5、运行,如下图可以看到查询结果。

数据库软件都有那些?

企业里常用的数据库软件有Mysql、PostgreSQL、MicrosoftSQL、Oracle数据库、MongoDB。

1、Mysql。

MySQL原本是一个开放源码的关系数据库管理系统,原开发者为瑞典的MySQLAB公司,该公司于2008年被升阳微系统(SunMicros)收购。2009年,甲骨文公司(Oracle)收购升阳微系统公司,MySQL成为Oracle旗下产品。

MySQL由于性能高、成本低、可靠性好,已经成为的开源数据库,因此被广泛地应用在Internet上的中小型网站中。随着MySQL的不断成熟,它也逐渐用于更多大规模网站和应用。

2、PostgreSQ6、ORACLE公司提供的DBMS_SHARED_POOL程序可以帮助程序员将某些经常使用的存储过程“钉”在SQL区中而不被换出内存,程序员对于经常使用并且占用内存很多的存储过程“钉”到内存中有利于提高最终用户的响应时间。L。

PostgreSQL可以说是目前功能最强大、特性最丰富和结构最复杂的开源数据库管理系统,其中有些特性甚至连1)主键:表中其中一列或几列的组合,其值能标识表中每一行。商业数据库都不具备。这个起源于加州大学伯克利分校的数据库,现已成为一项开发项目,并且拥有广泛的用户群,尤其是在海外,目前国内使用者也越来越多。

PostgreSQL基本上算是见证了整个数据库理论和技术的发展历程,由UCB计算机MichaelStonebraker于1986年创建。在此之前,Stonebraker主导了关系数据库Ingres研究项目,88年,提出了Postgres的个原型设计。

MySQL号称是使用最广泛的开源数据库,而PG则被称为功能最强大的开源数据库。

3、MicrosoftSQL。

SQL是Microsoft开发的一个关系数据库管理系统(RDBMS),现在是世界上最为常用的数据库。SQL 现在是包括内置的商务智能工具,以及一系列的分析和报告工具,可以创建数据库、备份、、安全性更好以及更多。

SQL是一个高度可扩展的产品,可以从一个单一的笔记本电脑上运行的任何东西或以高倍云网络,或在两者之间任何东西。虽然说是“任何东西”,但是仍然要满足相关的软件和硬件的要求。

Oracle数据库系统是美国Oracle(甲骨文)公司提供的以分布式数据库为核心的一组软件产品,是目前的客户/(/,C/S)或浏览器/(Browser/,B/S)体系结构的数据库之一。

Oracle数据库是目前世界上使用最为广泛的数据库管理系统,作为一个通用的数据库系统,它具有完整的数据管理功能;作为一个关系数据库,它是一个完备关系的产品;作为分布式数据库它实现了分布式处理功能。

5、MongoDB

mongoDB是一个介于关系数据库和非关系数据库之间的开源产品,是最接近于关系型数据库的NoSQL数据库。它在轻量级JSON交换基础之上进行了扩展,即称为BSON的方式来描述其无结构化的数据类型。尽管如此它同样可以存储较为复杂的数据类型。

参考资料来源:百度百科——Mysql

参考资料来源:百度百科——PostgreSQL

参考资料来源:百度百科——MicrosoftSQL

参考资料来源:百度百科——Oracle数据库

参考资料来源:百度百科——MongoDB

Oracle笔记-优化策略与工具

DBCA是一个非常强大的工具,上面看到的只是DBCA最常用的创建一个数据库实例的使用,其实DBCA还提供另外两种使用方法,分别是responseFile和命令行带参调用。

第 章 优化策略与工具

标识问题

我的方法

绑定变量与分析(再次)

不使用绑定变量将增加语句分析 除了消耗CPU时间外 还会增加字典高速缓存上的闩锁

显示会话等待的 V$SESSION_ 具体名和含义可以参考Oracle Reference Manual的附录Oracle Wait Events

CURSOR_SHARING

CURSOR_SHARING参数缺省为EXACT 若指定为FORCE 则优化器可能将语句中所有的常数转换为绑定变量 虽然减少了语句分析 但是也会带来如下副作用

优化器可供利用的信息可能减少 从而改变执行路径 例如条件中对于某个特定值索引有较好的选择性 改为绑定变量时优化器并不会发现这一点

查询输出格式发生变化 虽然返回的数据长度不变 但列的长度可能改变 例如对于SELECT id tom name from emp name应该为VARCHAR ( ) 但是由于 tom 被改为绑定变量 则可能name的显示长度变为

查询更难评估 由于语句的改变 EXPLAIN PLAN看到的查询与数据库看到的可能不一致 从而使AUTOTRACE等的输出与实际执行路径不一致

因此 完善的应用系统不应当依靠CURSOR_SHARING来提高效率 仅能作为权宜之计

SQL_TRACE TIMED_STATISTICS与TKPROF

TIMED_STATISTICS并不会对系统产生过大负担 因此建议设置为TRUE

启动跟踪

SQL_TRACE可在系统或会话级激活 激活后跟踪文件将产生至init ora参数USER_DUMP_DEST(专用)或 BACKGROUND_DUMP_DEST(MTS)指定的目录 而文件大小通过MAX_DUMP_FILE_SIZE控制 其设置有如下三种方法

仅数值 以OS块为单位

数值+K/M 指定文件大小

UNLIMITED 无上限

一般只需要设置 M就足够了

激活SQL_TRACE的几种常用方式如下

ALTER SESSION SET SQL_TRACE=TRUE|FALSE

SYS DBMS_SYSTEM SET_SQL_TRACE_IN_SESSION 这里我们需要指定SID和SERIAL#(参考V$SESSION)

此外也可通过DBMS_SUPPORT包 相当于S跟踪的一个界面 但此包需要Oracle人员支持 非标配

随着WEB服务方式的普及 往往一个数据库会话很短 难以单独跟踪 对此 我们可以根据用户 在数据库级建立触发器

CREATE OR REPLACE TRIGGER logon_trigger

AFTER LOGON ON DATABASE

BEGIN

IF ( USER= TKYTE ) THEN

EXECUTE IMMEDIATE ALTER SESSION SET S TRACE NAME CONTEXT FOREVER LEVEL ;

END IF;

END;/使用并解析TKPROF输出

激活SQL_TRACE后 通过如下查询检查SPID

SELECT a spid FROM v$process a v$session b

WHERE a addr = b paddr

AND b audsid = userenv( sessionid )

此SPID就包含在跟踪文件的文件名中

UNIX系统中 若你不在Oracle的管理组中 则生成的跟踪文件所在目录可能无法访问 此时需要设定init ora参数_trace_files_public = true

TKPROF语法 TKPROF trc txt

其他用法可以直接运行TKPROF查看 一般常用选项就是 sort 可以根据某些参数值排序

对跟踪文件输出的一些解释

i 行

PARSE阶段 包括了软分析(在SHARED_POOL中找到语句)和硬分析

EXECUTE阶段 对SELECT几乎为空 对UPDATE则几乎是全部工作的体现

FETCH阶段 对SELECT是几乎所有的工作 对UPDATE则为空

ii 列

COUNT 发生的次数

CPU 消耗的CPU时间(CPU秒)

ELAPSED 总体运行时间

DISK 磁盘物理I/O

QUERY 一致读模式访问的块数 也包括了从回滚段读取的块数

CURRENT 访问的当前信息数据块(而不是一致读模式) 例如SELECT时读取数据字典内容 修改时也需要访问数据字典内容以写

ROWS 所涉及的行数

需要注意的现象

i 高的PARSE COUNT/EXECUTE COUNT(接近 %) 且EXECUTE COUNT大于

ii 对几乎所有SQL EXECUTE COUNT都是

可能没有使用绑定变量 在一个真实应用中 应该很少看到不同的SQL 同一个SQL应执行多次

iii CPU和ELAPSED时间相较大

说明花了很长时间等待一个 例如磁盘I/O 锁等

iv (FETCH COUNT)/(ROWS FETCHED)比例高

没有很好的使用批量提取 批量提取数据的方法是和语言/API相关的 例如Pro C中需要使用prefetch=NN预编译 Ja/JDBC下可以调用SETROWPREFETCH方法 PL/SQL可以在SELECT INTO中直接使用BULK COLLECT 而SQL PLUS缺省为每次取 行

v 极大的DISK COUNT

较难推断 但若DISK COUNT = QUERY + CURRENT MODE BLOCK COUNT 则说明几乎所有数据都来自磁盘 此时需要考虑SGA大小和此查询效率

vi 极大的QUERY COUNT或CURRENT COUNT

SQL工作量很大 需要注意

EXPLAIN PLAN问题

跟踪文件中显示的是真正执行的路径 TKPROF也支持EXPLAIN=XXX/XXX选项 不建议使用 其输出是转换跟踪文件当时优化器选择的执行路径 并是利用数据库的EXPLAIN工具 与真实路径时不完全一致的

使用与解析原始跟踪文件

S跟踪

ALTER SESSION SET S trace name context forr ll N

N= 同标准SQL_TRACE

N= 增加获得绑定变量值

N= 增加获得查询级的等待

N= 增加获得绑定变量值和查询级的等待

原始跟踪文件分段解析

文件头含有时间 数据库版本 OS版本 实例名等

APPNAME mod= %s mh=%lu act= %s ah=%lu

mod

传入DBMS_APPLICATION_INFO的模块名

mh

模块哈希值

act

传入DBMS_APPLICATION_INFO的动作

ah

动作哈希值

Parsing in Cursor #%d dep=%d uid=%ld oct=%d lid=%ld tim=%ld hv=%ld ad= %s

Cursor #

游标号 也可以用此值获知应用打开的游标数

len

下面SQL语句的长度

dep

SQL语句的递归(recursive)深度

uid

当前方案的用户ID 注意 这并不一定和后面的lid一致 因为可以用

alter session set current_schema来修改分析时的方案

oct

Oracle命令类型(Oracle Command Type)

lid

用于安全性检查访问权限的用户ID

tim

定时器 / 秒

ha

SQL语句的哈希ID

ad

V$SQLAREA中此SQL语句的ADDR列

EXEC Cursor# c=%d e=%d p=%d cr=%d mis=%d r=%d dep=%d og=%d tim=%d

Cursor #

游标号

cCPU时间 / 秒

e流逝(Elapsed)时间 / 秒

p物理读

cr

一致(QUERY模式)读(逻辑I/O)

cu

当前(Current)模式读(逻辑I/O)

mis

r处理的行数

dep

SQL语句的递归深度

og

优化器目标 =ALL ROWS =FIRST ROWS =RULE =CHOOSE

tim

定时器

与EXEC段类似的还有(即取代 EXEC )

PARSE

分析一个语句

FETCH

从一个游标取出数据行

UNMAP

用于显示在不需要时从中间结果释放临时段

SORT UMAP

同UNMAP 指排序段

WAIT Cursor# nam= %s ela=%d p =%ul p =%ul p =%ul

Cursor#

游标号

nam

等待名

ela

流逝时间 / 秒

p p p

等待特定的参数

以上为文件头与ALTER SESSION出现的跟踪信息 此后开始出现运行的SQL语句

BIND段

cursor#

游标号

绑置 从 开始

dty

数据类型

mxl

绑定变量长度

mal

数组长度(当使用数组绑定或BULK作时)

scl

数值范围(scale)

pre

精度(precision)

oac

内部标记 若此值为奇数 则绑定变量可能为NULL(允许为NULL)

oacfl

内部标记续

size

缓冲区大小

offset

用于逐片(piecewise)绑定

bfp

绑定地址

bln

绑定缓冲区大小

l

真实值长度

flag

内部标记

value

绑定值的字符串表示(如果可能 会是一个十六进制dump)

其中dty SELECT text FROM ALL_VIEWS WHERE view_name = USER_VIEWS 可看到一个将dty数值转换为字符串表示的函数

此后我们可以看到WAIT段 即真正的等待

对于ENQUEUE 实际就是锁 可用以下函数(传入参数为p )判断类型

CREATE OR REPLACE FUNCTION enqueue_decode(l_p in number) return varchar

AS

l_str varchar ( );

BEGIN

SELECT CHR(BITAND(l_p ) / ) ||

CHR(BITAND(l_p ) / ) || ||

DECODE(BITAND(l_p )

No lock

No lock

Row Share

Share

Share Row Excl

Exclusive )

INTO l_str

FROM DUAL;

RETURN l_str;

END;

XCTEND(事务边界)段记录了提交等

rlbk

回滚标记 提交 回滚

rd_only

只读标记 变化提交或回滚 事务只读

STAT段记录了运行时SQL真正的执行

cursor #

游标号

id

如:可以采用as命名别名,as可以省略执行行号

cnt

查询中流经此步骤的行数

pid

此步骤的父ID

执行中的位置

obj

访问的对象的对象ID

op

作的文本描述

PARSE ERROR段

len

SQL语句长度

dep

SQL语句递归深度

uid

分析的方案

oct

Oracle命令类型

lid

权限方案ID

tim

定时器

err

ORA错误代码

ERROR段

cursor #

游标数

err

ORA错误代码

tim

定时器

DBMS_PROFILER

StatsPack

V$表

V$_NAME

说明名和p p p 三个参数

V$FILESTAT和V$TEMPSTAT

说明系统I/O概况

V$LOCK

说明系统锁的情况 但注意Oracle并不在外部保存行锁 此视图可以找到TM(DML Enqueue)锁 即说明产生了行锁

V$MYSTAT

说明当前会话的统计信息 需要V_$STATNAME(不用V$STATNAME 只是V_$STATNAME的一个同义词)和V_$MYSTAT上的SELECT权限

CREATE VIEW MY_STATS AS

SELECT a name b value

FROM V$STATNAME a V$MYSTAT b

WHERE a statistic# = b statistic#

V$OPEN_CURSOR

记录所有会话打开的游标 由于Oracle也会缓存已关闭的游标 因此此视图中也会包含已关闭的游标信息

V$PARAMETER

说明了所有的init ora参数

V$SESSION

记录数据库的每个会话 需要对V_$SESSION的SELECT权限

V$SESSION_

说明会话的情况

V$SESSION_LONGOPS

记录CBO认为执行时间超过 秒的命令及进展

V$SESSION_WAIT

记录所有正在等待某的会话及已等待时间

V$SESSTAT

类似V$MYSTAT 但显示所有会话

V$SESS_IO

V$SQL和V$SQLAREA

记录SQL信息 建议使用V$SQL V$SQLAREA是从V$SQL合并而来的视图 代价较高 对已经繁忙的系统是一个负担

V$STATNAME

说明了统计号到统计名的映射

V$SYSSTAT

记录实例层面的统计信息 当数据库关闭时才清空 也是StatsPack很多数据的来源

V$SYSTEM_

lishixinzhi/Article/program/Oracle/201311/16750

如何创建数据库实例

60.查询员工信息,查询哪些人是管理者,要求显示出其员工编号和员工姓名

按照DBCA给出的提示,很容易创建一个新数据库实例。

在创建数据库的时候,DBCA还提供了两个选项,让你可以根据刚刚设置好的参数生成一个数据库实例模板和一份数据库实例创建脚本。这两个东西是非常好,非常有用的东西,数据库模板由Oracle自己管理维护,已经创建好的数据库实例模板可以在DBCA图形程序新建数据库实例时作为模板来使用,另外在DBCA使用responseFile文件或者命令行参数创建数据库时也需要用到(见后面介绍);数据库创建脚本是一组脚本,包括shell脚本和sql脚本,这些脚本共同实现一个功能,那就是按照你之前在DBCA中设置好的那样创建一个数据库实例(后面也会有介绍),你需要做的只是将这些脚本在你的代码中调用起来。当然,你也可以选择只生成数据库模板或者数据库脚本,而不用去创建一个真的数据库(这通常很费时间)。

先说DBCA的responseFile使用方法,responseFile这个东东并不陌生,前文讲的Oracle自动安装就ALTER SESSION SET S 可获得更详细的信息是使用responseFile完成的,DBCA的responseFile使用方法和Oracle安装程序的responseFile使用方法基本一致。但DBCA的responseFile的来源只能是Oracle安装包中提供的模板文件,而不能向Oracle安装程序的responseFile一样,先自己record一个,然后再用这个record去指导Oracle的自动安装。从Oracle安装包中获取到DBCA的responseFile模板文件后,你可以根据自己的需要编辑修改该模板文件,以完成对数据库实例的某些参数设置(DBCA图形界面所提供的参数设置,responseFile中都可以设置,而且该responseFile模板文件的注释写的很好,你完全不用担心无法搞定那些繁杂的数据库实例参数设置,赞Oralce一个!)。该模板文件在Oracle安装包中的位置一般在${ORACLE_PACKAGE}/response目录下。

有了responseFile之后,你只需在调用DBCA的时候指定responseFile的位置和另外一些参数:

dbca [-silent|-progressOnly] -responseFile responseFile名称

其中-silent|-progressOnly选项意义和Oracle安装程序命令行参数中的同名选项一样,表示完全字符界面自动安装或者带图形提示界面的半自动化安装。

responseFile名称当然就是responseFile的具置了。

但是,有一点不是很好,那就是使用DBCA的responseFile方式创建Oracle数据库实例,需要事先已经存在一个数据库实例模板了,在responseFile中再指定该数据库实例模板名,然后DBCA再依据这个已有的数据库实例模板完成新数据库实例的创建,所以就会有前面讲到的DBCA图形界面创建数据库实例时提供生成数据库实例模板的选项(数据库实例模板也可以从一个已有数据库实例生成),就是在这要用到的。

从上面调用DBCA使用responseFile的命令中,应该已经看到了DBCA是提供一些命令行参数选项的,其实DBCA提供的命令行参数选项远比你想象的强大,甚至可以这么说,所有DBCA图形界面和responseFile能够办到的事,通过DBCA丰富的命令行参数选项都可以办到。你在DBCA图形界面上设置的参数或者在responseFile中指定的参数值都可以通过DBCA的命令行参数选项来进行设置,所以你完全可以只通过DBCA的命令行带参调用来完成一个数据库实例的创建(当然也包括删除、修改数据库实例等所有DBCA图形界面所能提供的功能)。其实,我更愿意这样认为,DBCA的responseFile应用也是一种DBCA命令行带参调用的使用。需要注意的是,当DBCA的命令行参数和responseFile同时设置一个参数时,命令行参数的优先级是比responseFile要高的。另外,使用DBCA命令行带参调用新建数据库实例和使用responseFile新建数据库实例一样,也是需要事先已经存在一个数据库实例模板,才能完成新数据库实例的创建。一份非常详细的DBCA所有命令行参数选项列表,你可以通过执行dbca -获得。

到现在你可能已经发现,DBCA图形界面、DBCA的responseFile使用以及DBCA的命令行带参调用,其实是三个分别具备完全数据库实例设置功能的工具或者接口,分别对应不同的应用场景,它们可以满足你几乎所有的应用需求(使用这样的工具来帮助构建自己的软件真是非常惬意的一件事情,再赞Oracle一个!)。

第二种是通过脚本(是否称为命令行方式更合适,下文描述的脚本方式其实都是命令行方式的非交互式方法,或者说命令行的自动化方式,但其实所有脚本方式都可以将shell脚本或sql脚本中的shell命令、sqlplus命令拆分出来,手工在shell中或者sqlplus界面中进行交互式的输入执行,这可以称为命令行的手工方式)来完成数据库实例的代码中自动创建。这里说的脚本包括shell脚本和sql脚本,这种方式可以说是最适合与编程结合的,因为这些shell脚本或者sql脚本都可以直接在shell命令中调用执行,所以可以很好与shell编程相结合。而这其实是基于一个非常重要的事实,即Oracle提供了一个交互式的命令行工具sqlplus(类似与DB2的db2cmd),这个工具可以认为是一个Oracle数据库管理工具,通过它可以执行一些Oracle的数据库管理命令,来完成一些数据库管理工作(这当然就包括数据库实例的创建),同时你也可以把它当作一个SQL语句执行器,直接在里边执行你想要执行的SQL语句或者存储过程等,并获取执行结果。并且,更重要的是,sqlplus可以直接在shell命令行中进行非交互式的调用执行(通常是调用执行一段sqlplus语句,或者是一个由一些sqlplus语句组成的sql脚本,我所说的sqlplus语句包括Oracle数据库管理维护命令、SQL语句和存储过程等),这就为在shell编程中使用sqlplus完成数据库实例自动创建工作提供了可能。

shell命令行中非交互式调用sqlplus执行一段sqlplus语句是利用shell编程中重定向命令的一个特性,即分隔符重定向输入。一般用法如下:

command<<任意自定义分隔符

>(换行)内容

>(换行)内容

>自定义分隔符

shell中遇到<<则会自动将下一个单词认作分隔符,并将分隔符后面的文本当作command命令执行的内容传递给command依次全部执行直至遇到下一个分隔符单词才结束。这里的分隔符可以是任意自定义的单词,通常使用EOF,举例:

sqlplus / as sysdba<

startup nomount;

select from v$version;

shutdown immediate;

exit;

EOF

这段shell程序调用sqlplus执行了若干sqlplus语句,用来启动数据库实例,查询数据库版本信息,然后关闭数据库实例,退出sqlplus。

shell命令行中非交互式调用sqlplus执行一个sql脚本是利用sqlplus本身提供的命令行参数。在sqlplus界面中可以通过start命令和@命令来执行一个sql脚本,两者功效相同,用法如下:

SQL>start sql脚本路径;

SQL>@sql脚本路径;

sqlplus / as sysdba @./MySQL.sql

以上命令会调用sqlplus执行当前目录下的MySQL.sql脚本。

一种是诚如前文所述的那样,在使用DBCA图形工具创建数据库实例的同时生成一份数据库实例创建脚本(包括若干shell脚本和sql脚本),那么你就可以使用这份脚本,在shell中进行调用,完成数据库实例的代码自动创建。使用这份数据库实例创建脚本创建的新数据库实例和原数据库实例是完全一样,当然,你可以将生成的脚本进行修改,以完成你对数据库实例的某些设置,但是请在你对脚本内容已经足够了解,并且知道你自己在干什么的情况下修改脚本,否则你很有可能使用修改后的脚本无确创建数据库实例。这种方法中shell脚本对sqlplus的使用,更多的是使用sqlplus来执行一些Oracle生成的sql脚本(这些sql脚本的内容是就是一些sqlplus语句的,它们的任务就是完成数据库实例的创建以及设置)。

另一种情况则是不依靠DBCA生成的脚本,完全由自己来编写实现一份shell脚本,在脚本中你可以调用sqlplus执行一段sqlplus语句或者其它一些sql脚本,以完成数据库实例的创建和设置,这完全取决于你的实现;而最常用的用来创建数据库实例的一个方法就是在sqlplus中使用create database语句,create database语句提供了许多丰富的选项和参数设置,确保你能完全创建一个自己所需要的数据库实例。当然,还有一些其它方法可以创建数据库实例,比如调用执行oracle提供某些存储过程等。

至于create database语句的详细介绍可以参考oracle的sql reference。

第三种严格来说不能算作一种创建Oracle数据库实例的方法,它是通过已有的数据库实例为基础来完成新数据库实例的创建的。这种方法是首先通过种或者第二种方法来创建好一个数据库实例,然后将该数据库实例的物理文件进行备份,然后直接使用备份的物理文件恢复出一个与原数据库实例完全一样新的数据库实例,所以这种方法需要和、二种方法相配合才能使用。这种方法其实已经属于Oracle数据备份与恢复的范畴了,就是Oracle数据备份恢复方式中的物理备份恢复,所以这种方法可以叫做物理恢复法。

简单介绍物理恢复法,首先将一个已经存在数据库实例(已关闭)进行物理备份,所谓物理备份其实就是该数据库实例所使用的作系统文件,这些文件主要包括DataFiles、RedoLogs、ControlFiles和UndoFiles(这些文件一般存在于$ORACLE_HOME/oradata目录下),进行数据库实例恢复的时候只需将备份的作系统文件到新的oradata目录下即可,可以直接启动使用恢复后的该数据库实例。不难看出,这种备份恢复是依赖于作系统平台的。

详细的物理备份和恢复介绍可以参考oracle的backup and recovery basics以及backup and recovery aanced user's guide。

说完了数据库实例的创建,现在来说说数据库实例的删除和修改。其实介绍完了数据库实例的创建,数据库实例的删除和修改就非常简单了。基本和前文数据库实例创建的内容相一致,且比较而言更简单。

数据库实例的删除从上文中数据库实例的创建不难得到,大致有两种方法,DBCA工具和命令行方式。

命令行删除数据库实例的方式,严格来讲,是使用一组sqlplus命令来完成数据库实例的删除,这组sqlplus命令可以组织在一个sql脚本中,然后在shell命令行中调用sqlplus程序来执行该sql脚本,或者直接在shell命令行中利用shell程序重定向特性调用sqlplus依次完全执行这组sqlplus命令,再或者使用手工的交互式输入执行,使用方法请参考数据库实例创建部分。

SQL>startup restrict mount;

SQL>drop database;

使用sqlplus命令删除数据库实例,必须先以restrict mount方式将数据库实例加载(但不打开),然后使用drop database语句删除该数据库实例。

数据库实例的修改和数据库实例的创建,情况类似,DBCA方式或者命令行方式。只要是DBCA方式能够修改的数据库实例参数,命令行方式也都能办到。

DBA必备的23款SQL管理工具,精选

其中涉及到的sqlplus命令参考以下:

因为市场上有许多的SQL管理工具,所以要为SQL项目管理选择工具是一件有挑战性的事。为大家23款SQL工具的精选列表,希望朋友们喜欢。其中几款已经在昨天的SQL查询优化工具一文中,做过。

Aqua Data Studio是一个功能丰富的通用SQL集成开发环境(IDE),它使数据库开发人员,DBA和数据/业务分析人员能够从单个界面开发,管理和分析30多个平台的数据。

特征查看数据字典缓冲区的使用率,这个使用率也应该在90%以上,否则需要增加共享池的大小。:

dbForge Studio for SQL 是一个功能强大的IDE,用于SQL 管理,管理,开发,数据报告,分析等等。执行复杂数据库任务的SQL开发人员和DBA可以使用GUI工具来加速几乎所有数据库体验,例如设计数据库,编写SQL代码,比较数据库,同步模式和数据,生成有意义的测试数据等等。

特征:

dbWatch是一个完整的数据库和管理解决方案,适用于SQL ,Oracle,PostgreSQL,Sybase,MySQL和Azure。专为在大型内部部署,混合或云数据库环境中进行主动管理和日常维护自动化而设计。

特征:

Jet Profiler for MySQL是MySQL数据库的实时查询性能和诊断工具。该工具自2009年开发,非常稳定。

特征:

Adminer是一个用于管理数据库,表,关系,索引和用户的SQL管理工具。它支持所有流行的数据库管理系统,如MySQL,PostgreSQL,SQLite,MS SQL,Oracle和MongoDB。

特征:

它是一种用于分析微软SQL 数据库结构异的SQL管理工具。它允许比较数据库对象,如表,列,索引,外键,模式等。

特征:

EMS SQL Mar允许用户创建和编辑SQL 数据库对象,并创建,修改,执行和保存SQL查询。

特征:

它是一个基于JAVA的数据库管理工具。这种符合JDBC的SQL管理工具允许用户查看数据库结构并发出SQL命令。它还支持Firebird,微软Access,微软SQL ,MySQL,Oracle,Sybase等数据库。

特征:

SQLite Database Browser是一个开源SQL工具,允许用户创建,设计和编辑SQLite数据库文件。它允许用户显示由它们和应用本身发出的所有SQL命令的日志。

特征:

DBeer是一个面向开发人员和数据库的开源数据库工具。它支持JDBC兼容的数据库,如MySQL,Oracle,IBM DB2,SQL ,Firebird,SQLite和Sybase。

特征:

DbVisualizer Free是一个SQL管理工具。它允许用户管理各种数据库,包括Oracle,Sybase,SQL ,MySQL,Informix,H3和SQLite。

特征:

HeidiSQL是另一种可靠的SQL管理工具。它使用流行的MySQL,微软SQL数据库和PostgreSQL设计。它允许用户浏览和编辑数据,创建和编辑表,视图,触发器和预定。

特征:

FlySpeed SQL Query是所有数据库用户和开发人员的数据处理工具。它允许用户在不熟悉SQL语法的情况下在不同的数据库上构建查询。

特征:

SQL Diagnostic Mar是Idera开发的性能工具。它提供诊断解决方案,帮助用户评估其SQL 中的运行状况和性能。

特征:

MaEngine开发的免费SQL性能工具。它允许用户密切关注SQL 性能!此工具还可以帮助用户SQL 的性能和可用性。它可以与MS SQL 2012和2014等所有MS SQL版本一起使用。

特征:

ApexSQL Monitor是一个基于Web的SQL管理应用程序。它为多个SQL 实例提供支持。

特征:

特征:

Toad是另一个SQL DBMS工具。它通过广泛的自动化,直观的工作流程和内置的专业知识化了生产力。此SQL管理工具可解决问题,管理更改并提升别的代码质量。

特征:

Zenoss提供ZenPacks来管理微软SQL ,MySQL,Oracle数据库和PostgreSQL。每个ZenPack都具有每个平台的特定功能,并提供可用的API来确定应的内容。

特征:

Lepide的SQL Storage Mar是一个用于分析SQL 性能的开源实用程序。它提供了对存储空间和性能的完全可视性。

特征:

SQL Mament Studio Express是一个用于访问,管理和开发SQL所有组件的开源工具。此工具支持SQL 的大多数管理任务。

特征:

SolarWinds Database Performance Analyzer是用于数据库管理的性能监视和分析工具。它还找出了瓶颈的原因并降低了数据库作的总体成本。

特征:

Sequel Pro是一款快速,易用的数据库管理工具,适用于MySQL。此SQL管理工具有助于与数据库进行交互。使用此软件添加新数据库,添加新表,添加新行和任何其他类型的数据库也很容易。

特征:

数据库性能优化有哪些措施?

1、调整数据结构的设计

这一部分在开发信息系统之前完成,程序员需要考虑是否使用ORACLE数据库的分区功能,对于经常访问的数据库表是否需要建立索引等。

2、调整应用程序结构设计

这一部分也是在开发信息系统之前完成,程序员在这一步需要考虑应用程序使用什么样的体系结构,是使用传统的/两层体系结构,还是使用Browser/Web/Database的三层体系结构。不同的应用程序体系结构要求的数据库资源是不同的。

3、调整数据库SQL语句

应用程序的执行最终将归结为数据库中的SQL语句执行,因此SQL语句的执行效率最终决定了ORACLE数据库的性能。ORACLE公司使用ORACLE语句优化器(OracleOptimizer)和行锁管理器(row-llmar)来调整优化SQL语句。

4、调整内存分配

内存分配是在信息系统运行过程中优化配置的,数据库可以根据数据库运行状况调整数据库系统全局区(SGA区)的数据缓冲区、日志缓冲区和共享池的大小;还可以调整程序全局区(PGA区)的大小。需要注意的是,SGA区不是越大越好,SGA区过大会占用作系统使用的内存而引起虚拟内存的页面交换,这样反而会降低系统。

5、调整硬盘I/O

这一步是在信息系统开发之前完成的。数据库可以将组成同一个表空间的数据文件放在不同的硬盘上,做到硬盘之间I/O负载均衡。

6、调整作系统参数

例如:运行在UNIX作系统上的ORACLE数据库,可以调整UNIX数据缓冲池的大小,每个进程所能使用的内存大小等参数。

实际上,上述数据库优化措施之间是相互联系的。ORACLE数据库性能恶化表现基本上都是用户响应时间比较长,需要用户长时间的等待。但性能恶化的原因却是多种多样的,有时是多个因素共同造成了性能恶化的结果,这就需要数据库有比较全面的计算机知识,能够敏感地察觉到影响数据库性能的主要原因所在。另外,良好的数据库管理工具对于优化数据库性能也是很重要的。

一、ORACLE数据库性能优化工具

常用的数据库性能优化工具有:

ORACLE数据库在线数据字典,ORACLE在线数据字典能够反映出ORACLE动态运行情况,对于调整数据库性能是很有帮助的。

作系统工具,例如UNIX作系统的vmstat,iostat等命令可以查看到系统系统级内存和硬盘I/O的使用情况,这些工具对于弄清出系统瓶颈出现在什么地方有时候很有用。

SQL语言跟踪工具(SQLTRACEFACILITY),SQL语言跟踪工具可以记录SQL语句的执行情况,可以使用虚拟表来调整实例,使用SQL语句跟踪文件调整应用程序性能。SQL语言跟踪工具将结果输出成一个作系统的文件,可以使用TKPROF工具查看这些文件。

ORACLEEnterpriseMar(OEM),这是一个图形的用户管理界面,用户可以使用它方便地进行数据库管理而不必记住复杂的ORACLE数据库管理的命令。

EXPLAINPLAN——SQL语言优化命令,使用这个命令可以帮助程序员写出高效的SQL语言。

二、ORACLE数据库的系统性能评估

信息系统的类型不同,需要关注的数据库参数也是不同的。数据库需要根据自己的信息系统的类型着重考虑不同的数据库参数。

1、在线事务处理信息系统(OLTP),这种类型的信息系统一般需要有大量的Insert、Update作,典型的系统包括民航机票发售系统、银行储蓄系统等。OLTP系统需要保证数据库的并发性、可靠性和最终用户的速度,这类系统使用的ORACLE数据库需要主要考虑下述参数:

数据库回滚段是否足够?

是否需要建立ORACLE数据库索引、聚集、散列?

系统全局区(SGA)大小是否足够?

SQL语句是否高效?

2、数据仓库系统(DataWarehousing),这种信息系统的主要任务是从ORACLE的海量数据中进行查询,得到数据之间的某些规律。数据库需要为这种类型的ORACLE数据库着重考虑下述参数:

是否采用B-索引或者bitmap索引?

是否采用并行SQL查询以提高查询select ename,sal,dname from emp a, dept b where a.deptno=b.deptno and sal > 2000;效率?

是否采用PL/SQL函数编写存储过程?

三、SQL语句的调整原则

SQL语言是一种灵活的语言,相同的功能可以使用不同的语句来实现,但是语句的执行效率是很不相同的。程序员可以使用EXPLAINPLAN语句来比较各种实现方案,并选出的实现方案。总得来讲,程序员写SQL语句需要满足考虑如下规则:

1、尽量使用索引。试比较下面两条SQL语句:

语句A:SELECTdname,deptnoFROMdeptWHEREdeptnoNOTIN

(SELECTdeptnoFROMemp);

语句B:SELECTdname,deptnoFROMdeptWHERENOTEXISTS

(SELECTdeptnoFROMempWHEREdept.deptno=emp.deptno);

这两条查询语句实现的结果是相同的,但是执行语句A的时候,ORACLE会对整个emp表进行扫描,没有使用建立在emp表上的deptno索引,执行语句B的时候,由于在子查询中使用了联合查询,ORACLE只是对emp表进行的部分数据扫描,并利用了deptno列的索引,所以语句B的效率要比语句A的效率高一些。

2、选择联合查询的联合次序。考虑下面的例子:

SELECTstuffFROMtabaa,tabbb,tabcc

WHEREa.acolbetween:alowand:ahigh

ANDb.bcolbetween:blowand:bhigh

ANDcolbetween:clowand:chigh

ANDa.key1=b.key1

这个SQL例子中,程序员首先需要选择要查询的主表,因为主表要进行整个表数据的扫描,所以主表应该数据量最小,所以例子中表A的acol列的范围应该比表B和表C相应列的范围小。

3、在子查询中慎重使用IN或者NOTIN语句,使用where(NOT)exists的效果要好的多。

4、慎重使用视图的联合查询,尤其是比较复杂的视图之间的联合查询。一般对视图的查询都分解为对数据表的直接查询效果要好一些。

5、可以在参数文件中设置SHARED_POOL_RESERVED_SIZE参数,这个参数在SGA共享池中保留一个连续的内存空间,连续的内存空间有益于存放大的SQL程序包。

四、CPU参数的调整

CPU是的一项重要资源,良好的工作状态是在工作高峰时CPU的使用率在90%以上。如果空闲时间CPU使用率就在90%以上,说明缺乏CPU资源,如果工作高峰时CPU使用率仍然很低,说明CPU资源还比较富余。

使用作相同命令可以看到CPU的使用情况,一般UNIX作系统的,可以使用sar_u命令查看CPU的使用率,NT作系统的,可以使用NT的性能管理器来查看CPU的使用率。

数据库可以通过查看v$sysstat数据字典中“CPUusedbythissession”统计项得知ORACLE数据库使用的CPU时间,查看“OSUserllCPUtime”统计项得知作系统用户态下的CPU时间,查看“OSSystemcallCPUtime”统计项得知作系统系统态下的CPU时间,作系统总的CPU时间就是用户态和系统态时间之和,如果ORACLE数据库使用的CPU时间占作系统总的CPU时间90%以上,说明CPU基本上被ORACLE数据库使用着,这是合理,反之,说明CPU被其它程序占用过多,ORACLE数据库无法得到更多的CPU时间。

数据库还可以通过查看v$sesstat数据字典来获得当前连接ORACLE数据库各个会话占用的CPU时间,从而得知什么会话耗用CPU比较多。

出现CPU资源不足的情况是很多的:SQL语句的重解析、低效率的SQL语句、锁冲突都会引起CPU资源不足。

1、数据库可以执行下述语句来查看SQL语句的解析情况:

SELECTFROMV$SYSSTATWHERENAMEIN

('parsetimecpu','parsetimeelapsed','parsecount(hard)');

这里parsetimecpu是系统服务时间,parsetimeelapsed是响应时间,用户等待时间,waitetime=parsetimeelapsed_parsetimecpu

由此可以得到用户SQL语句平均解析等待时间=waitetime/parsecount。这个平均59.查询员工名称和所属经历的名称,如果没有上级,也要查询出来等待时间应该接近于0,如果平均解析等待时间过长,数据库可以通过下述语句

SELECTSQL_TEXT,PARSE_CALLS,EXECUTIONSFROMV$SQLAREA

ORDERBYPARSE_CALLS;

来发现是什么SQL语句解析效率比较低。程序员可以优化这些语句,或者增加ORACLE参数SESSION_CACHED_CURSORS的值。

2、数据库还可以通过下述语句:

SELECTBUFFER_GETS,EXECUTIONS,SQL_TEXTFROMV$SQLAREA;

查看低效率的SQL语句,优化这些语句也有助于提高CPU的利用率。

3、数据库可以通过v$_nt数据字典中的“latchfree”统计项查看ORACLE数据库的冲突情况,如果没有冲突的话,latchfree查询出来没有结果。如果冲突太大的话,数据库可以降低spin_count参数值,来消除高的CPU使用率。

五、内存参数的调整

内存参数的调整主要是指ORACLE数据库的系统全局区(SGA)的调整。SGA主要由三部分构成:共享池、数据缓冲区、日志缓冲区。

1、共享池由两部分构成:共享SQL区和数据字典缓冲区,共享SQL区是存放用户SQL命令的区域,数据字典缓冲区存放数据库运行的动态信息。数据库通过执行下述语句:

select(sum(pins-reloads))/sum(pins)"LibCache"fromv$librarycache;

来查看共享SQL区的使用率。这个使用率应该在90%以上,否则需要增加共享池的大小。数据库还可以执行下述语句:

select(sum(gets-getmisses-usage-fixed))/sum(gets)"RowCache"fromv$rowcache;

2、数据缓冲区。数据库可以通过下述语句:

SELECTname,valueFROMv$sysstatWHEREnameIN('dbblockgets','consistentgets','physicalreads');

来查看数据库数据缓冲区的使用情况。查询出来的结果可以计算出来数据缓冲区的使用命中率=1-(physicalreads/(dbblockgets+consistentgets))。

这个命中率应该在90%以上,否则需要增加数据缓冲区的大小。

3、日志缓冲区。数据库可以通过执行下述语句:

selectname,valuefromv$sysstatwherenamein('redoentries','redologspacerequests');

查看日志缓冲区的使用情况。查询出的结果可以计算出日志缓冲区的申请失败率:

申请失败率=requests/entries,申请失败率应该接近于0,否则说明日志缓冲区开设太小,需要增加ORACLE数据库的日志缓冲区。

昆明北大青鸟ja培训班转载自网络如有侵权请感谢您的关注谢谢支持

关于oracle PLSQL??

3)支持分布式数据处理

我刚辞了工作, 之前就是用pl sql 做Oracle_ERP 的二次开发。

就语言本身而言,还是非常容易的。你会oracle查询的话,pl sql 基本上也会了。 但ERP中难的,或者值钱的技术并不是这个,而是流程。

上面的讲得很好,我就是来凑个热闹~

1 我想知道学习oracle PL1)支持多用户、大事务量的处理SQL需要掌握什么计算机基础??

什么也不需要...直接就可以学

2 这个到底是数据库查询语言还是编程语言?

编程语言,可能查询语言也包括在内, 我也不知道具体的划分。

3 是用来做什么的?二次开发oracle ERP用的吗?

开发oracle ,二次开发oracle

都用的着...你要决定从事Oracle工作的话,不管是开发还是管理

都非常有用。

1 我想知道学习oracle PLSQL需要掌握什么计算机基础??

在plsql 中使用的对数据库作的sql ,都是使用的标准sql语言,你只要知道mssql 的sql语句就可以了

2 这个到底是数据库查询语言还是编程语言?

这个软件功能非常大,既可以是数据库查询语言,同时也可以写编程语言

3 是用来做什么的?二次开发oracle ERP用的吗?

主要是开发oracle的 ,是oracle的图形作界面,作起来方便些,他跟mssql的查询分析器不多

oracle理论学习详解及各种简单作例子怎么解决

Row Exclusive

1. 数据库的发展过程

层次模型 -->网状模型 -->关系模型 -->对象关系模型

2. 关于数据库的概念

DB:数据库(存储信息的仓库)

DBMS:数据库管理系统(用于管理数据库的工具)

RDBMS:关系型数据库管理系统

ORDBMS:对象关系型的数据库管理系统

3. Oracle数据库的主要特点

2)数据库安全性和完整性控制

4)可移植性

4.Oracle一些常见问题?

1)如果我只有一张表,为什么我还要创建数据库?

SQL语言要求所有表都需放在数据库里。这项设计当然有它好的理由。SQL能控制多为用户同时访问表的行为。能够授予或撤销对整个数据库的访问权。这有时比控制每张表的权限要简单很多

2)创建库的命令的字母全是大写,一定要这样吗?

有些系统确实要求某些关键字采用大写形式。但SQL本身不区分大小写。也就是说,命令不大写也可以,但命令大写是良好的SQL编程惯例。

3)给数据库、表和列命名时有什么主意事项吗?

创建具有描述性的名称通常有不错的效果。有时候要多用几个单词来命名。所有名称都不能包含空格,所以使用下划线能够让你创建更具描述性的名称。命名时避免首字母大写,因为SQL不区分大小写。极有可能会搞错数据库。

4)为什么不能直接把BLOB当成所有文本值的类型?

因为这样很浪费空间。VARCHAR或CHAR只会占用特定空间。不会多于256字符。但BLOB需要很大的存储空间。随着数据库的增长,占用存储空间就是冒着耗尽硬盘空间的风险。另外,有些重要的字符串运算无法作BLOB类型的数据。只能用于VARCHAR或CHAR。

5)为什么需要INT和DEC这类数值类型?

节省数据库存储空间和效率有关。为表的没列选择最合适的数据类型可以为表瘦身,还可以使数据作更为快速。

5.Oracle关系数据库基础

表中任何列都可以作为主键,但要满足如下条件:

任何两行都不具有相同的主键值

每个行都必须具有一个主键值(主键列不允许为null值)

主键列中的值不允许修改或更新

主键值不能重用(如果某行从表中删除,它的主键不能赋给以后的新行)

一般以id或uuid作为主键的名字

2)外键是什么:

3)外建能干什么:

使两个关系(表)形成关联,外键只能引用参照表中的主键。保持数据一致性,完整性。

如图:

4)如何在数据库内表示一对一

5)如何在数据库内表示一对多

6)关系模型的完整性约束是什么?

是通过关系的某种约束条件对关系进行约束。也就是说关系的值随时间变化时应该满足一些约束条件。如年龄不能超过1000,性别必须是男或者女

7)关系模型的完整性约束能有什么?

实体完整性、参照完整性、用户自定义完整性。

实体完整性:针对基本关系而言,也就是一个二维表,主键不能为NULL

参照完整性:表之间存在关系,自然就存在关系的引用(外键),表和表之间的关系通过外键实现,外键可以为NULL或引用表的主键

用户自定义完整性:针对不同的需求定义自己的完整性约束,如不允许学生编号中出现非数字字符,性别必须是男或者女

6. Oracle自学笔记

1)数据库和表的名称不一定要大写。

2)列是存储在表中的一块数据,行是一组能够描述某个事物的列的。列和行构成了表。

3)创建oracle数据库。使用oracle自带的Database Configuration Assistant 来创建库

4)使用DBA身份 创建表空间。具体sql如下:

create tablespace pzw datafile 'C:/oracle/pzw.dbf' SIZE 1024M REUSE AUTOEXTEND OFF extent mament local segment space

mament auto;

5)删除用户命令

drop user pzw cascade;

6)删除表空间命令

DROP TABLESPACE pzw INCLUDING CONTENTS AND DATAFILES;

7 )查看表空间命令。

链接地址:查看oracle表空间的两种方式

8)创建用户。

create user pzw identified by pzw;

9)将包空间分配给用户

alter user pzw default tablespace pzw;

10)给用户授权

grant create session, create table, unlimited tablespace to pzw;

11)创建表

CREATE TABLE doughnut_list

(doughnut_name VARCHAR(10),

doughnut_type VARCHAR(6),

doughnut_birthday DATE

);

12)删除表

DROP TABLE

doughnut_list;

13)给表中增加一列

14)数据库插入一条数据

insert into DEPT_EMP_TABLE (DEPT_EMP_NO,emp_no,Dept_No,Joined_Date) values (009,'00002',1,to_date('2011-2-28 15:42:56','yyyy-mm-dd hh24:mi:ss'));

commit;

15)数据库修改一条数据

update emp set emp_name='张惠妹',age=20,='女',profession='流行歌手' where emp_no = '00002';

commit;

16)数据库删除一条数据

delete emp where emp_no = '000013';

commit;

17)查询全部数据

select from emp;

18)创建视图

create view adress_view as select from pzw.adress;

以下为oracle演示数据作及练习题(对菜鸟及有用。使用scott 登陆。默认密码tiger)

1.查看演示数据的表。

selectfromtab

或者selecttable_namefromuser_tables;

2.查看表结构(plsql作无效。使用命名提示符 可以作)

desc dept;

3.查看员工姓名

select ENAMEfrom emp;

4.查询员工的编号和明星(sql语句不区分大小写)

select empno, enamefrom emp;

5.查询所有的字段

selectfromemp;

一般建议不使用号,使用号不明确,建议将相关的字段写到select语句的后面,使用号的效率比较低

6.列出员工的编号,姓名和年薪。

select empno, ename,sal12from emp;

select语句中可以使用运算符,以上存在一些问题,年薪的字段名称不太明确

7.将查询出来的字段显示为中文

select empnoas 员工编号, ename as 员工姓名, sal12 as 年薪 from emp;

可以采用as命名别名,as可以省略

8.查询薪水等于5000的员工

select empno, ename, sal from emp where sal=5000;

如果是字符类型的数据进行比较的时候,是区分大小写的。

9.查询薪水不等于5000的员工

select empno, ename, sal from emp where sal<>5000;

10.查询工作岗位不等于mar的员工

select empno,ename,sal,job from emp where job<>

'mar';

select empno, ename, sal from emp where sal>=1600 and sal<=3000;

查询薪水为1600到3000的员工(种方式,采用between ...and...)

select empno,ename,sal,job from emp where salbetween

1600and 3000;

between ….and …,包含值和最小值

between ….and …,不仅仅可以应用在数值类型的数据上,还可以应用在字符数据类型上

between ….and …,对于两个参数的设定是有限制的,小的数在前,大的数在后

12.查询津贴为空的员工

select from emp where commis null;

13.查询津贴不为空的员工

select from emp where commis not null;

14.工作岗位为MANAGER,薪水大于0的员工。

select empno, ename, sal from emp where job='MANAGER'and sal>0;

and表示并且的含义,表示所有的条件必须满足

15.查询出job为mar和job为salean的员工。

select from emp where job='MANAGER'or job='SALESMAN';

or,只要满足条件即可,相当于或者

16.查询薪水大于1800,并且部门编号为20 或者 30的

select from emp where sal>1800and (deptno=20or deptno=30);

17.查询出job为mar和job为salean的员工

select from emp where jobin('MANAGER','SALESMAN');

18.查询job不等于MANAGER并且不能与SALESMAN的员工(种写法)

select from emp where job<> 'MANAGER' and job <> 'SALESMAN';

19 .查询job不等于MANAGER并且不能与SALESMAN的员工(第二种写法)

select from emp where jobnot in('MANAGER','SALESMAN');

20.查询以M开头的所有员工

select from emp where ename like 'M %';

21.查询以T结尾的所有员工

select from emp where ename like '%T';

22.查询以O结尾的所有员工

select from emp where ename like '%O%';

23.查询姓名中个字符为A的所有员工

select from emp where ename like '_A%';

Like可以实现模糊查询,like支持%和下划线匹配

Like中%和下划线的别?

%匹配任意字符出现任意次数

下划线只匹配一个任意字符出现一次

Like语句是可以应用在数值类型的数据上的,但是如果没有使用引号括起来的话,那么不能使用%和下划线。类似于等号的作,如果使用引号括起来的话,那么可以使用%和下划线,将数值类型的数据转换为字符类型后进行处理。

24.按照薪水由小到大排序

s elect from emporder by sal;

如果存在where子句那么order by必须放到where语句的后面

25.手动指定按照薪水由小到大排序

select from emp order by saldesc;

26. 按照薪水和姓名排序

select from emp order by sal desc ,ename desc;

如果采用多个字段排序,如果根据个字段排序重复了,会根据第二个字段排序

select from emp order by sal asc;

26.手动指定按照薪水由大到小排序

select from emporder by sal desc;

27.按照薪水升序(使用字段的位置来排序)

select from emp order by 6;

不建议使用此种方式,采用数字含义不明确,程序不健壮

28.查询员工.将员工姓名全部转换成小写。

select lower(ename)from emp;

29.查询job为mar的员工

select from emp where job=upper('mar');

30.查询姓名以M开头所有的员工

select from emp wheresubstr(ename, 1,1)='M';

方法的第二个参数表示的是查询字符的位置,0,1都表示个字符,负数表示从结尾开始的位置,第三个参数表示截取字符串的长度。

31.取得员工姓名的长度

select length(ename) from emp;

32.取得工作岗位为MANAGER的所有员工

select from emp where job=trim('MANAGER ');

trim会去首尾空格,不会去除中间的空格

33.查询1986-02-20入职的员工(种方法,与数据库的格式匹配上)

select from emp where HIREDATE='20-2月 -81';

查询1982-02-20入职的员工(第二种方法,将字符串转换成date类型)

select from emp where hiredate=to_date('1981-02-20 00:00:00', 'YYYY-MM-DD HH24:MI:SS');

to_date可以将字符串转换成日期,具体格式to_date(字符串,匹配格式)

34.查询1981- 02-30以后入职的员工,将入职日期格式为yyyy-mm-dd hh:mm:ss

select empno, ename,to_char(hiredate,'yyyy-mm-dd hh24:mi:ss')from emp where hiredate>to_date('1981-02-2000:00:00', 'YYYY-MM-DD HH24:MI:SS');

35.查询员工薪水加入前分位

select empno, ename, to_char(sal, '$999,999') from emp;

36.查询薪水加入千分位和保留两位小数

select empno, ename, to_char(sal, '$999,999.00') fromemp;

将数字转换成字符串,格式

控制符

说明

9表示一位数字

位数不够可以补零

$美元符

L本地货符号

.显示小数

,显示千分位

37.将字符串转换成数值

select from emp where sal>to_number('1,500','999,999');

38.取得员工的全部薪水,薪水+津贴

select empno, ename, sal, comm, sal+nvl(comm,0) fromemp;

39.如果job为MANAGER薪水上涨10%,如果job为SALESMAN工资上涨50%(case … when … then …end)

select empno, ename, job, sal, (casejobwhen 'MANAGER' thensal1.1when 'SALESMAN' thensal1.5end)as newsal from emp;

40.如果job为MANAGER薪水上涨10%,如果job为SALESMAN工资上涨50%(decode)

select empno, ename, job, sal, decode(job,'MANAGER', SAL1.1, 'SALESMAN',sal1.5) as newsal from emp;

41.四舍五入

select round(1234567.4567, 2) from dual;

Dual是oracle提供的,主要为了方便使用,因为select的时候需要用from

42.聚合函数

count

取得记录数

sum

求和

Avg

取平均

Max

取的数

min

取最小的数

43.取得所有员工人数

select count() from emp;

Count()表示取得所有记录,忽略null,为null值也会取得

44.取得津贴不为null的员工数

select count(comm) from emp;

采用count(字段名称),不会取得为null的纪录

45.取得工作岗位的个数

select count(distinctjob) from emp;

Distinct可以去除重复的纪录

46.取得薪水的合计

select sum(sal) from emp;

47取得薪水的合计(sal+comm)

select sum(sal+nvl(comm, 0)) from emp;

48.取得平均薪水

select g(sal) from emp;

49.取得薪水

select max(to_char(hiredate, 'yyyy-mm-dd')) from emp;

50.取得最小薪水

select min(sal) from emp;

51.取得最早入职的员工

select min(hiredate) from emp;

52.可以将这些聚合函数都放到select中一起使用

select count(), sum(sal), g(sal), max(sal),min(sal) from emp;

53.取得每个岗位的工资合计,要求显示岗位名称和工资合计。

select job, sum(sal) from empgroupby job;

采用group by,非聚合函数所使用的字段必须参与分组,

Group by中不能使用聚合函数

如果使用了order by,order by必须放到group by后面

54。取得每个岗位的平均工资大于2000

select job, g(sal) from emp group by job hing g(sal) >2000;

分组函数的执行顺序:

1、 根据条件查询数据

2、 分组

3、 采用hing过滤,取得正确的数据

55. 显示每个员工信息,并显示所属的部门名称

select ename ,dname from emp a ,dept b where a.deptno = b.deptno;

以上查询也称为“内连接”,指查询相等的数据

56.取得员工和所属的的姓名

select a.ename, b.ename from emp a, emp b wherea.mgr=b.empno;

以上称为“自连接”,只有一张表连接,具体的查询方法

57.(内连接)显示薪水大于2000的员工信息,并显示所属的部门名称

SQL99语法:

select ename,sal,dname from emp a join dept b on a.deptno = b.deptno where sal>2000;

SQL92语法

Sql92语法和sql99语法的区别:99语法可以做到表的连接和查询条件分离,特别是多个表进行连接的时候,会比sql92更清晰

58.(外连接)显示薪水大于2000的员工信息,并显示所属的部门名称,如果某一个部门没有员工。那么该部门也必须显示出来

select dname,ename from emp a right join dept b on a.deptno = b.deptno;

select ename,ename from emp where empno in (select distinct mgr from emp where mgr is not null);

61.查询那些人的薪水高于员工的平均薪水,需要显示员工编号,员工姓名,薪水。

select empno, ename, sal from emp where sal>(selectg(sal) from emp);

分析思路:首先根据文字描述找出被依赖的条件,逐次分析

62.查询各个部门的平均薪水所属的等级,需要显示部门编号,平均薪水,等级编号

select a.deptno, a.g_sal, b.grade from (select deptno, g(sal) g_sal fromemp group by deptno) a, salgrade b where a.g_sal between b.losal and b.hisal;

关键点:将子查询看作一张表

63.查询员工信息以及部门名称

Select e.empno, e.ename, e.deptno, (select dname from dept where deptno = e.deptno) as dname from emp e

select from emp where job='MANAGER'

union

select from emp where job='SALESMAN'

65.minus可以移出(相减)

查询部门编号为10和20的,取出薪水大于2000的。

select from emp where deptno in(10, 20)

minus

select from emp where sal>2000

66.rownum隐含字段

select rownum, a. from emp a;

67.取得前5条数据

select from emp where rownum <=5;

68.取得薪水的前5名

select empno, ename, sal from (select empno,ename, sal from emp order by sal desc)whererownum <=5