• 1. Oracle数据库—开发与管理
  • 2. 简介本课件由网新(天津)软件有限公司(以下简称:网新天津)编制,仅供网新仿真实训的学员学习使用; 网新天津享有本课件中的文字叙述、文档格式、插图、照片等所有信息资料的版权,受知识产权法及版权法等法律、法规的保护。任何个人或组织未经网新集团的书面授权许可,均不得以任何形式使用本课件的任何内容,否则将视为不法侵害,网新天津保留追究侵权人相关法律责任的权利 版权声明
  • 3. Oracle数据库概述 安装和配置 数据库操作客端 创建表空间和用户 表的管理 数据库表的设计 SQL语句增、删、改、查 条件查询 聚合函数 Group by和Order by 连接查询目录-1
  • 4. 高级查询 常用其他函数 索引 视图 PL/SQL简介 存储过程与函数 游标、程序包和触发器 数据库的导入和导出 Oracle的卸载和重装 数据库性能优化目录-2
  • 5. 1.0 Oracle概述甲骨文公司出品,以高级结构化查询语言(SQL)为基础的大型关系型数据库,是当今数据库市场公认的老大。来源易观国际2007
  • 6. 1.1 Oracle数据库特点支持跨平台操作:Linux 、Windows和Unix等各平台。 支持大数据库、多用户的高性能的事务处理。 系统维护具有高的性能。 具有可移植性、可兼容性和可连接性等。
  • 7. 1.2 Oracle数据库的发展1979年:Oracle2,第一个使用SQL的商业关系数据库。 1983年:面向多操作平台的Oracle单一代码库。 1984年:Oracle4,引入读一致模型,开发了可移植工具集。 1986年:Oracle5,第一个具有分布式处理能力的DBMS。 1988年:Oracle6,Oracle Financials/Oracle CASE 1993年:Oracle7。 1997年:Oracle8,具有对象相关以及大型数据库的特性。 1998年:Oracle支持Linux。 1999年:Oracle8i,数据库主要用Java编写。 2001年:Oracle9i数据库服务器。 2003年:Oracle10g数据库服务器和应用服务器 2007年:Oracle11g数据库服务器和应用服务器
  • 8. 1.3 Oracle10g的版本企业版(Oracle Database 10g Enterprise Edition) 具有高效、可扩展性和可靠性,适用于大业务量的在线事务处理(OLTP)、决策支持和内容管理。 标准版(Oracle Database 10g Standard Edition) 拥有Oracle数据库的所有基本功能,成本最低。 个人版(Oracle Database 10g Personal Edition) 适用于个人使用的数据库产品,并与全部Oracle数据库兼容。 Lite版 用来建立、配置并管理远程数据库应用软件。
  • 9. 2.0 Oracle 10g 安装和配置从Oracle官网下载安装包到本地某目录,解压缩后如下图所示:点击setup启动安装程序。
  • 10. 2.1 Oracle 10g 安装1进入选择安装方法页面,这里按照默认的基本安装即可,在此可以设置数据库口令。全局数据库名即数据库名或叫服务名; 数据库口令:为sys(超级管理员)和system的密码 安装目录会默认选择空间最大的磁盘
  • 11. 2.2 Oracle 10g 安装2单击下一步按钮后,进入先决条件检查页面。检查机器软件环境和硬件环境,如果无问题则点击“下一步”
  • 12. 2.3 Oracle 10g 安装3单击下一步按钮后,进入安装概要页面。
  • 13. 2.4 Oracle 10g 安装4单击安装按钮后,进入安装页面。安装数据库程序,大约需要3-5分钟,不同机器配置所需时间不同
  • 14. 2.5 Oracle 10g 安装5创建数据库实例等操作进度显示。创建数据库文件,大约需要5-10分钟,不同机器配置所需时间不同
  • 15. 2.6 Oracle 10g 安装6数据库创建完成后,数据库创建信息的显示。可以点“口令管理”修改默认用户的密码,不修改则还是前面安装第1不中输入的密码
  • 16. 2.7 Oracle 10g 安装7点击确认按钮后,进入配置和启动数据库组件页面。配置默认访问连接和数据库服务,如果正常则继续
  • 17. 2.8 Oracle 10g 安装完成点击下一步按钮后,进入安装结束页面。
  • 18. 2.9 确认安装完成查看Oracle服务是否正常启动,进入“控制面板” -> 打开“服务”列表OracleOraDb10g_home1TNSListener : 是数据库服务的监听服务,必须启动 OracleServiceMYDB: 是数据库服务,必须启动 OracleDBConsolemydb: 是web管理控制台服务,如果需要以web方式登录则需启动 OracleOraDb10g_home1TNSListener 和OracleServiceMYDB服务启动不成功,则需重装数据库或重建数据库(参考21.0章节)
  • 19. 2.10 监听配置和连接配置1. 只有配置好了监听配置才能启动本地数据库服务端口,默认安装后的监听服务为OracleOraDb10g_home1TNSListener ,监听端口为15212. 只有配置好了连接配置才能通过连接配置访问本地或网络上其他数据库,默认安装后的连接配置名为数据库服务名,如“orcl”注 首次安装数据库后,默认的连接配置和监听配置都已配好,并启动了,可以直接访问本机数据库了
  • 20. 2.11 配置管理界面点“开始”菜单  “程序”  Oracle - OraDb10g_home1  配置和移植工具  Net Manager , 可对监听配置和连接配置进行管理1.服务命名:即为连接配置 2.监听程序:即为监听配置
  • 21. 3.0 数据库操作客端SQL* Plus 客户端 Enterprise Manager Plsql管理工具Oracle安装好了,对外提供的是数据库服务,如何管理数据库?---访问客户端
  • 22. 3.1 SQL*plus 主机字符串就是数据库连接配置串,默认为数据库服务名
  • 23. 3.2 查询当前用户拥有的表 如:查询当前用户的所用的表
  • 24. 3.3 Enterprise Manager通过URL以web方式进入Oracle数据库管理平台,登录页面
  • 25. 3.4 通过web管理Oracle登录成功后Oracle数据库管理平台展示内容页面。注:通过管理台,可通过图形化的界面操作数据库
  • 26. 3.5 PL/SQL Developer工具PL/SQL Developer是Oracle的开发工具客户端 安装好 “pls-setup_ttdown.exe”,打开PL/SQLUsername: 用户名 Password:密码 Database:是连接配置名(默认是数据库服务名) Connect as:Normal选标准
  • 27. 3.6PL/SQL Developer管理Oracle
  • 28. 4.0 创建表空间和用户 用SQL*PlUS 以system用户连接数据库,创建表空间 删除表空间 注:表空间是数据管理的基本方法,所有用户的对象要存放在表空间中,建用户前需要先建表空间
  • 29. 4.1 创建用户使用create user语句创建用户:给用户赋予一定的角色【权限】:删除用户:
  • 30. 4.2 用PL/SQL Devoloper创建用户1PL/SQL Developer不提供创建表空间,但可以创建管理用户和权限,非常方便
  • 31. 4.3 用PL/SQL Devoloper创建用户2PL/SQL Developer不提供创建表空间,但可以通过界面创建管理用户和权限,非常方便默认表空间请选择专为此用户建立的表空间,临时表空间请选择系统默认TEMP,选择”Apply”确认创建
  • 32. 4.4 用PL/SQL Developer分配用户权限Connect是连接数据库的角色,dab是管理员的角色,一般开发和学习给这两个角色就足够了用户创建成功后,点标签”Role privileges”,给用户分配角色
  • 33. 5.0 表的管理可以通过PL/SQL工具创建表,也可以通过SQL语句创建表, 换新创建的用户登录PL/SQL工具,创建属于新用户的表表:数据仅能以一种格式存储在关系数据库中,这种格式就称为“表”,表的正式名称实际上是“关系”。表是“行”的集合,每行均由“值”的集合组成。直观的表示形式如下图:列行
  • 34. 5.1 数据类型1数值类型NUMBER,是以十进制格式进行存储的,它便于存储,但是在计算上,系统会自动的将它转换成为二进制进行运算的。它的定义方式是NUMBER(P,S),P是精度,最大38位,S是刻度范围,可在-84...127间取值。定长字符类型CHAR,描述定长的字符串,如果实际值不够定义的长度,系统将以空格填充。它的声明方式如下CHAR(L),L为字符串长度,缺省为1,作为变量最大32767个字符,作为数据存储最大为2000。
  • 35. 5.2 数据类型2变长字符类型VARCHAR2(VARCHAR),描述变长字符串。它的声明方式如下VARCHAR2(L),L为字符串长度,没有缺省值,作为变量最大32767个字节,作为数据存储中最大为4000,超过此长度请用CLOB,最大为4G字节日期类型DATE 有效日期范围从公元前4712年1月1日到公元后4712年12月31日,格式是,如果数据插入,则需要转换,如:to_date('2011-4-20','YYYY-MM-DD')二进制大对象BLOB 一个二进制大型对象,最大4G字节,常用来存储文件或图片等数据
  • 36. 5.3 SQL语句创建表创建表的完整语法很长也很复杂,下面只是讲述创建表时的最常用语法:Create TABLE [schema.]( [default][] [, [default][]] [,…] );●schema:这是表所属的用户名或模式名 ● table_name :表名 ● column_name :列名 ● data type :列的数据类型 ●default:列的默认值 ● constraint :定义于列上的约束
  • 37. 5.4 创建表示例Create table tbl_test( id number(10,0) not null, name varchar2(20), sex char(1), createdate date, constraint PK_TBL_TEST primary key (ID) );建表语句示例:Primary key(主键):表的主键是用做表中行的唯一标识的一列(或列的组合)
  • 38. 6.0 数据库表的设计---1NF数据库表设计需要遵循三范式:第一范式:是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。如 果出现重复的属性,就可能需要定义一个新的实体,新的实体由重复的属性构成,新实体与原实体之间为一对多关系。
  • 39. 6.1 数据库表的设计---2NF数据库表设计需要遵循三范式:第二范式:第二范式是在第一范式的基础上建立起来的,即满足第二范式必须先满足第一范式。第二范式要求数据库表 中的每个实例或行必须可以被惟一地区分。为实现区分通常需要为表加上一个列,以存储各个实例的惟一标识(主键)。
  • 40. 6.2数据库表的设计---3NF数据库表设计需要遵循三范式:第三范式:满足第三范式必须先满足第二范式。简而言之,第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。
  • 41. 6.3设计定单管理系统
  • 42. 6.4 表的约束在Oracle系统中,可以使用声明完整性约束和参照完整性约束来确保数据的正确。约束是通过使用CREATE TABLE或ALTER TABLE语句生成的。ORACLE支持五种类型的完整性约束 NOT NULL (非空)--防止NULL值进入指定的列,在单列基础上定义,默认情况下,ORACLE允许在任何列中有NULL值. CHECK (检查)--检查在约束中指定的条件是否得到了满足. UNIQUE (唯一)--保证在指定的列中没有重复值.在该表中每一个值或者每一组值都将是唯一的. PRIMARY KEY (主键)--用来唯一的标识出表的每一行,并且防止出现NULL值,一个表只能有一个主键约束. FOREIGN KEY (外部键)--通过使用公共列在表之间建立一种父子(parent-child)关系,在表上定义的外部键可以指向主键或者其他表的唯一键.
  • 43. 6.5 序列在Oracle系统中,序列是数据库对象,利用它可生成唯一的整数。CREATE SEQUENCE [user.]sequence_name [increment by n] [start with n] [maxvalue n | nomaxvalue] [minvalue n | nominvalue];如:
  • 44. 7.0 SQL语句增、删、改、查增加数据 insert into (insert into tbl_user values(1,’zh’,’1’)) 删除数据 delete (delete from tbl_user where id=1) 修改数据 update (update tbl_user set sex=‘1’where id=1) 查询数据 select (select * from tbl_user)SQL语言是一种标准化的结构化查询语言(structured query language)SQL 、SQL*Plus、 PL/SQL之间的关系如何?
  • 45. 7.1 insert(增加)INSERT语法 INSERT INTO <表名> [ ( <列名>,… ) ] VALUES ( <值> [ , <值>…]) 举例 INSERT INTO account VALUES(‘10001’,’招商银行’,‘10000’) 或 INSERT INTO account(no,name,total) VALUES(‘10001’,’招商银行’,‘10000’)
  • 46. 7.2 delete(删除)DELETE语法 DELETE FROM <表名> [ [ AS ] <假名> ] [ WHERE <条件> ] 举例 DELETE FROM account WHERE no=‘10001’
  • 47. 7.3 update(修改)UPDATE语法 UPDATE <表名> [ [ AS ] <假名>] SET <列名> = <值> [ ,<列名>=<值>…] [ WHERE <条件> ] 举例 UPDATE account SET total=total+5000 WHERE no=‘10001’
  • 48. 7.4 select(查询)SELECT 语法 SELECT [ ALL | DISTINCT ] < 字段列表 > FROM < 表 > [ WHERE < 条件 > ] [ GROUP BY < 分类字段列表 >… ] [ HAVING < 过滤条件 > ] [ ORDER BY < 排序项 > [ ASC | DESC ] ] 举例 SELECT no,name,total FROM account WHERE no=‘10001’
  • 49. 8.0 条件查询SQL查询中的条件比较丰富: SELECT * FROM tbl_user WHERE < 条件 > =, !=, <, <=, >, >= and orBetween value2 and value3 is null, is not null, EXISTS Like in ‘_’ 代表一个字符 ‘%’代表多个字符如: reginol_code in(1,2,3)
  • 50. 9.0 聚合函数count max min sum计算条数 求最大值 求最小值 求和例: select count(*) from tbl_business select max(business_amt) from tbl_business select min(business_amt) from tbl_business select sum(business_amt) from tbl_business
  • 51. 10.0 Group by和Order byselect user_id, count(*) from tbl_business group by user_idgroup by 一般与聚合函数搭配使用,select 关键字后面只能跟分组的字段(group by后面的)或聚合函数的结果
  • 52. 10.1 分组再查询select user_id, count(*) as cou from tbl_business group by user_id having count(*)>=2 group by分组后,还可以跟查询的条件,此时是在分组的结果中筛选
  • 53. 10.2 排序order byselect user_id, count(*) as cou from tbl_business group by user_id order by cou descorder by按条件排序, desc是降序 , asc 是升序,默认是asc
  • 54. 11.0 连接查询 内连接查询 等值连接 不等连接 自然连接 外连接查询 左(右)外连接 完整外部连接 交叉连接 不带WHERE 子句,返回两表迪卡尔积
  • 55. 11.1 等值连接和自然连接等值连接(查询列显示所有项) select * from tbl_user a inner join tbl_regional b on a.regional_id=b.id自然连接(查询列只显示不重复项)select a.id,a.code_name,a.user_name,a.sex,a.age, b.regional_name from tbl_user a inner join tbl_regional b on a.regional_id=b.id或:select a.id, a.user_name, b.regional_name from tbl_user a , tbl_regional b where a.regional_id=b.id此方法相对用的更多
  • 56. 11.2 外连接查询左(右)外连接 : 当需要查询的数据以左(右)表为主,右(左)表信息只是补充时使用: select * from tbl_user a left join tbl_regional b on a.regional_id=b.id完整外部连接: 查询的是左表和右表的所有行select a.id,a.code_name,a.user_name,a.sex,a.age, b.regional_name from tbl_user a full outer join tbl_regional b on a.regional_id=b.idselect * from tbl_user a , tbl_regional b where a.regional_id=b.id(+)Oracle特有 效率高:
  • 57. 12.0 高级查询 多表联合查询 嵌套查询 select * from tbl_business union select * from tbl_business2select * from tbl_business where business_amt< (select business_amt from tbl_business2 where business_date=to_date('2011-4-20','YYYY-MM-DD') and business_id=3)
  • 58. 12.1 分页查询 分页查询 select * from ( select my_table.*, rownum my_rownum from ( select id,user_name, sex from tbl_user order by user ) my_table where rownum < 11 ) where my_rownum >= 1
  • 59. 13.0 常用其他函数(1)CHR:给出整数,返回对应的字符; 如: chr(54740) CONCAT:连接两个字符串;如: concat(010-,88888888)||转23 INSTR(C1,C2,I,J) 在一个字符串中搜索指定的字符,返回发现指定的字符的位置; C1 被搜索的字符串 C2 希望搜索的字符串 I 搜索的开始位置,默认为1 J 出现的位置,默认为1 select instr(code_name,'c') as aaa from tbl_user
  • 60. 13.1 常用其他函数(2)LENGTH :返回字符串的长度; 如: LENGTH(NAME) LOWER (UPPER ):返回字符串,并将所有的字符小(大)写 LTRIM和RTRIM:删除左边和右边出现的字符串 select ltrim(rtrim(code_name,' '),' ') as aaa from tbl_user SUBSTR(string,start,count):取子字符串,从start开始,取count个 REPLACE(string,s1,s2): string 希望被替换的字符或变量  s1 被替换的字符串 s2 要替换的字符串
  • 61. 13.2 常用其他函数(3)ABS :返回指定值的绝对值 SYSDATE:得到系统的当前日期 LAST_DAY:返回日期的最后一天 当前系统时间:to_char(sysdate,‘yyyy.mm.dd’) 月末最后一天:to_char(last_day(sysdate),'yyyy.mm.dd') TO_CHAR(date,format):将日期转化为字符串格式 select ltrim(rtrim(code_name,' '),' ') as aaa from tbl_user TO_DATE(string,format):将字符串转化为ORACLE中的一个日期
  • 62. 14.0 索引-提高查询效率数据库的索引类似于图书的目录。在数据库中索引页允许数据库程序迅速地找到表中的数据,而不必扫描整个数据库。索引特点: 与表关联的可选结构 加快 SQL 语句的执行、减少磁盘 I/O 在逻辑上和物理上独立于表中的数据 Oracle 自动维护索引
  • 63. 14.1 索引分类 唯一索引(unique) 不允许列内有重复的值 非唯一索引(normal) 允许列内有重复的值(默认) 位图索引(bitmap) 和上两类索引的实现逻辑不同
  • 64. 14.2 创建索引例:create index i_tbl_finduser on TBL_USER (code_name asc, user_name desc);语法: CREATE [UNIQUE] [CLUSTER] INDEX <索引名> ON <表名>(<列名>[<次序>]…)注:包含ASC或DESC是表明索引是按升序(ASC)还是降序(DESC)创建,如果不指定,则SQL默认采用ASC。
  • 65. 14.3 各类索引的应用场合当查询条件多用大于小于等比较运算符时适合建立唯一或非唯一索引 当你的列中有很多重复的数据时适合建立位图索引 当查询时多用and 或or等逻辑运算符时适合建立位图索引注:并不是所有创建索引都会提高性能,创建索引对数据的插入、更新和删除的性能有较大影响,需要做一个平衡的考虑
  • 66. 15.0 视图SQL支持两种类型的表:真实表,一般也称为基本表或表;导出表(视图) 视图是用一个查询块的查询结果来定义的。语法如下: CREATE VIEW <视图名> [(<视图列的列表>)] AS <子查询> 例: CREATE VIEW TOWNS AS SELECT DISTINCT TOWN FROM PLAYERS; 查询视图: SELECT * FROM TOWNS; 删除视图: DROP VIEW
  • 67. 15.1 视图示例创建视图:查看视图:查询视图:
  • 68. 15.2 视图的优点视图的优点: 提供了另外一种级别的表安全性 隐藏数据的复杂性 简化用户的 SQL 命令 将应用程序与基表定义的修改隔离开来 从另一个角度提供数据
  • 69. 16.0 PL/SQL简介基本SQL语句很常用,相对于SQL而言Oracle公司在SQL基础上引入一种过程化编程语言---PL/SQL(Producedural Language/SQL),PL/SQL构建于SQL自上,可以用来编写SQL语句的程序.PL/SQL也是一种程序语言,使用PL/SQL可以编写具有很多高级功能的程序: (1). 能够使一组SQL语句的功能更具模块化程序特点; (2). 采用了过程性语言控制程序的结构; (3). 可以对程序中的错误进行自动处理,使程序能够在遇到错误的时候不会被中断; (4). 具有较好的可移植性,可以移植到另一个Oracle数据库中。 (5). 集成在数据库中,调用更快. (6). 减少了网络的交互,有助于提高程序性能.
  • 70. 16.1 PL/SQL基本结构PL/SQL块组成:声明、执行体开始、异常处理、执行体结束:DECLARE—可选部分:变量、常量、游标、用户定义异常的声明 …… BEGIN—必要部分:SQL语句和PL/SQL语句构成的执行程序 …… EXCEPTION—可选部分:程序出现异常时,捕捉异常并处理异常 …… END;—必须部分
  • 71. 16.2 PL/SQL示例PL/SQL程序都是以块(block)为基本单位
  • 72. 16.3 PL/SQL程序流程结构a. loop … end loop; b. while condition loop … end loop; c. for variable in low_bound . . upper_bound loop … end loop;循环结构:顺序结构:PL/SQL程序段中有三种程序结构:if condition then statement1 else statement2 end if ;条件结构:goto
  • 73. 16.4 PL/SQL示例case的第1种用法: case col when 'a' then 1 when 'b' then 2 else 0 endcase的第2种用法: case when score <60 then 'd' when score >=60 and score <70 then 'c' when score >=70 and score <80 then 'b' else 'a' end 例:select (case when DUMMY='X' then 0 else 1 end) as flag from dual; 
  • 74. 17.0 存储过程与函数PL/SQL中的过程和函数是为了执行一定的任务而组合在一起的语句。 过程和函数由SQL语句组成,如INSERT和SELECT语句,但也包含过程语句,如IF-THEN-ELSE。 过程无返回值,函数有返回值。 不同的数据库厂商有不同的标准。如:Oracle使用PL/SQL语言,Sybase和Microsoft SQL服务器使用Transact-SQL语言…
  • 75. 17.1 存储过程Create or replace procedure procname(参数列表) as PL/SQL语句块Create or replace procedure test_procedure as V_f11 number :=1; /*声明变量并赋初值*/ V_f12 number :=2; V_f21 varchar2(20) :=’first’; V_f22 varchar2(20) :=’second’; Begin Insert into t1 values (V_f11, V_f21); Insert into t1 values (V_f12, V_f22); End test_procedure; /*test_procedure可以省略*/创建存储过程:调用过程: exec test_procedure
  • 76. 17.2 函数create or replace function funcname(参数列表) return 返回值 as PL/SQL语句块Create or replace function test_func(v1 in varchar2,v2 in varchar2) return varchar2 as V_f1 varchar2(20):=‘addn’; /*声明变量并赋初值*/ Begin return v1||v2||V_f1; End test_func; /*test_func可以省略*/创建函数:调用: select test_func('aa','qing') from tbl_user
  • 77. 18.0 游标、程序包和触发器用游标来指代一个DML SQL操作返回的结果集。即当一个对数据库的查询操作返回一组结果集时,用游标来标注这组结果集,以后通过对游标的操作来获取结果集中的数据信息。触发器是一种特殊的存储过程,其调用者比较特殊,是当发生特定的事件才被调用,主要用于多表之间的消息通知。程序包是模块化的数据类型,游标,子程序,变量等数据对象的集合;★关于这块知识点的更多内容可以学习扩展教学资料。
  • 78. 18.1 游标的使用即当一个对数据库的查询操作返回一组结果集时,用游标来标注这组结果集,以后通过对游标的操作来获取结果集中的数据信息。使用游标的三步:打开游标、使用fetch语句将游标里的数据取出、关闭游标。cursor cursor_name is SQL语句;
  • 79. 18.2 触发器触发器是一种特殊的存储过程,其调用者比较特殊,是当发生特定的事件才被调用,主要用于多表之间的消息通知。● 是 PL/SQL 块或存储过程 ● 是在对关联表执行 DML 操作时触发的 ● 是隐式执行的 ● 还可能具有声明部分和异常处理部分
  • 80. 18.3 触发器的类型应用程序触发器 在应用程序内发生特定 DML 事件时,将隐式触发它 数据库触发器 在表、视图或数据库上发生特定 DML 事件时,将隐式触发它 在表和视图上定义 在数据库或方案上,它也可以充当系统触发器
  • 81. 18.4 触发器示例在表 tbl_business上创建一个触发器,当插入一条金额比较特殊的记录,查看结果。insert into tbl_business values(to_date('2011-4-21','YYYY-MM-DD'),1, -12.00,1,to_date('115313','hhmiss'),'美的电饭锅','','','','')
  • 82. 19.0 Oracle数据的导入和导出 数据库导出: 导出某个实例(用户所属权限下的全部数据、包括表,过程,函数,包,视图,触发器等) 数据库表导出: 导出一个或一组指定用户所属的表结构和数据 数据库导入:导入某个实例(用户所属权限下的全部数据、包括表,过程,函数,包,视图,触发器等) 数据库表导入: 导入一个或一组指定用户所属的表结构和数据可使用 命令行exp、imp 或 Pl/Sql Developer 导出、导入
  • 83. 19.1 Oracle数据的导出 数据库导出: 数据库表导出: exp usertest/usertest@mydb file=d:\daochu.dmpexp system/manager@TEST file=d:\daochu.dmp owner=(system,sys)exp usertest/usertest@mydb file=d:\daochu_tbl.dmp tables=(tbl_user)exp usertest/usertest@mydb file=d:\daochu_tbl_1.dmp tables=(tbl_user) query=\"where user_name like '周%'\"
  • 84. 19.2 Oracle数据的导入 数据库导入: 数据库表导入: imp usertest/usertest file=d:\daochu.dmp log=daochu.log full=y ignore=yimp usertest/usertest file=d:\daochu.dmp log=daochu.log fromuser=usertest TABLES=(tbl_user)数据库导入之前,请确定现数据库中存在和原数据库相同的表空间,否则数据导入可能报警告
  • 85. 20.0 Oracle的卸载和重装卸载重装Oracle数据库是一件比较麻烦的事1、删除数据库通过Oracle的DCA工具删除数据库
  • 86. 20.1 删除(或创建)数据库
  • 87. 20.2 完全卸载Oracle2. 执行卸载3. 删除注册表中带 “oracle”的信息按快捷建 F3,查找下一个,直到删除所有的包含“oracle”的信息
  • 88. 20.3 完全卸载Oracle4. 删除Oracle安装目录6. 重新安装Oracle5. 确认Oracle服务,已全部删除如果没删除,可以在命令行中键入: sc delete "服务名"
  • 89. 21.0 Oracle数据库性能优化数据库性能的优化数据库设计是应用程序设计的基础,其性能直接影响应用程序的性能。应用程序的优化应用程序的优化通常可分为两个方面:源代码和SQL语句。
  • 90. 21.1 数据库性能优化规范化(三范式)有可能导致查询速度慢的缺点(连接多),考虑到性能,在设计表时应同时考虑对某些表进行反规范化。分割表 : 水平分割:按行把表分成多个表 垂直分割:对于一个列很多的表,将主键和其他列分成另一个表2. 保留冗余列 当两个或多个表在查询中经常需要连接时,可以在其中一个表上 增加若干冗余的列,避免过多连接3. 增加派生列 派生列是由表中的其它多个列计算所得,增加派生列可以减少统计运算
  • 91. 21.2 应用程序的优化主要分为源代码和SQL语句的优化,源代码的优化代价高,着重在SQL的优化对于海量数据,劣质SQL语句和优质SQL语句之间的速度差别可以达到上百倍在这些where子句中,即使某些列存在索引,但是由于编写了劣质的SQL,系统在运行该SQL语句时也不能使用该索引
  • 92. 21.3 应用程序的优化主要分为源代码和SQL语句的优化,源代码的优化代价高,着重在SQL的优化对于海量数据,劣质SQL语句和优质SQL语句之间的速度差别可以达到上百倍在这些where子句中,即使某些列存在索引,但是由于编写了劣质的SQL,系统在运行该SQL语句时也不能使用该索引
  • 93. 21.4 SQL的优化1. IS NULL 与 IS NOT NULL2. 联接列3. 带通配符(%)的like语句不能用null作索引,任何包含null值的列都将不会被包含在索引中不要用: select * from employee where last_name like '%Bush%';可以用: select * from employee where last_name like ‘C%';不要用:select * from employee where first_name||''||last_name ='George Bush';
  • 94. 21.5 SQL的优化4. Order by语句5. NOT6. IN和EXISTS任何在Order by语句的非索引项或者有计算表达式都将降低查询速度。select * from employee where salary<>3000;不要使用select * from employee where not (salary=3000);select * from employee where salary>3000 or salary<3000 ;可以用…where in(select * from ... where ...);不要使用... where exists (select 'X' from ...where a.u_id = b.u_id ...);可以使用
  • 95. 22.0 实用小技巧1. 快速清除表全部记录2. 清除垃圾表3. 查询所有的表名truncate table tablenamepurge recyclebin select table_name from tabs;4. pl/sql工具中需要更改表记录的查询 select * from table_name for update;
  • 96. 本节结束,继续努力!http://www.insigmaedu.com