摘要: 数据库规划原则l 最大可重用化n 数据库重大问题时,通过备份和恢复机制最大程度上恢复数据l 最小磁盘争用n 数据库文件平均分布在不同的磁盘上,避免多用户访问时争用同一磁盘l 各种数据的合理分布n 将数据库中的各种数据按特性(如基表和变化表、大数据和常规数据)存储在不同的文件中。l 数据表规划原则n 数据定义精确化u 满足要求的情况下,选择占用资源最少的数据类型以提高DBMS的I/O性能n 表的抽象化u 通过将具有共性的表合并,将其特性以标识字段表示n 表的范式化u 设计表时,满足1NF(原子性)、2NF(键相关性)、3NF(无函数相关性),保证表的结构无冗余l 数据表I/O优化原则n 变化表和 阅读全文
posted @ 2011-03-31 13:05 liuqun 阅读(400) 评论(0) 推荐(1) 编辑
摘要: 最近花了两三天时间,将oracle的常用操作命令,进行了一下整理,并且将其中的一些常用命令,通过一个完整的项目案例(电子商务网站的数据库设计、java调用、.net(c#)调用)进行贯穿,希望能给大家一些帮助;并且在之后会陆续进行一些其他的整理,刘群写于2011-3-29日中午...... 附件:项目案例(电子商务网站的数据库设计)功能及脚本;java调用代码;.net调用代码; 阅读全文
posted @ 2011-03-29 13:50 liuqun 阅读(274) 评论(0) 推荐(1) 编辑
摘要: 如何干预执行计划 - - 使用hints提示 基于代价的优化器是很聪明的,在绝大多数情况下它会选择正确的优化器,减轻了DBA的负担。但有时它也聪明反被聪明误,选择了很差的执行计划,使某个语句的执行变得奇慢无比。此时就需要DBA进行人为的干预,告诉优化器使用我们指定的存取路径或连接类型生成执行计划,从而使语句高效的运行。例如,如果我们认为对于一个特定的语句,执行全表扫描要比执行索引扫描更有效,则我们就可以指示优化器使用全表扫描。在ORACLE中,是通过为语句添加hints(提示)来实现干预优化器优化的目的。 hints是oracle提供的一种机制,用来告诉优化器按照我们的告诉它的方式生成执行计划 阅读全文
posted @ 2011-04-03 15:28 liuqun 阅读(525) 评论(0) 推荐(1) 编辑
摘要: 对该会话进行跟踪,产生trace文件,然后对该文件用tkprof程序格式化一下使用SQL Trace Alter session set sql_trace=true; //启用跟踪生成的跟踪文件路径:@oracle_home\ diag\rdbms\orcl\orcl\trace(版本:11g)Alter session set sql_trace=false; //禁用跟踪使用sql_trace,常用初始化参数设置Timed_statistics=true;不设置的话,一些重要信息不会被收集到Max_dump_file_size( alter session set Max_dump_fi 阅读全文
posted @ 2011-04-03 15:26 liuqun 阅读(512) 评论(0) 推荐(1) 编辑
摘要: 用索引提高效率索引是表的一个概念部分,用来提高检索数据的效率. 实际上,ORACLE使用了一个复杂的自平衡B-tree结构. 通常,通过索引查询数据比全表扫描要快. 当ORACLE找出执行查询和Update语句的最佳路径时, ORACLE优化器将使用索引. 同样在联结多个表时使用索引也可以提高效率. 另一个使用索引的好处是,它提供了主键(primary key)的唯一性验证.除了那些LONG或LONG RAW数据类型, 你可以索引几乎所有的列. 通常, 在大型表中使用索引特别有效. 当然,你也会发现, 在扫描小表时,使用索引同样能提高效率.虽然使用索引能得到查询效率的提高,但是我们也必须注意到 阅读全文
posted @ 2011-04-03 13:59 liuqun 阅读(760) 评论(0) 推荐(0) 编辑
摘要: 什么是优化 优化是选择最有效的执行计划来执行SQL语句的过程,这是在处理任何数据的语句(SELECT,INSERT,UPDATE或DELETE)中的一个重要步骤。对Oracle来说,执行这样的语句有许多不同的方法,譬如说,将随着以什么顺序访问哪些表或索引的不同而不同。所使用的执行计划可以决定语句能执行得有多快。Oracle中称之为优化器(Optimizer)的组件用来选择这种它认为最有效的执行计划。什么是执行计划在运行一条DML语句时,oracle可能需要执行多个步骤。例如,从数据库物理文件中获取数据行,或将数据整理为提交语句的用户所需的形式。Oracle运行一条语句的所有步骤被告称为语句的执 阅读全文
posted @ 2011-04-03 10:28 liuqun 阅读(668) 评论(0) 推荐(0) 编辑
摘要: 访问Table的方式ORACLE 采用三种访问表中记录的方式: 全表扫描、通过ROWID访问表、索引扫描全表扫描(full table scan)全表扫描就是顺序地访问表中每条记录. ORACLE采用一次读入多个数据块(database block)的方式优化全表扫描.通过ROWID访问表(table access by ROWID)行的ROWID指出了该行所在的数据文件、数据块以及行在该块中的位置,所以通过ROWID来存取数据(表中记录的物理位置信息)可以快速定位到目标数据上,是Oracle存取单行数据的最快方法。 为了通过ROWID存取表,Oracle 首先要获取被选择行的ROWID,或者 阅读全文
posted @ 2011-03-31 13:07 liuqun 阅读(612) 评论(0) 推荐(0) 编辑
摘要: 优化器RBO/CBOOracle的优化器有两种优化方式,即基于规则的优化方式(Rule-Based Optimization,简称为RBO)和基于代价的优化方式(Cost-Based Optimization,简称为CBO),在Oracle8及以后的版本,Oracle强列推荐用CBO的方式。RBO方式:优化器在分析SQL语句时,所遵循的是Oracle内部预定的一些规则。比如我们常见的,当一个where子句中的一列有索引时去走索引。 CBO方式:它是看语句的代价(Cost),这里的代价主要指Cpu和内存。优化器在判断是否用这种方式时,主要参照的是表及索引的统计信息。统计信息给出表的大小、有少行、 阅读全文
posted @ 2011-03-31 13:06 liuqun 阅读(495) 评论(0) 推荐(0) 编辑
摘要: 代码下载: java调用代码;.net调用代码; 阅读全文
posted @ 2011-03-31 12:40 liuqun 阅读(162) 评论(0) 推荐(0) 编辑
摘要: 数据库的启动、关闭数据库的启动:安装启动、非安装启动、共享启动、独占启动、约束启动、强制启动--不登陆的方式进入Sqlplus /nolog安装启动:Startup {pfile=<filepath/init-file>} mount说明:该方式启动数据库的的用途一般为:为数据文件更名;增加、删除或改名事物日志文件;使事物日志归档模式选项有效或失效;进行完整数据库的恢复操作非安装启动startup {pfile=<filepath/init-file>} nomount说明:创建一新的数据库共享启动:允许多个例程并行使用该数据库,即将数据库装入多个现场。startup 阅读全文
posted @ 2011-03-31 12:34 liuqun 阅读(760) 评论(0) 推荐(2) 编辑
摘要: 数据导入/导出模式:整个数据库、表空间、用户、表导入:imp数据库:imp 数据库登陆名/登陆密码 file=item_back.dmp ignore=y full=y表空间:imp 数据库登陆名/登陆密码 file=item_back.dmp tablespaces=(users)用户:imp 数据库登陆名/登陆密码 file=item_back.dmp fromuser=scott touser=martin tables=(emp,dept) 表:imp 数据库登陆名/登陆密码 file=item_back.dmp tables=(emp, dept)导出:exp数据库:exp 数据库登 阅读全文
posted @ 2011-03-29 14:16 liuqun 阅读(522) 评论(0) 推荐(0) 编辑
摘要: 触发器CREATE [OR REPLACE] TRIGGER trigger_name AFTER | BEFORE | INSTEAD OF[INSERT] [[OR] UPDATE [OF column_list]] [[OR] DELETE]ON table_or_view_name [REFERENCING {OLD [AS] old / NEW [AS] new}][FOR EACH ROW][WHEN (condition)]pl/sql_block; 启用和禁用触发器ALTER TRIGGER 触发器名 DISABLE/ENABLE;删除触发器DROP TRIGGER 触发器名; 阅读全文
posted @ 2011-03-29 14:15 liuqun 阅读(394) 评论(0) 推荐(0) 编辑
摘要: 程序包:程序包规范、主体两部分组成程序包规范CREATE [OR REPLACE] PACKAGE package_name IS|AS[Public item declarations][Subprogram specification]END [package_name];程序包主体CREATE [OR REPLACE] PACKAGE BODY package_name IS|AS[Private item declarations][Subprogram bodies][BEGINInitialization]END [package_name];例1:--用户注册(用户名不能重复)、 阅读全文
posted @ 2011-03-29 14:14 liuqun 阅读(199) 评论(0) 推荐(0) 编辑
摘要: 函数:CREATE [OR REPLACE] FUNCTION <function name> [(param1,param2)]RETURN <datatype> IS|AS [local declarations]BEGIN Executable Statements; RETURN result;EXCEPTION Exception handlers;END;函数的调用1、作为pl/sql的一部分begin 变量 := 函数名(参数列表)End;2、 作为sql语句的一部分Select 函数名(参数列表) from dual;例:根据订单编号 返回 订单总金额( 阅读全文
posted @ 2011-03-29 14:07 liuqun 阅读(217) 评论(0) 推荐(1) 编辑
摘要: 过程 CREATE [OR REPLACE] PROCEDURE <procedure name> [(<parameter list>)]IS|AS <local variable declaration>BEGIN <executable statements>[EXCEPTION <exception handlers>]END;调用过程1、Execute 过程名(参数列表);2、begin 过程名(参数列表);End;例1:用户注册(用户名不能重复)Create or replace procedure proc_UserAd 阅读全文
posted @ 2011-03-29 14:05 liuqun 阅读(129) 评论(0) 推荐(0) 编辑
摘要: 隐式游标自动声明、打开和关闭,其名为SQL隐式游标的属性有:%FOUND:SQL 语句影响了一行或多行时为 TRUE%NOTFOUND:SQL 语句没有影响任何行时为TRUE%ROWCOUNT:SQL 语句影响的行数%ISOPEN:游标是否打开,始终为FALSE显示游标CURSOR <cursor_name> IS SELECT statement FOR UPDATE;使用步骤:1、声明游标2、打开游标3、提取数据4、关闭游标循环游标 FOR <record_index> IN <cursor_name>LOOP <executable statem 阅读全文
posted @ 2011-03-29 14:01 liuqun 阅读(194) 评论(0) 推荐(0) 编辑
摘要: PL/SQL 分为三个部分,声明部分、可执行部分和异常处理部分[DECLARE declarations]BEGIN executable statements[EXCEPTION handlers]END;变量和常量定义:identifier [CONSTANT] datatype [NOT NULL] [:= | DEFAULT expr];赋值:使用赋值语句 :=使用 SELECT INTO 语句输出信息:set serveroutput on;如:查询商品编号为1101的商品名称Declare V_id number(4); V_name varchar2(50);Begin V_id 阅读全文
posted @ 2011-03-29 13:59 liuqun 阅读(205) 评论(0) 推荐(0) 编辑
摘要: 同义词是现有对象的一个别名CREATE SYNONYM 别名 FOR SCOTT.emp; 公共同义词:CREATE PUBLIC SYNONYM emp_syn FOR SCOTT.emp; 视图:CREATE [OR REPLACE] [FORCE] VIEW view_name [(alias[, alias]...)] AS select_statement [WITH CHECK OPTION] [WITH READ ONLY];如:商品类别/商品信息建立视图create view view_productAsSelect p_id,p_name,p_price,p_userpric 阅读全文
posted @ 2011-03-29 13:58 liuqun 阅读(379) 评论(0) 推荐(0) 编辑
摘要: 表分区:范围分区、散列分区、列表分区、复合分区范围分区:PARTITION BY RANGE (column_name)( PARTITION part1 VALUE LESS THAN(range1), PARTITION part2 VALUE LESS THAN(range2), ... [PARTITION partN VALUE LESS THAN(MAXVALUE)]);查询分区的数据:Select * from 表 partition(表分区名)例1:--创建商品表(商品编号、类别编号、名称、销售价、会员价、库存数量)create table product(p_id numbe 阅读全文
posted @ 2011-03-29 13:56 liuqun 阅读(264) 评论(0) 推荐(0) 编辑
摘要: 基本操作:DDL、DML、TCL、DCL等数据定义语言(DDL):create、alter、drop、truncate常用数据类型:char,varchar2,number,date,raw,lob,rowid,rownumROWID:是表中行的存储地址,该地址可以唯一地标识数据库中的一行,可以使用 ROWID 伪列快速地定位表中的一行说明:可以解决表中重复行的问题,可能得到重复行的存储地址,进行删除重复的记录ROWNUM:是查询返回的结果集中行的序号,可以使用它来限制查询返回的行数创建表结构:create如:--创建商品类别表(类别编号、类别名称)create table typeTab(c 阅读全文
posted @ 2011-03-29 13:55 liuqun 阅读(586) 评论(0) 推荐(0) 编辑
摘要: 创建用户:CREATE USER 用户名 IDENTIFIED BY 密码 [DEFAULT TABLESPACE USERS] [TEMPORARY TABLESPACE TEMP];如:create user user_eb identified by user_eb default tablespace ts_eb ;创建角色:Create role role_name identified {by password};授权:Grant 权限 to 角色/用户;说明:oracle中默认三种角色:connect、resource、dbaConnect: 登录和执行基本函数的能力权限:建立会 阅读全文
posted @ 2011-03-29 13:53 liuqun 阅读(201) 评论(0) 推荐(0) 编辑