当前位置:文档之家› Oracle高效开发技术总结

Oracle高效开发技术总结

Oracle高效开发技术总结
Oracle高效开发技术总结

Oracle高效开发技术总结

oracle开发技术交流

一. 系统篇

高可用系统架构

数据库选型

如何估算系统设计规模

公司系统现状与扩展

二. 高性能数据库设计与pl/sql高级编程

表/索引的创建

B*树索引集群表与散列集群表

索引组织表

Sql部分

Pl/sql部分

索引表

嵌套表

变长数组

批绑定

集合的异常处理

pl/sql优化总结

管理事务和锁定

动态SQL与静态sql

具体内容:

系统篇

1. 高可用系统架构

2. 数据库选型

3. 如何估算系统设计规模

4. 公司系统现状简介

1.高可用系统架构概述

一个高可用系统是由多个子系统组合的,其中每个子系统的可用性一定会高于整个系统的可用性

A. 高可用的应用设计

分布式技术

cache技术

search技术

B. 高可用的数据库设计

好的数据库设计,可以保证数据库的可扩充性和良好的性能

1. oracle的高可用产品,如:RAC,data guard,stream,advance replication,

server HA,,还有MV/rman/oracle log miner/oracle flashback query等

2. 数据库的应用设计(范式设计,反范式设计,数据库分布式设计,索引表和簇表的设计等)

C. 高可用的网络设计

可靠性,包括链路与硬件的冗余

高速性,包括响应速度和吞吐量

健壮性,比如在Dos攻击的表现

安全性,有很强的安全策略,防止入侵

D. 高可用的主机设计

主机的HA(双机互备/双机热备)

oracle的RAC

在因主机失败或主机网络失败,可以保证系统的可用性。HA和RAC最大的区别在于,HA是os提供的active/standby解决方案,RAC是oracle提供的active/standby解决方案

E. 高可用存储设计

存储的选择(存储架构/存储的cache技术/存储主要性能指标)

选择合理的raid的级别

选择合理的存储容灾方案(oracle高可用产品stream,logical standby;非oracle技术,

如复制软件share plex)

2.数据库选型

在数据库设计中,要确定数据库的类型(OLAP/OLTP),使用合适优化设计方法,要

熟悉所操作数据的特点(连续操作,随机操作),更重要的是要熟悉自己的业务类型

A.

OLTP系统是事务性非常多的系统,都是以小型查询为主,评估这样的系统的时候,一般看秒事务数与执行的sql数量。典型的OLTP系统有电子商务,银行,证券等;OLTP系统最容易出现瓶颈的地方是CPU和磁盘子系统

CPU出现瓶颈需要调整(调整应用一般可以解决80%以上的性能问题)

1. 调整应用(表现在高逻辑读总量与计算性函数或者过程)

2. 整理表的碎片,重建索引,添加适当索引,优化sql

3. 减少sql的分析(session_cached_cursors缓存游标,使用绑定变量)

4. 合理调整共享池

磁盘I/O出现瓶颈

1. 存储性能瓶颈:控制器不足,cache偏小,cache设置不合理,io通道容量不足等

2. 磁盘性能瓶颈:磁盘数量过少,使用了速度比较慢的磁盘等

3. 使用了不合理的raid模式

4. 在使用raid的情况下,存在io热点,多个热点文件使用同一个磁盘

5. 异步io配置不正确

6. 数据库各种缓冲区设置不合理,缓冲命中率很低

2.数据库选型

7. PGA的各种缓冲设置过小(自动PGA管理时,PGA设置过小)

8. 重做日志存在性能瓶颈

9. 重做缓冲设置不合理

10. 存在热点数据

11. 表空间碎片严重

12. 表和索引的存储参数不合理

13. 行迁移比较严重

14. 存在大量大表扫描的情况

15. sql选择了不好的执行计划

在当今的IT技术发展中,磁盘IO是相对发展最慢的,为了弥补磁盘io在整个系统的的不足,可以使用大量cache(减少动态pv/增加cache命中率)和B-tree索引,在OLTP 系统尽量参考如下规则

1. 语句越简单越好,这样执行计划比较稳定

2. 一定要使用绑定变量,减少语句解析

3. 减少表关联,减少分布式事务,不要使用mv技术,并行技术,位图索引

4. 使用批量操作快速提交,尽量把大事务转化小事务,避免阻塞的发生

OLAP系统,也称DSS系统,就是我们说的数据仓库,评估这样系统的时候,一般看磁盘系统的吞吐量(带宽)

3.如何估算系统设计规模

如果要为新系统选择硬件,就要明确一些参数指标概念,下面是样例系统的相关指标参数:

pv/天,动态pv率,逻辑读/DPV,高峰系数,cache命中率,读写的比例

1000000 1/10 2000 5 98% (15:1)

不同厂家评测,1GHZ的CPU,在满载的情况下对oracle数据库的平均处理能力

逻辑读/每秒物理读/每秒

100000 25000

通过这些参数可以估算需要多少磁盘iops?或者说根据现有硬件可以预测系统所能承载的压力

高峰时期每秒物理读个数:

1000000/(24*3600)*1/10*2000*5*2/100*15/16

高峰时期每秒物理写个数

1000000/(24*3600)*1/10*2000*5*2/100*1/16

4. 公司系统现状简介

这部分信息隐去

二. 高性能数据库设计与pl/sql高级编程

表/索引的创建

B*树索引集群表与散列集群表

索引组织表

索引的创建与使用(*)

Sql部分(*)

Pl/sql部分

索引表

嵌套表

变长数组

批绑定

集合的异常处理

pl/sql优化总结

管理事务和锁定

动态SQL与静态sql

表/索引的创建

在我们的数据库结构中主要用了两种存储结构,普通堆表和B*索引;为了充分考虑数据存储优化,我们还要引入IOT和聚簇表;针对表使用频繁度、并发度,数据增长量等因素为表和索引设计,pctfree、inittrans等存储参数;还有如何创建合适索引,这些都是我们在数据库设计阶段要考虑的。

表的类型:

堆组织表

B×树索引集群表

散列集群表

索引组织表

外部表

因为堆组织表我常用,外部表很少用到,所以我们这里主要极少集群表和IOT表

1. B*树索引集群表与散列集群表

创建B×树索引集群:

create cluster user_objects_cluster_btree(username varchar2(30)) size 1024;

create index user_object_idx on cluster user_objects_cluster_btree;

创建散列群:

create cluster user_objects_cluster_hash(username varchar2(30)) hashkeys 100 size 3168;

表/索引的创建

B*集群表使用样例:

create table user_info (

username,user_id,account_status,lock_date)

cluster user_objects_cluster_btree(username)

as

select username,user_id,account_status,lock_date from dba_users where 1=0;

散列集群表使用样例:

create table user_objects(

owner ,object_name,object_id,object_type)

cluster user_objects_cluster_btree(owner)

as

select owner,object_name,object_id,object_type from dba_objects where 1=0

集群表可以降低IO并提高缓冲区高速缓存的效率,B* 群表适合数据仓库,也适合OLTP 系统的父子表(要同时更新的)。

单表散列群表

顾名思义就是集群表里只有一个表

定义与使用样例:

create cluster object_id_lookup(object_id number)

single table

hashkeys 50000

size 100;

测试性能对比:

1.创建单表散列群表

create table single_table_hash_cluster

(

owner,object_name,object_id,object_type,created,last_ddl_time,timestamp,status

)

cluster object_id_lookup(object_id)

as

select owner,object_name,rownum,object_type,created,last_ddl_time,timestamp,status from

(select * from dba_objects

union all

select * from dba_objects )

where rownum<=50000

2. 创建普通堆表

create table heap_table

(

owner,object_name,object_id,object_type,created,last_ddl_time,timestamp,status, constraint heap_table_pk primary key(object_id)

)

as

select owner,object_name,rownum,object_type,created,last_ddl_time,timestamp,status from

(select * from dba_objects

union all

select * from dba_objects )

where rownum<=50000

比较运行时间特性

alter session set events '10046 trace name context forever ,level 12';

declare

l_rec single_table_hash_cluster%rowtype;

begin

for x in 1..3

loop

for i in 1..5000

loop

select * into l_rec

from single_table_hash_cluster

where object_id=i;

select * into l_rec

from heap_table

where object_id=i;

end loop;

end loop;

end;

alter session set events '10046 trace name context off';

用tkprof或runstats查看运行结果对比。

单表散列群表主要用于只读表或者是按键值读取一个表的数量远大于修改的应用程序集群表的优点是:物理集中放置数据,提高高速缓冲的效率,减少逻辑io,减少索引的需求;

缺点是:仔细考虑size的大小,控制插入增加集群效果,比堆表插入慢

索引组织表(IOT)

索引组织表基本是一个存储在索引中表,和集群表类似,但也有它的不同,如下:

他存在一个数据结构和一个索引结构中,而B树群有一个索引和数据段

IOT存储的数据按主键值排序,而B树群存储的键值本身是不排序的

IOT对于关联表和数据需要集中放置非常有用,不像集群表那样要考虑插入顺序

IOT表同样有集群表的优点,但也有传统表插入慢的缺点,比较适合瘦长表,即行短表定义与使用样例

创建IOT测试表:

reate table iot_table (

username varchar2(80),

nickname varchar2(80),

memo char(100),

constraint iot_pk primary key(username,nickname)

)

organization index;

创建普通堆表:

create table heap_table (

username varchar2(80),

nickname varchar2(80),

memo char(100),

constraint heap_pk primary key(username,nickname)

)

装载测试数据:

declare

begin

for i in 1..100

loop

for x in (select username from all_users)

loop

insert into heap_table

values(https://www.doczj.com/doc/cb5043188.html,ername,https://www.doczj.com/doc/cb5043188.html,ername||'_'||i,'X');

insert into iot_table

values(https://www.doczj.com/doc/cb5043188.html,ername,https://www.doczj.com/doc/cb5043188.html,ername||'_'||i,'X');

end loop;

end loop;

commit;

end;

模拟查询并查看性能效果:

alter session set events ' 10046 trace name context forever ,level 12';

declare

type array_type is table of varchar2(100);

l_array1 array_type;

l_array2 array_type;

l_array3 array_type;

begin

for i in 1 .. 10 loop

for x in (select username from all_users) loop

for y in (select *

from heap_table single_row

where username = https://www.doczj.com/doc/cb5043188.html,ername) loop

null;

end loop;

for y in (select *

from iot_table single_row

where username = https://www.doczj.com/doc/cb5043188.html,ername) loop

null;

end loop;

select * bulk collect

into l_array1, l_array2, l_array3

from heap_table bulk_collect

where username = https://www.doczj.com/doc/cb5043188.html,ername;

select * bulk collect

into l_array1, l_array2, l_array3

from iot_table bulk_collect

where username = https://www.doczj.com/doc/cb5043188.html,ername;

end loop;

end loop;

end;

/

alter session set events ' 10046 trace name context off'; Sql部分

在上一次培训的内容介绍的很详细,可以参考

Pl/sql部分

1. 索引表

2. 嵌套表

3. 变长数组

4. 批绑定

5. 集合的异常处理

6 pl/sql优化总结

为什么使用pl/sql?

1.pl/sql是数据操作的最高效的语言(oracle自己的产品也在用pl/sql,如:高级复制,application suite,工作流引擎等)

2.pl/sql具有可移植性和可重复性

在实际代码中使用程序包,那程序包有哪些优点?

1. 程序包减少或消除了级联失效

2. 增加了名字空间

3. 支持重载和封装

4. 允许把相关功能组织在一起

当第一次调用打包子程序时,整个包会被加载到共享内存池。所以,以后调用包内相关子程序时,就不再需要读取磁盘了,这样会加快我们的代码会执行速度,因此要把相关功能的代码放到一个包里。

独立的过程和函数什么时候可以用?

在不被其他代码调用,有独立的功能时,可以使用它们

函数和过程的区别:

存储过程:

用于数据库中完成特定的操作或任务(如插入,删除等)

程序包头部声明为proceudre

程序包头部声明时不需要返回类型

可以使用in/out/in out 三种模式的参数

可以作为一个独立的pl/sql语句执行

可以通过out/in out返回零个或多个值

sql语句中不可调用存储过程

函数:

用户特定的数据(选择)

程序包头部声明为function

程序包头部声明时要有返回类型,而且pl/sql块中至少要包括一个有效的return语句

可以使用in/out/in out 三种模式的参数,不能独立的执行,必须作为表达式的一部分

通过return语句返回一个值,切该值要与声明部分一致,也可以通过out类型的参数带出变量

sql语句中可以调用函数

集合类型:

在处理单行单列数据时,可以使用标量变量(pl/sql变量)

在处理单行多列数据时,可以使用pl/sql记录

在处理单列多行数据时,可以使用pl/sql集合

在处理多行多列数据时,可以pl/sql记录表(集合pl/sql记录和pl/sql集合的优点)pl/sql记录

定义:

declare

type a_login_record_type is record(

username a_https://www.doczj.com/doc/cb5043188.html,er_name%type,

userid a_https://www.doczj.com/doc/cb5043188.html,er_id%type

);

a_login_record a_login_record_type;

...

a_login_record a_login%rowtype;

简单实用(可以使用记录变量或记录元素)

set serverputput on;

declare

type a_login_record_type is record(

username a_https://www.doczj.com/doc/cb5043188.html,er_name%type,

userid a_https://www.doczj.com/doc/cb5043188.html,er_id%type

);

a_login_record a_login_record_type;

begin

select user_name,user_id into a_login_record

from a_login

where user_id=&v_userid;

dbms_output.put_line(a_login_https://www.doczj.com/doc/cb5043188.html,ername);

end;

/

pl/sql集合

pl/sql集合包括索引表(pl/sql表),嵌套表,变长数组

索引表

用于处理pl/sql数组的数据类型,他的元素个数没有限制,并且元素下标可以为负值(下标类型可以为binary_integer,pls_integer,varchar2)

定义与使用样例:

set serverputput on;

declare

type a_login_table_type is table of a_https://www.doczj.com/doc/cb5043188.html,er_name%type index by binary_integer;

a_login_table a_login_table_type;

begin

select user_name into a_login_table(1)

from a_login

where user_id=&v_userid;

dbms_output.put_line('用户名:'|| a_login_table(1));

end;

/

嵌套表

用于处理pl/sql数组的数据类型,元素下标从1开始,并且元素的个数没有限制,元素值可以稀疏的不需要排序;嵌套表类型可以作为表列的类型,但索引表类型不能作为表列的类型;在使用嵌套表的时候,必须使用其构造方法初始化嵌套表

定义与使用样例:

set serverputput on;

decalre

type a_login_table_type is table of a_https://www.doczj.com/doc/cb5043188.html,er_name%type;

a_login_table a_login_table_type;

begin

a_login_table:=a_login_table_type('username1','username2');

select user_name into a_login_table(1)

from a_login

where user_id=&v_userid;

dbms_output.put_line('用户名:'|| a_login_table(1));

end;

/

作为表列中类型的定义与使用样例

create type username_type is table of varchar2(50);

create table table_nest(

id number(4),

name varchar2(50),

username username_type

) nested table username store as username_table;

插入数据:

insert into table_nest values(1,'22',username_type('qwewq','qwewqe','12312') );

检索数据:

declare

username_tables username_type;

begin

select username into username_tables from table_nest where id=1;

for i in https://www.doczj.com/doc/cb5043188.html,ername_tables.count loop

dbms_output.put_line('用户名:'|| username_tables(i));

end loop;

end;

/

更新数据:

update table_nest t set https://www.doczj.com/doc/cb5043188.html,ername= username_type('xxxx','aaaaaa','ccccc')

变长数组(varry)

用于处理pl/sql数组的数据类型,他也可以作为表列的类型,其元素下标从1开始,并且元素的最大个数是有限制的,变长数组在使用时,也必须要用构造函数初始化的。

定义与使用样例

type a_login_table_type is varry(20) of a_https://www.doczj.com/doc/cb5043188.html,er_name%type;

a_login_table a_login_table_type:=a_login_table_type('初始化');

begin

select user_name into a_login_table(1)

from a_login

where user_id=&v_userid;

dbms_output.put_line('用户名:'|| a_login_table(1));

end;

/

作为表列中类型的定义与简单实用(和嵌套类似)

pl/sql记录表

pl/sql记录表集合pl/sql记录和pl/sql集合的优点,从而可以方便有效的处理多行多列数据

定义与使用样例

declare

type a_login_table_type is table of a_login%rowtype index by binary_integer;

a_login_table a_login_table_type

begin

select * into a_login_table(1) from a_login where user_id =&userid;

dbms_output.put_line('用户名:'|| a_login_table(1).user_name);

end;

/

多级集合

多级集合是指嵌套了集合类型的集合类型,通过多级集合,可以在pl/sql中实现类似多维数组的功能。比如定义二维数组,如下:

declare

type a1_varray_type is varray(10) of int;

type a2_varray_type is varray(10) of a1_varray_type;

na a2_varray_type:=a2_varray_type(

a1_varray_type(1,2,3,4),

a1_varray_type(2,3,4),

a1_varray_type(4,6)

);

begin

dbms_output.put_line('显示二维数组:');

for i in 1..na.count loop

for j in 1..na(i).count loop

dbms_output.put_line('na('||i||','||j||')='||na(i)(j));

end loop;

end loop;

end;

/

下表中列出oracle中集合的方法

COUNT 返回集合中元素的个数

DELETE 删除集合中所有元素

DELETE(x) 删除元素下标为x的元素,如果x为null,则集合保持不变对VARRAY非法DELETE(x,y) 删除元素下标从X到Y的元素,如果X>Y集合保持不变对VARRAY非法EXIST(x) 如果集合元素x已经初始化,则返回TRUE, 否则返回FALSE

EXTEND 在集合末尾添加一个元素对Index_by非法

EXTEND(x) 在集合末尾添加x个元素对Index_by非法

EXTEND(x,n) 在集合末尾添加元素n的x个副本对Index_by非法

FIRST 返回集合中的第一个元素的下标号,对于VARRAY集合始终返回1。

LAST 返回集合中最后一个元素的下标号, 对于VARRAY返回值始终等于COUNT。

LIMIT 返回VARRY集合的最大的元素个数,对于嵌套表和Index_by集合无用。

NEXT(x) 返回在元素x之后及紧挨着它的元素的值,如果该元素是最后一个元素,则返回null。

PRIOR(x) 返回集合中在元素x之前紧挨着它的元素的值,如果该元素是第一个元素,则返回null。

TRIM 从集合末端开始删除一个元素对index_by不合法

TRIM(x) 从集合末端开始删除x个元素对index_by不合法

集合的赋值

当使用嵌套表和变长数组的时候,可以将一个集合赋值给另一个集合,从oracle10g开始,嵌套表赋值,还可以使用set,multiset union,multiset intersect ,multiset except等集合操作符。

集合比较

从oracle10g开始

1. 判断集合是否为null:

“is null”,“is empty”

2. 判断两个嵌套表是否相等:

“=/!=”

3. 嵌套表还可以使用一些集合操作符:

cardinality(返回集合的元素个数),submultiset of(一个嵌套表是否为另一个嵌套表子集)

4.判断嵌套表是否包含重复的元素值:

is a set批绑定批量绑定是oracle9i提出的,是指执行单次sql操作能传递所有集合元素的数据,当在select,update,delete,insert语句上处理批量数据时,通过批量绑定可以极大的加快数据处理速度,提高应用程序的性能。批量绑定使用bulk collect和forall bulk collect:用于取得批量数据,该语句只能用于select,fetch和dml返回子句中

Forall:只适合执行批量DML语句

性能对比样例

创建测试表t1,t2 ,t

create table t1 tablespace tbs_arena

as select * from user_objects where 1=0;

create table t2 tablespace tbs_arena

as select * from user_objects where 1=0;

create table t2 tablespace tbs_arena

as select * from user_objects ;

装载数据:

insert into t select * from user_objects;

未批处理:

create or replace procedure row_at_a_time as

begin

for x in (select * from t) loop

insert into t1 values x;

end loop;

end;

/

批处理:

create or replace procedure nrow_at_a_time(limit_n in number) as type array_table_type is table of t%rowtype;

data_array array_table_type;

cursor c is select * from t;

begin

open c;

loop

fetch c bulk collect

into data_array limit limit_n;

forall i in 1 .. data_array.count

insert into t2 values data_array (i);

exit when c%notfound;

oracle复习大纲(1)

chapter 7 1.Oracle数据库物理存储结构的组成及各个部分的功能、性质。 数据文件:用于存储数据库中的所有数据 控制文件:用于记录和描述数据库的物理存储结构信息 重做日志文件:用于记录外部程序(用户)对数据库的改变操作 归档文件:用于保存已经写满的重做日志文件 初始化参数文件:用于设置数据库启动时的参数初始化值 跟踪文件:用于记录用户进程、数据库后台进程等的运行情况 口令文件:用于保存具有SYSDBA,SYSOPER权限的用户名和SYS用户口令; 警告文件:用于记录数据库的重要活动以及发生的错误; 备份文件:用于存放数据库备份所产生的文件。 2.数据文件管理: (1)数据文件与表空间的关系 从物理角度看,数据库由数据文件构成,数据存储在数据文件中;从逻辑角度看,数据库是由表空间构成的,数据存储在表空间中。一个表空间包含多个数据文件,但一个数据文件只能属于一个表空间。 在oracle数据库中,数据文件是依附于表空间而存在。一个表空间可以包含多个数据文件,但一个数据文件只能从属于一个表空间。在逻辑上,数据库对象都存放在表空间中,实质上是存放在表空间所对应的数据文件中。 (2)数据文件的添加、数据文件大小的修改autoextend on 、resize(操作)、数据文件的移植 添加: 向表空间添加一个大小为xMB的数据文件: alter tablespace 表空间名add datafile ‘路径\*.dbf’ size xMB; 向表空间添加一个自动增长的数据文件: alter tablespace 表空间名add datafile ‘路径\*.dbf’ size xMB autoextend on next 1M maxsize 50MB; 向临时表空间添加一个大小为xMB的数据文件: alter tablespace 表空间名 add tempfile‘路径\*.dbf’ size xMB; 修改: ①修改大小 修改数据文件大小为yMB: Alter database datafile ‘路径\*.dbf’ resize yMB; 修改文件的自动增长方式: Alter database datafile ‘路径\*.dbf’ autoextend on next 1M maxsize unlimited;

ORACLE优化总结和注意事项

ORACLE优化总结和注意事项 本文档中对优化方法进行详述,并对在优化过程中发现的一些问题进行总结。列出ORACLE的一些注意事项 注意事项: 1.安装的过程中,请务必进行正确安装。 2.当安装过程中出现错误的时候,最好清除原有遗留信息,进行重装,否则在数据库运行 的过程中可能会出现各种诡异的问题。 3.当数据库安装的过程中如果有警告信息,请记录下来,存档,方便排查数据库问题 4.安装的过程中请选择OLTP的数据模板Transaction Processing 5.安装过程中文件的创建

Controlfile、Datafiles、Redo Log Groups如果条件允许,最好分别放于不同的磁盘上。其中Controlfile和Redo Log Groups要尽量保证放在不同的磁盘上 6.其中Redo Log Groups重做日志组最好建5组以上,每个文件大小在1G以上,最大不超 过3G,避免出现进行check_point的时候造成buffer wait 导致数据库宕机 7.检查/etc/hosts文件 配置最后一行信息,将当前的主机名和ip配对起来,避免应用服务连接数据库导致的性能损耗 8.安装完成后,请启动数据库确保数据库基本安装成功 步骤: sqlplus /nolog connect /as sysdba startup//启动数据库实例 exit//退出sqlplus lsnrctl start//启动监听

emctl start dbconsole 上述步骤如果执行完,没有报错,则说明数据库基本安装正确,并可正常运行。如果执行上述操作的时候出现了问题,则说明数据库安装的过程中出现了某些问题,即使数据库实例当前可以启动连接,但是在以后稳定服务的过程中也是有可能会出现一些数据库问题的。 配置OCI连接 因为当前应用服务采用OCI连接的方式,因此在运行应用服务之前要配置OCI的连接条件 1、需求软件: 如果应用服务是跟ORACLE数据库安装在一台机器上,则不需要额外软件,直接进入第2步即可 如果应用服务是跟ORACLE数据库分开部署,则需要在部署应用服务的机器上安装一个客户端(精简客户端即可大小几M)需要从官方网站下载三个文件instantclient-basic-linux-x86-64-10.2.0.3-20070103.zip instantclient-sqlplus-linux-x86-64-10.2.0.3-20070103.zip instantclient-jdbc-linux-x86-64-10.2.0.3-20070103.zip 解压到同一个目录中,同时在该目录下新建一个文件tnsnames.ora文件,文件中添加以下内容 # Generated by Oracle configuration tools. HMS = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.15.61)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = hms) ) )

Oracle数据库基本知识点

1、数据库基本语句 (1)表结构处理 创建一个表:cteate table 表名(列1 类型,列2 类型); 修改表的名字 alter table 旧表名 rename to 新表名 查看表结构 desc 表名(cmd) 添加一个字段 alter table 表名 add(列类型); 修改字段类型 alter table 表名 modify(列类型); 删除一个字段 alter table 表名 drop column列名; 删除表 drop table 表名 修改列名 alter table 表名 rename column 旧列名 to 新列名; (2)表数据处理 增加数据:insert into 表名 values(所有列的值); insert into 表名(列)values(对应的值); 更新语句:update 表 set 列=新的值,…[where 条件] 删除数据:delete from 表名 where 条件 删除所有数据,不会影响表结构,不会记录日志, 数据不能恢复--》删除很快: truncate table 表名 删除所有数据,包括表结构一并删除: drop table 表名 去除重复的显示:select distinct 列 from 表名 日期类型:to_date(字符串1,字符串2)字符串1是日期的字 符串,字符串2是格式 to_date('1990-1-1','yyyy-mm-dd')-->返回日期的 类型是1990-1-1 (3)查询语句 1)内连接 select a.*,b.* from a inner join b on a.id=b.parent_id

ORACLE笔记

1.Oracle 工具:sqlplus Sqlplus / as sysdba Shutdown immediate(关闭数据库) Startup(启动数据库) 注意:数据库开启才可以进行操作 Select username,account_status from dba_users;(查询数据库中所有的用户名称与用户状态) Alter user scott identified by tiger account unlock;(scott用户解锁) Sqlplus scott/tiger(使用SCOTT 密码为tiger登陆ORACLE数据库) Connect scott/tiger (在SQL>中直接使用SCOTT用户连接数据库) Show all;(看所有变量) Set sqlprompt “_user>”(设置sqlplus环境下面的提示符用自身用户显示) 注意:如要变量下次重启生效必须把变量写入 /u01/app/oracle/product/10.2.0/db_1/sqlplus/admin/glogin.sql中 Host(回到系统) Help index(查看所有命令) Help+命令(类似于LINUX中的MAN,查看命令的格式与用法) Disconnect(关闭SQLPLUS工具但是不离开数据库) Describe emp(查看EMP表) Define(定义变量,常用与写脚本用) 如:DEFINE _EDITOR =”vi” (CHAR) (定义VI编辑器用于保存最后一条执行的SQL语句) Save /u01/app/oracle/aa.sql (保存SQL语句) Get /u01/app/oracle/aa.sql (调用保存的SQL语句) 2.select(select 查询语句是ORACLE中最常用的语句) DML语句包括(insert 写入,update改变,delect删除,merge两张表同步) 注意:merge常用在ETL(数据仓库)底下 DDL数据定义语句包括(create创建对象,alter修改,drop删除对象,rename改名,truncate 删除整个表) TCL事务处理语句(commit提交立刻生效,rollback回滚,savepoint保存点,savepoint(保存点) DCL权限语句(grant赋予权限,revoke(收回权限) ORACLE的表称之为堆表(keep table) SELECT (1) writing basic SQL select statemanes 1. selecting all columns SCOTT>select * from dept; SCOTT>select dname,deptno,loc from dept; Basic SELECT Statement SELECT *|{[DISTINCT] column|expression [alias],...} FROM table;

Oracle复习

一.创建用户 在YGGL数据库中创建一个用户MANAGER,授予DBA角色和SYSDBA系统权限,它可以替代system系统用户。 CONNECT SYSTEM/123456 AS SYSDAB CREATE USER MANAGER PROFILE "DEFAULT" IDENTIFIED BY manager DEFAULT TABLESPACE "USERS" TEMPORARY TABLESPACE "TEMP" ACCOUNT UNLOCK; GRANT SYSDBA TO "MANAGER"; GRANT "COUNTNECT" TO "MANAGER"; GRANT "DBA" TO "MANAGER"; ALTER user MANGER GRANT CONNECT THROUGH SYSTEM; 二:创建角色 在YGGL数据库中创建一个角色ADMIN,授予DBA角色和SYSDBA系统权限。CREATE ROLE ADMIN IDENTIFILED BY "manager"; GRANT SYSDAB TO ADMIN ; GRANT SYSOPER TO ADMIN; GRANT "CONNECT" TO ADMIN; GRANT "DBA" TO "ADMIN"; 一.创建概要文件 在YGGL数据库中创建概要文件YGGL_PROFILE并分配给用户MANAGER。CREATE PROFILE "XSCJ _PROFILE"LIMIT COMPOSITE_LIMIT DEFAULT FAILED_LOGIN_ATTEMPTS 3 PASSWORD_LOCK_TIME 20 PASSWORD_GRACE_TIME 60 PASSWORD_LIFE_TIME 30 PASSWORD_REUSE_MAX UNLIMITED PASSWORD_REUSE_TIME 120 PASSWORD_VERIFY_FUNCTION DEFAULT (1)使用命令方式分别向YGGL数据库个表中插入一行记录 INSERT INTO ZPEMPLOYEES V ALUES('011112','罗林 ',TO_DATE('26-06-1973','DD-MM-YYYY'),1,'解放路100 ',210002,4055663,5); INSERT INTO ZPDEPARTMENTS V ALUES('6','人力资源',NULL); INSERT INTO ZPSALARY V ALUES ('011112',1200.09,50) (2)修改表salry的记录值 UPDATE ZPSALARY SET InCome=2890 WHERE EmployeeID='011112'; (3)删除Salary中的一行记录 DELETE FROM ZPSALARY WHERE EmployeeID='01112'; 3.索引和完整性 (1).对YGGL数据库中的Employees表的DepartmentID列建立索引 CREATE INDEX PK_XS_BAK ON ZPEMPLOYEES(DepartmentID) TABLESPACE USERS PCTFREE 48 INITRANS 10 MAXTRANS 100 STORAGE (INITIAL 64K NEXT 64K MINEXTENTS 5 MAXEXTENTS 20

ORACLE 性能优化

ORACLE 数据库性能优化 参考书目: 《ORACLE 9i Database Performance Tuning Guide and Reference》《ORACLE 9i Database Reference》 《ORACLE 9i SQL Reference》 《ORACLE 9i Database Administrator’s Guide》

一、数据库实例创建过程参数确定 在创建数据库实例过程中,需要确定以下几个参数: 1. 数据块大小(DB_BLOCK_SIZE) 该参数指明了ORACLE所处理的数据存贮于数据文档以及SGA内存中的数据块大小。 该参数的可选择的范围为:4k,8k,16k,32k,64k。对于OLTP系统而言,取值可以为4K或8K,对于DSS系统而言,则可以取较大的数据,如32K或64K 建议统一取8K(即8192) 说明 DB_BLOCK_SIZE的大小将影响创建表时的EXTENT的大小。例如指定db_block_size=16K,某表空间的EXTENT MANAGEMENT 为local autoallocate,则其系统将extent的大小最小指定为1M.所以将可能导致空间的浪费。 2. 字符集(Character set) 该参数确定数据库以何种字符集来存贮CHAR以及V ARCHAR、V ARCHAR2等字符类型的值。对于ORACLE数据字典中的字符(如表及字段的COMMENT 内容)具有同样的作用。因此需要考虑如字符集的使用。对于国际项目,因为数据库中的comment内容(包括表及字符、存贮过程中的中文字符等内容)可能性需要以中文存贮,而用户业务数据使用的字符可能性是使用本地的语言,基于此,该参数需要选择支持UNICODE的字符编码的字符集。目前ORACLE9i支持以下二种UNICODE字符集: ?UTF8 ?AL32UTF8 建议统一取AL32UTF8

学习oracle数据库的总结(图文整理)

1、在开发环境中连接到数据库,进行基本的select查询操作; 2、熟悉plsql的使用; 3、熟悉sqlplus相关命令(登录、查询、导入导出等) 登录sqlplus: 第一:使用dos窗口登录sqlplus Sqlplus 用户名/密码@数据库实例名 Sqlplus system/密码@数据库实例名as sysdba 第二:使用oracle自带的一个sqlplus登录,提供界面,显得更简单一些。 显示当前用户名:show user; 创建一个用户:create user 用户名identified by 密码; 给用户赋予登录的权限:grant connect to 用户名;(此时才可以使用这个用户来登录这个数据库。)给其赋予dba的权限。 修改用户的密码:alter user 用户名identified by 新密码; 查询: Select * from t_user; Select id from t_user; Select name from t_user; Select birthday from t_user; Select id,name from t_user; 导入导出: 导出表: (注意,导出表的exp命令不是在sqlplus下使用的,是在dos窗口下使用的命令。) exp userid=test/sa@test tables=(qx) file=d:\e1223.dmp exp userid=test/sa@test tables=(t_user,qx) file=f:\test.dmp 导出方案: Exp userid=test/sa@test owner=test file=f:\test2.dmp 导出数据库: Exp userid=test/sa@test full=y inctype=complete file=f:\all.dmp 导入表: 下面以一个例子来说明: 看下面的图,我的用户名test,密码sa,数据库实例名test,所有的表都在这里 现在我执行导出表JD的操作:exp userid=test/sa@test tables=(jd) file=f:\jd.dmp 在我的f盘下就出现了这么一个.dmp文件

OracleSQL性能优化方法

OracleSQL性能优化方法 Oracle性能优化方法(SQL篇) (1) 1综述 (2) 2表分区的应用 (2) 3访咨询Table的方式 (3) 4共享SQL语句 (3) 5选择最有效率的表名顺序 (5) 6WHERE子句中的连接顺序. (6) 7SELECT子句中幸免使用’*’ (6) 8减少访咨询数据库的次数 (6) 9使用DECODE函数来减少处理时刻 (7) 10整合简单,无关联的数据库访咨询 (8) 11删除重复记录 (8) 12用TRUNCATE替代DELETE (9) 13尽量多使用COMMIT (9) 14运算记录条数 (9) 15用Where子句替换HA VING子句 (9) 16减少对表的查询 (10) 17通过内部函数提高SQL效率 (11) 18使用表的不名(Alias) (12) 19用EXISTS替代IN (12) 20用NOT EXISTS替代NOT IN (13) 21识不低效执行的SQL语句 (13) 22使用TKPROF 工具来查询SQL性能状态 (14) 23用EXPLAIN PLAN 分析SQL语句 (14) 24实时批量的处理 (16)

1综述 ORACLE数据库的性能调整是个重要,却又有难度的话题,如何有效地进行调整,需要通过反反复复的过程。在数据库建立时,就能依照顾用的需要合理设计分配表空间以及储备参数、内存使用初始化参数,对以后的数据库性能有专门大的益处,建立好后,又需要在应用中不断进行应用程序的优化和调整,这需要在大量的实践工作中不断地积存体会,从而更好地进行数据库的调优。 数据库性能调优的方法 ●调整内存 ●调整I/O ●调整资源的争用咨询题 ●调整操作系统参数 ●调整数据库的设计 ●调整应用程序 本文针对应用程序的调整,来讲明对数据库性能如何进行优化。 2表分区的应用 关于海量数据的表,能够考虑建立分区以提高操作效率。建立分区一样以关键字为分区的标志,也能够以其他字段作为分区的标志,但效率不如关键字高。建立分区的语句在建表时能够进行讲明: create table TABLENAME() partition by range (PutOutNo) (partition PART1 values lessthan (200312319999) partition PART2 values lessthan (200412319999) 。。。。。。 如此,在进行大部分数据查询,数据更新和数据插入时,Oracle自动判定操作应该在哪个分区进行,幸免了整表操作,提高了执行的效率

oracle学习心得体会

oracle学习心得 一、sqlserver的理解 sqlserver服务器就像一栋大楼,大楼里的机房就像服务器的数据库,机房里的电脑如同数据库里的表 1、登录用户可以登录服务器——可以进大楼 2、登录用户成为数据库用户才能进指定的数据库——进入大楼的人给了某个机房的钥匙 才能进入机房 3、登录用户有权限使用表——进入机房的人有电脑的密码才能使用电脑 二、oracle的理解 oracle服务器(全局数据库)就像一个商场,商场的每一家公司是表空间,公司的业务是表 1、数据库由多个表空间组成——商场里有多家公司组成 2、表空间由段组成——公司要有自己的经营业务,可以只有一个业务,就是一个表空 间中只有一个段,可以有多个业务,就是一个表空间有多个段 3、段由区组成——单个业务的细分类别。例如有家公司经营三个业务,卖书,卖家电,

卖衣服,则每个业务就是一个段。而每个业务又有细分,比如卖书的话要进行分类了。计算机区,人文区,小说区等,每一区都要放上书架存放书籍,则书架就是oracle块,存放数据的 三、数据库,表空间,用户(指定默认表空间),表统统由管理员管理 四、在oem中管理数据库的步骤 1、创建 1)存储——表空间——创建表空间(tomspace)(类似于在sql中创建数据库, 通常可以省略,使用默认表空间为users,,临时表空间为temp) 2)首先展开安全性——创建新用户(tom,指定表空间)(类似于在sql中指定 数据库用户) 3)创建表——指定方案(用户)和表空间(列名不要带<>) 4)设置约束 5)输入信息:方案——用户名——表——右击——查看/编辑目录… 2、修改 1)方案——用户名——表 2)修改表结构,添加约束

ORACLE性能优化31条

1.ORACLE的优化器共有3种 A、RULE (基于规则) b、COST (基于成本) c、CHOOSE (选择性) 设置缺省的优化器,可以通过对init.ora文件中OPTIMIZER_MODE参数的各种声明,如RULE,COST,CHOOSE,ALL_ROWS,FIRST_ROWS 。你当然也在SQL句级或是会话(session)级对其进行覆盖。 为了使用基于成本的优化器(CBO,Cost-Based Optimizer) ,你必须经常运行analyze 命令,以增加数据库中的对象统计信息(object statistics)的准确性。 如果数据库的优化器模式设置为选择性(CHOOSE),那么实际的优化器模式将和是否运行过analyze 命令有关。如果table已经被analyze过,优化器模式将自动成为CBO ,反之,数据库将采用RULE 形式的优化器。 在缺省情况下,ORACLE采用CHOOSE优化器,为了避免那些不必要的全表扫描(full table scan) ,你必须尽量避免使用CHOOSE优化器,而直接采用基于规则或者基于成本的优化器。 2.访问Table的方式 ORACLE 采用两种访问表中记录的方式: A、全表扫描 全表扫描就是顺序地访问表中每条记录。ORACLE采用一次读入多个数据块(database block)的方式优化全表扫描。 B、通过ROWID访问表 你可以采用基于ROWID的访问方式情况,提高访问表的效率,ROWID包含了表中记录的物理位置信息。ORACLE采用索引(INDEX)实现了数据和存放数据的物理位置(ROWID)之间的联系。通常索引提供了快速访问ROWID的方法,因此那些基于索引列的查询就可以得到性能上的提高。 3.共享SQL语句 为了不重复解析相同的SQL语句,在第一次解析之后,ORACLE将SQL语句存放在内存中。这块位于系统全局区域SGA(system global area)的共享池(shared buffer pool)中的内存可以被所有的数据库用户共享。因此,当你执行一个SQL语句(有时被称为一个游标)时,如果它和之前的执行过的语句完全相同,ORACLE就能很快获得已经被解析的语句以及最好的执行路径。ORACLE的这个功能大大地提高了SQL 的执行性能并节省了内存的使用。 可惜的是ORACLE只对简单的表提供高速缓冲(cache buffering),这个功能并不适用于多表连接查询。 数据库管理员必须在init.ora中为这个区域设置合适的参数,当这个内存区域越大,就可以保留更多的语句,当然被共享的可能性也就越大了。 当你向ORACLE提交一个SQL语句,ORACLE会首先在这块内存中查找相同的语句。这里需要注明的是,ORACLE对两者采取的是一种严格匹配,要达成共享,SQL语句必须完全相同(包括空格,换行等)。 数据库管理员必须在init.ora中为这个区域设置合适的参数,当这个内存区域越大,就可以保留更多的语句,当然被共享的可能性也就越大了。 共享的语句必须满足三个条件: A、字符级的比较:当前被执行的语句和共享池中的语句必须完全相同。 B、两个语句所指的对象必须完全相同: C、两个SQL语句中必须使用相同的名字的绑定变量(bind variables)。 4.选择最有效率的表名顺序(只在基于规则的优化器中有效) ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,因此FROM子句中写在最后的表(基础表driving table)将被最先处理。在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表。当ORACLE处理多个表时,会运用排序及合并的方式连接它们。首先,扫描第一个表(FROM子句中最后的那个表)并对记录进行派序,然后扫描第二个表(FROM子句中最后第二个表),最后将所有从第二个表中检索出的记录与第一个表中合适记录进行合并。 如果有3个以上的表连接查询,那就需要选择交叉表(intersection table)作为基础表,交叉表是指

Oracle数据库期末复习知识点整理

基础知识 表3.2 Oracle数据类型

表3.3 XSB的表结构

操作表 创建表 CREATE TABLE [schema.] table_name ( column_namedatatype [DEFAULT expression] [column_constraint][,…n] [,…n] ) [PCTFREE integer] [PCTUSED integer] [INITRANS integer] [MAXTRANS integer] [TABLESPACE tablespace_name] [STORGE storage_clause] [CLUSTER cluster_name(cluster_column,…n)] [ENABLE | DISABLE ] [AS subquery] 【例】使用CRETE TABLE命令为XSCJ数据库建立表XSB,表结构参照表3.3。 打开SQL*Plus工具,以system方案连接数据库,输入以下语句: CREATE TABLE XSB ( XH char(6) NOT NULL PRIMARY KEY, XM char(8) NOT NULL, XB char(2) DEFAULT '1' NOT NULL, CSSJ date NOT NULL, ZY char(12) NULL, ZXF number(2) NULL, BZ varchar2(200) NULL ); 修改表 ALTER TABLE [schema.] table_name [ ADD(column_namedatatype [DEFAULT expression][column_constraint],…n) ] /*增加新列*/ [ MODIFY([ datatype ] [ DEFAULT expression ] [column_constraint],…n) ] /*修改已有列的属性*/ [ STORAGE storage_clause ] *修改存储特征*/ [ DROP drop_clause ] /*删除列或约束条件*/ 【例】使用ALTER TABLE语句修改XSCJ数据库中的表。

Oracle性能优化

ORACLE的优化器共有3种 A、RULE (基于规则) b、COST (基于成本) c、CHOOSE (选择性) 设置缺省的优化器,可以通过对init.ora文件中OPTIMIZER_MODE参数的各种声明,如RULE,COST,CHOOSE,ALL_ROWS,FIRST_ROWS 。你当然也在SQL句级或是会话(session)级对其进行覆盖。 为了使用基于成本的优化器(CBO, Cost-Based Optimizer) ,你必须经常运行analyze 命令,以增加数据库中的对象统计信息(object statistics)的准确性。 如果数据库的优化器模式设置为选择性(CHOOSE),那么实际的优化器模式将和是否运行过analyze命令有关。如果table已经被analyze过,优化器模式将自动成为CBO ,反之,数据库将采用RULE形式的优化器。 在缺省情况下,ORACLE采用CHOOSE优化器,为了避免那些不必要的全表扫描(full table scan) ,你必须尽量避免使用CHOOSE优化器,而直接采用基于规则或者基于成本的优化器。 2.访问Table的方式 ORACLE 采用两种访问表中记录的方式: A、全表扫描 全表扫描就是顺序地访问表中每条记录。ORACLE采用一次读入多个数据块(database block)的方式优化全表扫描。 B、通过ROWID访问表 你可以采用基于ROWID的访问方式情况,提高访问表的效率, ROWID 包含了表中记录的物理位置信息。ORACLE采用索引(INDEX)实现了数据和存放数据的物理位置(ROWID)之间的联系。通常索引提供了快速访问ROWID的方法,因此那些基于索引列的查询就可以得到性能上的提高。 3.共享SQL语句 为了不重复解析相同的SQL语句,在第一次解析之后,ORACLE将SQL语句存放在存中。这块位于系统全局区域SGA(system global area)的共享池(shared buffer pool)中的存可以被所有的数据库用户共享。因此,当你执行一个SQL语句(有时被称为一个游标)时,如果它和之前的执行过的语句完全相同, ORACLE就能很快获得已经被解析的语句以及最好的执行路径。ORACLE的这个功能大提高了SQL的执行性能并节省了存的使用。 可惜的是ORACLE只对简单的表提供高速缓冲(cache buffering),这个功能并不适用于多表连接查询。

Oracle SQL性能优化方法研究

Oracle SQL性能优化方法探讨 Oracle性能优化方法(SQL篇) (1) 1综述 (2) 2表分区的应用 (2) 3访问Table的方式 (3) 4共享SQL语句 (3) 5选择最有效率的表名顺序 (5) 6WHERE子句中的连接顺序. (6) 7SELECT子句中幸免使用’*’ (6) 8减少访问数据库的次数 (6) 9使用DECODE函数来减少处理时刻 (7) 10整合简单,无关联的数据库访问 (8) 11删除重复记录 (8) 12用TRUNCATE替代DELETE (9) 13尽量多使用COMMIT (9) 14计算记录条数 (9) 15用Where子句替换HAVING子句 (9) 16减少对表的查询 (10) 17通过内部函数提高SQL效率 (11)

18使用表的不名(Alias) (12) 19用EXISTS替代IN (12) 20用NOT EXISTS替代NOT IN (13) 21识不低效执行的SQL语句 (13) 22使用TKPROF 工具来查询SQL性能状态 (14) 23用EXPLAIN PLAN 分析SQL语句 (14) 24实时批量的处理 (16)

1综述 ORACLE数据库的性能调整是个重要,却又有难度的话题,如何有效地进行调整,需要通过反反复复的过程。在数据库建立时,就能依照顾用的需要合理设计分配表空间以及存储参数、内存使用初始化参数,对以后的数据库性能有专门大的益处,建立好后,又需要在应用中不断进行应用程序的优化和调整,这需要在大量的实践工作中不断地积存经验,从而更好地进行数据库的调优。 数据库性能调优的方法 ●调整内存 ●调整I/O ●调整资源的争用问题 ●调整操作系统参数 ●调整数据库的设计 ●调整应用程序 本文针对应用程序的调整,来讲明对数据库性能如何进行优化。 2表分区的应用 关于海量数据的表,能够考虑建立分区以提高操作效率。建

Oracle性能优化

y物理模型CheckList (Oracle,性能) 1. 系统级优化 数据库参数配置 合理分配SGA及其内部参数(经验值如下): SGA=phy*(60%-80%) Share pool=SAG*45% DB Cache=SGA*45% Log Buffer: 1~3M 注:Oracle9i在Windows下有bug,是由Windows下的SGA最大 值有2G的限制造成的 注意调整process和open cursor参数,这两个参数直接影响 数据库的session量 分离表和索引:将表和索引建立在不同的表空间,决不要将 不属于Oracle内部系统的对象存放到SYSTEM表空间。同 时,确保数据表空间和索引表空间置于不同的硬盘,减少I/O 竞争; 如果是企业版数据库,大表可以考虑采取分区存储措施,提 高系统的性能; 优化Export和Import工作:使用较大的BUFFER(比如10MB , 10,240,000)可以提高EXPORT和IMPORT的速度 定期分析查询计划,提高数据库的性能;

2. 索引相关 要对经常查询的字段建立索引,但是由于索引管理的开销, 在增删改操作频繁的情况下避免建立不必要的索引; 对于只读或者接近只读的场合,如数据仓库,对于势值比较 小的列可以考虑使用bitmap索引; 如果索引是建立在多个列上, 只有在它的第一个列(leading column)被where子句引用时,优化器才会选择使用该索引. 3. SQL相关 Oracle的From子句表的顺序:记录越多的表放在越前面 (左); Oracle的where子句表达式的顺序:过滤掉最大数目记录的条 件放到where子句的末尾; Select子句中避免使用‘*’,增加了查询表的列的开销; 在执行结果等效的情况下,使用Truncate代替Delete; 为了在查询过程中要尽量使用索引,对于like语句避免使用 右匹配或者中间匹配的模糊查询; 将过滤条件尽可能放到Where子句中,而不是放到Having子 句中; 在SQL语句中,要减少对表的查询,特别是在含有子查询的 SQL子句中; 使用表的别名可以减少解析的时间并避免引起歧义; 使用exists替代in; 用NOT EXISTS替代NOT IN; 通常情况下,采用表连接的方式比exists更有效率; 当提交一个包含一对多表信息(比如部门表和雇员表)的查询

关于数据库知识点的再学习和整理

个人声明:本文档所有代码并没有经过上机验证,仅供参考,另外,因为只是自己总结的关于最基本的知识点,所以难免遗漏,所以请参阅相关材料观看,最后,版权所有,翻版没事!哈哈~~~~ 1,关系模型的数据结构非常简单,它只含有单一的数据结构——关系,在用户看来就是一张二维表,关系数据库就是用二维表表示关系以及他们之间的联系。 2.关于数据库的操作主要就是增删改查,其中尤其以查最重要,下面正对这几种数据库操作做一些sql语句方面的简单整理,以用来加强印象: 由于今天使用了mysql数据库,所以呢,先将一些使用的必须基本命令总结一些: 首先是安装了mysql数据库之后,进入dos命令提示窗口, 接下来我们要进入我们的数据库,那么要先进入mysql的bin路径下, 然后输入mysql -u root -p,然后会提示输入密码,然后进入, 进入后的命令提示符是mysql> 在mysql新建表之间和使用oracle 10g还是不一样的,先新建数据库, Create database 数据库名字; 增 A.首先是新建表:create table table_name( [列级完整性约束条件] [,[列级完整性约束条件]] ...... [,<表级完整性约束条件>]); E.g creatable table students( id int(4) primary key, Name char(20) not null, Foreign key id references teachers(no)); B.接着是添加信息:insert into [[,]...] values(常量[,常量]...); E.g insert into students values(1,'tom'); 注意,如果不列出来表格的属性的话,就说明添加一条完整的信息。 如果列出来表格的属性的话,那么没有列出来的就做,空值处理。 C.添加约束条件(注意,下面的语法只在oracle 10g中验证过,仅供参考)。 关于创建表格约束的时候是使用add constraint还是modify语法,我进行了可行性的测试,现在结果如下: 《》关于创建外键,两种语法都可以,语法如下 1,alter table 表格名add constraint 外键名foreign key(列名)references 被参照的表名(列名); 2,alter table 表格名modify foreign key(列名)references 被参照的表名(列名); 注意:alter table 表格名modify 列名foreign key references 被参照的表名(列名);是不可以的。 《》关于创建主键,两种方法都可以,语法如下 1,alter table 表格名add constraint 外键名primary key(列名) enable; 2,alter table 表格名modify 列名primary key;

oracle数据库学习笔记心得

select* |字段表名 from 表名 where 布尔表达式【条件】 externalcandidate 职员相关信息 contractrecruiter 猎头公司 查看表里所有字段 describe[描述] contractrecruiter select cname,nperecentagecharge from contractrecruiter 不显示原来名字,显示现在名字【用AS】 select cname as "Recruiter Name",nperecentagecharge as "Hire Fees" from contractrecruiter 不显示原来名字,显示现在名字【可不用AS】 select cname "Recruiter Name",nperecentagecharge "Hire Fees" from contractrecruiter 【双引号是否写】 双引号是为了区分大小写 职位表 position select *from position 缺额运算:[想减] select VDESCRIPTION , nbudgetedstrength, NBUDGETEDSTRENGTH -NCURRENTSTRENGTH , NYEAR from position

select VDESCRIPTION "Potion", nbudgetedstrength "Budgeted Strength" , NBUDGETEDSTRENGTH -NCURRENTSTRENGTH "Vacancies", NYEAR "Year" from position 显示非重复运行 查询来源地的人数 describe externalcandidate 查看职员城市名字 select ccity from externalcandidate 查看职员城市名字【名字不重复,插入一个关键字:distinct】select distinct ccity,cstate from externalcandidate 运算符: 两列 select vfirstname,vlastname from externalcandidate 字段拼接 select vfirstname||vlastname from externalcandidate select vfirstname||' '||vlastname from externalcandidate 学校 describe college 查看所有学校 select *from college 查看只是加利福尼亚的学校 select * from college where cstate='California' 一个条件 select vfirstname,vlastname,dbirthdate,ntestscore from externalcandidate where dbirthdate>='01-1月-70'

Oracle_RAC知识汇总

一、Oracle RAC原理 ORACLE RAC原理在一个应用环境当中,所有的服务器使用和管理同一个数据库,目的是为了分散每一台服务器的工作量,硬件上至少需要两台以上的服务器,而且还需要一个共享存储设备。同时还需要两类软件,一个是集群软件,另外一个就是Oracle数据库中的RAC组件。同时所有服务器上的OS都应该是同一类OS,根据负载均衡的配置策略,当一个客户端发送请求到某一台服务的listener后,这台服务器根据我们的负载均衡策略,会把请求发送给本机的RAC组件处理也可能会发送给另外一台服务器的RAC组件处理,处理完请求后,RAC会通过集群软件来访问我们的共享存储设备。 逻辑结构上看,每一个参加集群的节点有一个独立的instance,这些instance访问同一个数据库。节点之间通过集群软件的通讯层(communication layer)来进行通讯。同时为了减少IO的消耗,存在了一个全局缓存服务,因此每一个数据库的instance,都保留了一份相同的数据库cache。 二、RAC中的特点是: 每一个节点的instance都有自己的SGA 每一个节点的instance都有自己的background process 每一个节点的instance都有自己的redo logs 每一个节点的instance都有自己的undo表空间 所有节点都共享一份datafiles和controlfiles Oracle还提出了一个缓存融合的技术(Cache fusion) 目的有两个 1.保证缓存的一致性 2.减少共享磁盘IO的消耗 因此在RAC环境中多个节点保留了同一份的DB CACHE 缓存融合(Cache fusion)工作原理: -**************************************** 1.其中一个节点会从共享数据库中读取一个block到db cache中 2.这个节点会在所有的节点进行交叉db block copy 3.当任何一个节点缓存被修改的时候,就会在节点之间进行缓存修改 4.为了达到存储的一致最终修改的结果也会写到磁盘上 三、ClusterWare组件 ******************* 有四种Service Crsd - 集群资源服务 Cssd - 集群同步服务 Evmd - 事件管理服务 oprocd - 节点检测监控 有三类Resource VIP - 虚拟IP地址(Virtual IP) OCR - Oracle Cluster Registry(集群注册文件),记录每个节点的相关信息

相关主题
文本预览
相关文档 最新文档