oracle数据库题库

2024-08-02

oracle数据库题库(通用11篇)

篇1:oracle数据库题库

1.以下命令哪个是 SQL*PLUS 命令?

A.UPDATE

B.EDIT

C.SELECT

D.ALTER TABLE

2.用SQLPLUS的_____命令可以查看表的结构信息,包括列的名称和数据类型

A DESCRIPTION

B DESC

C SHOW TABLE

D SHOW USER

3. Oracle的前端工具是 :

A SQL*PLUS

B C++

C PL/SQL

D JAVA

4. 在SQLPLUS中,如何运行SQL脚本程序

A /

B @脚本

C EXE 脚本

D 不能在SQLPLUS中直接运行脚本

5. 用命令将SQLPLUS缓冲区中的内容保存到文件中,使用下列哪种方法

A 将缓冲区的内容Ctrl+C,然后再Ctrl+V到文件中即可

B 使用SAVE命令参数是文件路径

C WRITE 方式,参数是文件路径

D Oracle会自动保存

6. 用来设置一行能够显示的字符长度的命令是

A SET LINESIZE

B SET LINE

C SET LINEBUFFER

D SET SIZELINE

7. 以下哪个命令用来设置查询显示结果的列宽

A SET COLUMN SIZE

B COLUMN 列 FORMAT 长度

C COLUMN 列 长度

D 长度 OF COLUMN

8. 如何判断数据库的时区?

解答:SELECT DBTIMEZONE FROM DUAL;

22. 解释GLOBAL_NAMES设为TRUE的用途

解答:GLOBAL_NAMES指明联接数据库的方式。如果这个参数设置为TRUE,在建立数据库链接时就必须用相同的名字连结远程数据库

9. 如何加密PL/SQL程序?

解答:WRAP

10. 解释FUNCTION,PROCEDURE和PACKAGE区别

解答:function 和procedure是PL/SQL代码的集合,通常为了完成一个任务。procedure 不需要返回任何值而function将返回一个值在另一方面,Package是为了完成一个商业功能的一组function和proceudre的集合

11. 解释TABLE Function的用途

解答:TABLE Function是通过PL/SQL逻辑返回一组纪录,用于普通的表/视图。他们也用于pipeline和ETL过程。

12. 举出3种可以收集three advisory statistics

解答:Buffer Cache Advice, Segment Level Statistics, Timed Statistics

13. Audit trace 存放在哪个oracle目录结构中?

解答:unix $ORACLE_HOME/rdbms/audit Windows the event viewer

14. 解释materialized views的作用

解答:Materialized views 用于减少那些汇总,集合和分组的信息的集合数量。它们通常适合于数据仓库和DSS系统。

15. 当用户进程出错,哪个后台进程负责清理它

解答: PMON

16. 哪个后台进程刷新materialized views?

解答:The Job Queue Processes.

17. 如何判断哪个session正在连结以及它们等待的资源?

解答:V$SESSION / V$SESSION_WAIT

18. 描述什么是 redo logs

解答:Redo Logs 是用于存放数据库数据改动状况的物理和逻辑结构。可以用来修复数据库.

19. 如何进行强制LOG SWITCH?

解答:ALTER SYSTEM SWITCH LOGFILE;

20. 举出两个判断DDL改动的方法?

解答:你可以使用 Logminer 或 Streams

篇2:oracle数据库题库

我在考场上写的n=5, i=2; 运行得出结果却为9. 分析了一下得出原因在于: 如果n<5的话,那么它会从其自身起一直到5都会执行j++这条语句, 因为此代码片段中并没有使用 break。

n与i有多种组合值, 如(1,1)、(4,1)和(5,1)等都可以。

3、复习JAVA的 “内部类”章节。

4、复习JAVA的` “反射”章节。

5、温习操作系统 部分的知识。

6、数组问题:

如我声明 int [] a = new int[1] , 那么a[0]的默认值就为0。 我起初理解错误了, 我认为如此声明只是为数组开辟了空间而已, 在其空间上默认值为NULL。

7、关于启动 gc 的方法:

System.gc 和 RunTime()类的 gc() 方法, 但是即使调用了前面的方法也不保证一定会进行回收。

拓展之:

a. GC并不是定期来回收你的垃圾内存,即是根据需要来回收。

b. GC的回收是因为:它认为你的系统已经开始内存紧张(这个就是jvm的神奇)

c. 即使GC开始准备清理你的垃圾内存,但是如果该内存的引用还存在(不等于null), 这个时候GC仍然无能为力!

d、RunTime类的 public static Runtime getRuntime() 返回: 与当前 Java 应用程序相关的 Runtime 对象。

8、int i=10, double e = 10.0; 判断(i==e)、(i==10.0)的真假。

我认为一个是int类型,一个是double类型,它们分属不同的类型, 所以我认为其是错误的, 然而经运行测试发现是正确的。

9、public static void main(String[] args){

StringBuffer str1 = new StringBuffer(“a”);

StringBuffer str2 = new StringBuffer(“b”);

篇3:监控Oracle数据库

关键词:DBA,Oracle,数据库,服务器,进程

1 前言

DBA每天的主要工作是监控Oracle数据库的运行,如何通过命令或shell脚本来完成这些重复的监控工作,减轻DBA的工作呢?文中主要介绍了几个命令以及几个重要的脚本来监控Oracle数据库。

2 命令

以下是DBA如何使用几个命令来监控Oracle数据库的一些实例。

2.1 显示服务器上相关的后台进程

ps-ef|grep"ora_"|grep-v grep

Oracle实例中的后台进程执行用于处理并行用户请求所需的通用功能,它们把为每个用户运行的多个Oracle程序所处理的功能统一起来,从而使性能和可靠性更加优越。根据配置情况,Oracle实例可以包括多个后台进程,其中有些进程是必须存在的。

2.2 显示服务器上的监听情况

$lsnrctl status

监听进程用来监听远程客户端对数据库的连接,并分配相应资源给远程客户端。

2.3 查看Oracle存档目录的文件系统使用情况

$df-k

每个Oracle数据文件所在的卷都应该能够看到,并且要存在30%以上的空闲空间。

2.4 列出alert.log文件中的全部Oracle错误信息

$grep ORA-alert.log

Oracle告警日志文件alert_$ORACLE_SID.log记录所有对数据库系统对象(如表空间、数据文件、日志文件等)的更改操作、重作日志文件切换信息、所有数据库的报错信息。

2.5 CPU使用率检查

sar-u 60 5

在Oracle数据库服务器上,应保证有足够的CPU资源可被数据库使用。通过sar命令的输出结果,可以看到CPU的使用状况:在所有的显示中,应主要注意%wio和%idle,%wio的值过高,表示硬盘存在I/O瓶颈,%idle值高,表示CPU较空闲,如果%idle值高但系统响应慢时,有可能是CPU等待分配内存,此时应加大内存容量。%idle值如果持续低于10,那么系统的CPU处理能力相对较低,表明系统中最需要解决的资源是CPU。

2.6 内存使用率检查

vmstat 60 5

在Oracle数据库服务器上,应保证有足够的内存资源可被数据库使用。Vmstat命令对系统的进程情况、内存使用情况、SWAP和I/O块使用情况、中断以及CPU使用情况进行统计并报告相应的信息。第一个显示内容指出了服务器自上次重启至今的平均使用情况。后面的每一行信息是按延时定期地显示系统的各部分信息。

2.7 I/O等待的检查

top

在Oracle数据库服务器上,应保证有足够的I/O资源可被数据库使用。在TOP命令的显示结果中,CPU states显示用户模式、系统模式、优先级进程(只有优先级为负的列入考虑)和闲置等各种情况所占用CPU时间的百分比。优先级进程所消耗的时间也被列入到用户和系统的时间中,所以总的百分比将大于100%。

3 shell脚本

有时,DBA也编写一些以下重要的脚本,来进行日常的工作。

3.1 检查Oracle实例的可用性

oratab文件中列出了服务器上的所有数据库,代码如下:

3.2 数据状态

检查oratab文件中列出的所有数据库,并且找出该数据库的状态(启动还是关闭),代码如下:

使用以下的命令来确认该脚本是可以执行的:

$chmod 744 ckinstance.ksh

以下是实例可用性的报表:

3.3 检查Oracle监听器的可用性

以下有一个类似的脚本检查Oracle监听器。如果监听器停了,该脚本将会重新启动监听器。代码如下:

3.4 检查Alert日志(ORA-XXXXX)

每个脚本所使用的一些环境变量可以放到一个profile中,代码如下:

3.5 设置全部的环境变量

以下的脚本首先调用oracle.profile来设置全部的环境变量。如果发现任何的Oracle错误,该脚本还会给DBA发送一个警告的email,代码如下:

3.6 清除旧的归档文件

以下的脚本将会在log文件达到90%容量的时候清空旧的归档文件,代码如下:

要传入参数以执行该脚本:

$analyze_table.sh manager oradb1

脚本的第一部分产生了一个analyze.sql文件,里面包含了分析表用的语句。脚本的第二部分分析全部的表,代码如下:

3.7 检查表空间的使用

以下的脚本检测表空间的使用。如果表空间只剩下20%,它将会发送一个警告email。代码如下:

警告email输出的实例代码如下:

3.8 查找出无效的数据库对象

以下查找出无效的数据库对象。代码如下:

3.9 监视用户和事务

以下的脚本在死锁发生的时候发送一个警告e-mail,代码如下:

4 结语

上述提供的几个shell脚本,检查Oracle实例的可用性,检查oratab文件中列出的所有数据库,并且找出该数据库的状态,检查Oracle监听器的可用性,检查Alert日志,设置全部的环境变量,清除旧的归档文件,检查表空间的使用,查找出无效的数据库对象,监视用户和事务(死锁等),覆盖了DBA每日监控工作的90%。

这些供DBA日常工作中参考的脚本,可大大减轻DBA的工作,DBA也可以使用这些来做更重要的工作,例如性能调整等。

参考文献

[1]藤永昌.Oracle9i数据库管理员使用大全[M].北京:清华大学出版社,2004.

[2]丁国良.Oracle DBA基础教程.北京:科学出版社,2005.

篇4:oracle数据库迁移

摘 要:本文介绍了Oracle数据库基于Linux系统迁移的研究问题。在数据库领域一直处于领先地位的Oracle数据库以其良好的可移植性、可靠性和高效性,倍受各级用户的推崇和喜爱。随着Oracle数据库的不断更新和发展,其使用用户的群体也在不断的增加,因此对Oracle数据库的存储迁移技术的研究在国内外如雨后春笋般不断发展。

关键词:oracle,数据迁移,跨平台

中图分类号: TP391 文献标识码: A 文章编号: 1673-1069(2016)25-195-2

0 引言

伴随着IT行业的迅速发展,IT系统中数据的安全性,已经是对企业运营产生了重大影响。而数据库的安全迁移也为IT系统的可持续运行和数据安全提供一道保护屏障。而且近年来频繁出现的自然灾害或者突发事件也让越来越多的人们意识到,原有的数据存储方式已经无法满足企业的需要。本文正是从数据库迁移的实际操作中总结整理而成。

1 oracle数据库文件构成

数据库是一种物理的存储结构,它是由多种物理文件组成的,在Oracle数据库系统中分为,核心文件和非核心文件两大类[1]。其中核心文件由数据文件,控制文件,日志文件,参数文件组成,非核心文件由密码文件,告警日志文件,各种跟踪文件组成。

控制文件:控制文件是一个二进制的文件,它描述了数据库当前的物理状态,记录了RMAN备份的元数据。控制文件包含有数据库的名称、数据库的创建信息、表空间的信息、数据文件的状态、日志文件的信息、备份的信息、检查点的信息等。

数据文件:,一个数据库中一定至少有一个数据文件(system01.dbf),如果一个数据库存在多个数据文件,应该分别把它们存放在不同的磁盘上,这样做不仅可以提高数据的存取速度,有利于提高数据库的性能,而且还能防止数据文件同时被损坏,实现高度容灾。

日志文件:数据库日志文件包括归档日志和非归档日志,记录了数据库的所有修改信息,归档日志会在数据库切换日志时,备份历史日志,日志记录的是数据库改变的信息、因此当数据库损坏时可以通过日志文件实现数据库的完全恢复、不完全恢复,而非归档日志不会备份历史日志,只能恢复到数据库最后一次备份时的状态[2]。

临时文件:创建数据库对象的时候指定的是使用表空间,一个表空间至少包含一个数据文件,临时文件是临时表空间对应的数据文件,并不是已用完就被删除的,而是指这个文件存储的对象是临时存在的对象。临时文件主要用于大量的排序的时候,如果不能在数据库的内存中做排序,就会把临时文件作为中转。

参数文件:参数文件是记录数据库系统配置的文件,每次数据库一启动,Oracle就会自动地从参数文件中读取系统参数的设置来配置并启动数据库。如内存的大小分配,此次启动可以打开的进程数和会话数等。

2 Oracle数据库迁移的迁移方案

oracle数据库状态分类:

nomount:此状态可以读取初始化参数文件,启动实例,可以进行数据库的创建。

mount:数据库维护状态,读取控制文件。

open: 打开数据文件,日志文件,是数据库可以对全体用户提供服务了。

数据库物理迁移过程大体可分为以下四个步骤:

第一步:加载初始化文件

oracle启动后,数据库默认会读取一个二进制的初始化文件spfile.ora,可在系统启动时指定初始化文件的路径,如startup pfile="pfilesid.ora" nomount或者startup spfile="spfilesid.ora" nomount。初始化过程可根据系统错误提示内容,用pfile进行编辑处理,然后重新startup就可以了。

第二步:加载控制文件,保证在初始化文件中,控制文件的路径正确

在初始化文件中定义控制文件的位置,在确保控制文件路径正确的情况下,才能对控制文件进行加载,其命令是alter database mount。

第三步:加载数据库,包括重做日志文件

加载控制文件之后,执行命令alter database open对数据库进行开启,整个数据库启动过程完成了。

第四步:启动数据库成功之后,就说明迁移成功,可以观察数据是否丢失,然后启动监听和配置文件等。

3 Oracle数据库迁移具体实践

下面以把数据库从文件系统迁移到ASM磁盘组为例进行演示步骤:

首先,ASM是把多个磁盘组织为一个磁盘组,作为Oracle的逻辑卷管理器,利用ASM技术可以把数据均匀分布在这些磁盘上来解决从文件区到物理磁盘块的映射问题。这种设计除了定位文件区非常快速之外,还在增加或删除磁盘时有所帮助,因为文件区的位置不需要调整[3]。

把数据库从文件系统迁移到ASM磁盘组主要是把数据库的控制文件,数据文件和日志文件分别放在不同的磁盘组上,实现对这些文件的一个冗余放置,还简化了对数据文件的管理。

3.1 迁移数据库

①迁移数据库前先在RMAN下备份数据库,设置系统冗余度,并打开优化器和控制文件的自动备份功能

②创建迁移的控制文件存放的目录

③修改参数文件把控制文件的默认位置修改到ASM磁盘组上,然后用Pfile来生成spfile文件

SQL> create pfile from spfile;

④利用RMAN工具恢复控制文件,将数据库启动到mount状态;加载控制文件,如果出现错误,就说明控制文件所在的路径和参数文件路径不一致,要修改初始化参数,文件中控制文件的参数,然后重新加载。

4 总结与展望

数据库管理技术是现今社会中信息科学与技术的重要组成部分,数据库迁移技术的研究保证了数据安全以及高效的存储[4][5]。在实际操作过程中,Oracle数据库基于Linux系统的迁移过程中会出现各种各样的情况,如果想要安全完整的迁移数据库,一定要先做好备份,然后反复的实验验证,最终才能保证数据库完整安全的迁移。

参 考 文 献

[1] 张敏.数据库安全研究现状与展望[J].中国科学院院刊,2011.03.

[2] 赵钦,周丹.政府办公自动化信息系统数据迁移解决方案[J].广西科学院学报,2008.24.

[3] 段卫国,李俊春.Oracle 数据库数据迁移技术研究[J].信息技术,2015.8.

[4] Kathy Rich.Oracle Data Pump,10g Release 2 (10.2)[M].Oracle Database Utilities, 2005.

篇5:Oracle数据库备份技巧

每周一次备份主数据库。如果你创建、修改或者停止一个数据库,添加新的sql server消息,添加或者停止连接服务器,或者添加记录设备,那就进行手工备份。

每天备份一次msdb数据库。它一般非常小,但很重要,因为它包含了所有的sql server工作、操作和计划任务。

只有当你修改它时,才有必要备份模型数据库。

用sql server agent来安排你的备份工作的时间表。

如果在你的生产(production)环境中有现成资源,备份生产数据库到本地磁盘或者网络服务器(用同一个开关)。然后,把备份文件/设备拷贝到磁带上。在存在许多硬件故障(特别是在raid系统中)的情况下,磁盘常常是完好的(inact)。如果备份文件是在磁盘上,那么恢复时的速度会提高很多。

备份开发和测试数据库至少要用到simple恢复模型。

除了有计划的定时备份外,在进行未记录的(nonlogged)批操作(如,批拷贝)、创建索引、或者改变恢复模型后要备份用户数据库。

如果你使用的是simple恢复模型,记住在截短(truncate)交易记录之后备份你的数据库。

用文档记录你的恢复步骤。至少要大概记录这些步骤,注意所有的重要文件的位置。

--------------------------------------------------------------------------------

在截短记录之前,也就是所有的已提交(committed)交易从记录中清空之前,所有的这些信息都保存在交易记录中。在simple恢复模型中,记录在一个checkpoint期间内截短(在sql server内存缓冲写道磁盘时),它是自动发生的,但也可以手动执行。这也就是simple恢复模型不支持时间点(point-in-time)恢复的原因。在full和bulk_logged恢复模型下,当交易记录被备份时,交易记录被截短,除非你明确指出不进行截短。

为了备份交易记录,使用backup log命令。其基本语法与backup命令非常相似:

backup log { database } to

下面是如何把交易记录备份到一个名为logbackupdevice的逻辑设备上的例子:

backup transaction northwind to logbackupdevice

如果你不希望截短交易记录,使用no_truncate选项,如下所示:

backup transaction northwind to logbackupdevice with no_truncate

只是基本知识。

篇6:改善Oracle的索引数据库

当我们使用CREATE INDEX来创建索引时,Oracle提供了很多参数来改善创建索引的速度、索引所占用的空间和索引树的层次。

1、速度因素

PARALLEL选项:当创建索引时,Oracle首先会进行全表扫描来收集符号键和ROWID对,而PARALLEL选项允许多处理器并行扫描表,这样就会加速索引的创建过程,

一般推荐的PARALLEL值为CPU数减1。

NOLOGGING选项:NOLOGGING选项因为不写日志,所以大大提高了性能,比不使用NOLOGGING选项大约会节省70%的时间。使用NOLOGGING创建索引的唯一风险就是如果数据库需要做前滚恢复,你将不得不重建索引。

2、空间和结构因素

COMPRESS选项:COMPRESS选项用于在创建非唯一性索引时压缩重复值。对于连接索引(即索引包含多列)来说,COMPRESS选项会使索引的大小减少一半以上。COMPRESS选项也可以设置连接索引的前置长度。

使用大BLOCKSIZE的表空间:将索引建立在大BLOCKSIZE的表空间上,将大大降低索引树的层次。

篇7:oracle数据库自动备份方案

编写本文档的目的为实现ORACLE数据库的自动备份,为不动产数据增加一份数据安全按保障。

2.软件环境

数据库服务器:oracle 11g atabase x64 v11.2.0.4.0 客户端:Oracle client x64 v11.2.0.4.0 注意:数据库服务器和客户端版本必须保持一致,否则会出现无法预知的错误。

3.实施方案

3.1.编写数据库自动备份脚本

脚本内容如下,将文件存储为oraclebackup.bat:

@echo off echo 删除10天前的备分文件和日志

forfiles /p “D:oraclebackup” /m *.dmp /d-10 /c “cmd /c del @path” forfiles /p “D:oraclebackup” /m *.log /d-10 /c “cmd /c del @path” echo 正在备份 oracle 数据库,请稍等……

exp BDCDJ_CP/BDCDJ_CP@10.6.161.70/orcl file=D:/oraclebackup/BDCDJ_CP%date:~0,4%%date:~5,2%%date:~8,2%.dmp log=D:/oraclebackup/BDCDJ_CP%date:~0,4%%date:~5,2%%date:~8,2%.log echo 任务完成!注意:

1)修改数据库连接用户名、密码、数据库地址和实例名

2)修改备份文件存储地址,以上脚本存储位置为D:oraclebackup 3.2.新建任务计划

1)打开任务计划程序

篇8:Oracle数据库性能优化

随着信息化程度的不断提高, 现有的信息系统的用户数量急速增长, 作为用于存储和处理数据的系统后台数据库, 其中的数据存储量也随着这些因素成几何级数的增长。在实际使用中, 数据库系统最初的设置不能满足运行一段时间以后系统对性能的要求, 如果不能及时对系统进行优化处理, 数据库的性能会越来越差, 严重影响人们对信息的使用效率, 同时这些系统的隐患如果不及时解决, 最后必将导致系统的崩溃。由于Oracle数据库先进的、完整的、集成的电子商务解决方案, Oracle数据库占据了绝大多数的市场份额。因此, 对Oracle的优化技术的研究对信息系统有非常重要的意义。

正因为Oracle数据库的优化非常重要, Oracle的优化工作应当贯穿整个系统的设计, 运行的整个过程。Oracle数据库的优化主要包括以下几个方面, 数据库参数调整, SQL语句优化, 服务器操作系统参数调整以及网络性能调优。本文主要从数据库服务器内存参数调整和SQL语句优化两个方面论述如何对Oracle数据库进行性能调优。

1 对数据库服务器内存分配的调整

由于对服务器内存参数的调整对oracle的性能影响显著, 它成为Oracle数据库性能调优的首选对象。服务器内存参数的调整主要是对数据库系统全局区的调整, 系统全局区包括共享池、数据缓冲区、日志缓冲区。其中最主要的是对数据缓冲区和共享池的参数调整。

数据库缓冲区的作用主要是将从磁盘中读取的数据块存放在内存缓存中, 从这个意义上说数据库缓冲区越大, 存放的共享数据就越多, 减少了对磁盘数据的物理读操作, 也就提高了系统的响应速度。

共享池的作用主要是用来存放最近使用过的sql语句的, 它由一个最近最少使用的算法来管理, 由库高速缓存和数据字典缓冲区两部分组成。修改这一参数的设置, 能提高系统性能, 是由Oracle数据库系统处理用户提交的SQL语句的步骤决定的。Oracle处理SQL语句, PL/SQL程序之前会先对其进行语法分析, 权限确认, 在确认语法正确, 权限合理的之后, 会对SQL进行优化, 最终生成执行计划。这个过程花费了大量的时间, 如果在执行这些语句的时候可以将这些内容保存下来, 在下次执行相同的SQL语句或者PL/SQL, 就可以跳过这个步骤, 进而提高系统的响应速度。如果这一区域比较大, 在内存中找到相同数据的概率越大, 可以减少对SQL语句的重复解析的时间, 能明显的改进数据库的性能。但是共享池也并非越大越好, 如果共享池太大, Oracle为了维护这一共享结构, 需要付出更大的管理开销, 反而对数据库系统的性能维护不利。一般来说, 系统内存为1G, 共享池可设为150M~200M, 内存增压1G, 该值增加100M, 但共享池的最大值不应当超过500M。

综上所述, 系统全局区的参数设置应当随着系统的运行进行适当的调整, 使之在合理的范围内尽量大, 但是不能超过一个限度, 如果这一区域过大, 反而会占用操作系统使用的内存, 引起虚拟内存的页面交换, 降低了系统效率。

2 Sql优化

由于应用程序的执行最终归结为后台数据库中SQL语句的执行, SQL语句本身的执行效率就成为了影响oracle数据库执行效率的一个重要因素, 当我们对Oracle处理SQL语句的机制有所了解, 通过对SQL语句进行适当的调整, 就能提高Oracle数据库系统的性能。

1) 在基于规则的优化器中, Oracle对from子句中的表名是按照从右到左的顺序进行解析的, 即:

From子句中排在最后的表会被首先处理。我们把这张表称做驱动表。当from字句中包含多个标的情况下, oracle是通过排序合并的方式连接这些表的, 为了提高oracle的执行效率, 应当选择包含记录条数少的表作为驱动表, 即放在from子句的最后。当from子句中有3张以上的表进行连接查询时, 需要将连接其他表的交叉表作为驱动表。

2) 在oracle语句中, where子句的执行顺序是自下而上的对语句进行解析的。为了提高sql语句的执行效率, 应该将能过滤掉大量数据的条件写在where子句的最后。

3) 在selcect语句中使用*虽然对编程人员简单方便, oracle会自动列出所有列名, 但oracle解析*时则是通过查询数据字典来完成对*的转换的, 这样耗费了更多的时间用来查询数据字典, 转换, 必然降低执行效率, 因此在selcect语句中应当直接列出所有的列名。

4) 用where子句代替having子句, 在where子句中排除不需要的记录, 这样的执行效率将远远高于执行完成之后用having子句对记录进行筛选。

总体来说, Oracle数据库的性能优化涉及的方面很广, 是一个系统工程, 需要在系统设计运行的过程中, 不断运用以上提到的各个方面, 对Oracle数据库系统进行优化, 以确保数据库的使用效率。数据库的性能变差, 往往不是一个方面的问题, 而是各种问题相互结合导致的, 因此, 需要对各种因素综合分析, 对各种优化手段综合应用, 才能做到将数据库的性能维持在一个比较好的水平。

参考文献

[1]Gaja Krishna Vaidyanatha.Oracle性能优化技术内幕.机械工业出版社, 2002, 5:284.

篇9:创建Oracle数据库的原则

关键词:Oracle;数据库;原则

中图分类号:TP311.13 文献标识码:A文章编号:1007-9599 (2010) 14-0000-03

The Principle of Creating Oracle Database

Liu Yin

(China Airlines Clearing Co.,Ltd.,Beijing100028,China)

Abstract:In the China Aviation Clearing Corporation six years of work has been engaged in the Oracle applications database development and maintenance.Application process in the establishment of a database and found that many applications do not meet the Oracle database creation application of the principle database settings. This problem is prevalent in many systems,we consider the availability of more,while ignoring the performance of the database problems.I would like to work according to their own practical experience,according to Oracle applications to talk about the process of database creation and consideration should be noted that some basic principles and requirements.

Keywords:Oracle;Database;Principle

首先我想要申明的是,这个过程是根据NT上Oracle应用数据库建立过程来说明的,但是所说的原则同样适用于其他的操作系统平台(如UNIX)。虽然对于Oracle方面的高手来说,有一点班门弄斧的嫌疑,但是对于一个需要全面了解Oracle建立过程的初、中级用户,仍然还是大有益处的(这个例子中将要建立的实例名和数据库名设为VETO)。

一、初始化文件(initSID.ora)的建立

大家都知道要建立一个初始化文件(例如initAOMN.ora),这个文件可以用写字板进行编辑和修改。这个文件决定了实例的基本配置和性能,中间参数的大小需要根据具体的应用要求决定。用户还可以根据情况的变化,以后进行调整修改。

许多关键的参数Oracle公司都给了大、中、小三个标准,用户可以根据需要确定。除了要修改DB_NAME,将它改为将要建立的数据库名外,还有以下的几个参数要注意:

(一)CONTROL_FILES是指定控制文件的名称和位置。控制文件必须小于8个。但是为了防止控制文件毁坏而导致数据库的崩溃,建议将控制文件指定在不同硬盘上互做备份。文件名最好让人望名知意。

(二)SHARE_POOL_SIZE指的是共享池的大小,如果想加快SQL语句的处理速度,而且操作系统的内存足够的话,可以开大些加快速度

(三)DB_BLOCK_SIZE这个参数设置Oracle块的大小。对于OLTP(在线事务处理系统),应该设置得小点,而对于DDS(数据仓库)而言,应该设置得大点。一旦设定并且数据库建立以后时没有办法修改的。这个问题值得注意。

二、建立实例(Instance)

数据库的实例指的是为处理数据库而分配的内存结构和后台处理过程,它的配置和性能由上面的初始化文件决定的。为了在操作系统中建立这个实例,必须使用Oracle提供的Oradim工具。我们可以在NT Windows菜单的运行中输入:

ORADIM73 -NEW -SID VETO -USRPWD VETO -STARTTYPE SVRC,INST -STARTMODE AUTO -PFILE=D:ORANTDATABASEVETOINITVETO.ORA

这个命令的结果是在操作系统中建立了一个实例,并且实例的启动方式是自动。internal用户的密码是VETO,在系统的服务中建立了OracleStartVeto和OracleServiceVeto两个服务。在开始的时候OracleServiceVeto已经启动,但是OracleStartVeto可能没有启动。所以可用Net Start OralceStartVeto直接将OralceStartVeto和OralceServiceVeto启动,确保这个实例所需的服务都正常启动。即:C:NET START OracleServiceVeto

三、建立数据库(database)

实例的建立只是为数据库的建立做了一个准备,我们可以将实例付给任何一个数据库使用,只要数据库的参数MaxInstances没有被超过。建数据库需要用CREATE DATABASE命令,最好事先将参数写入一个SQL文件中,以被使用和今后的维护。我们需要了解建立数据库时,一些参数的意义,有利于我们对数据库性能的把握。

例如:这里用到的CREATE_DB_VETO.SQL

CREATE DATABASE VETO

CONTROLFILE REUSE

MAXLOGFILES 32MAXLOGMEMBERS 5MAXDATAFILES 50 MAXINSTANCES 2

LOGFILE GROUP 1 ('D:ORANTDATABASEVETOLOGVETO11.RDO',

'D:ORANTDATABASEVETOLOGVETO12.RDO')SIZE 1M,

GROUP 2 ('D:ORANTDATABASEVETOLOGVETO21.RDO',

'D:ORANTDATABASEVETOLOGVETO22.RDO')SIZE 1M

DATAFILE 'D:ORANTDATABASEVETOSYSTEMVETO.DBF' SIZE 100M

CHARACTER SET ZHS16cgb231280;

在这里我们需要注意以下几点要求:

(一)如果initVeto.ora文件中指定的controlfile已经存在才可以在建立数据库时使用CONTROLFILE REUSE,否则不能使用.

(二)MAXLOGFILES指最大的redo log file的group数。MAXLOGMEMBERS指最大的redolog file的group中的member数。MAXDATAFILES指数据库中最大的datafile数。MAXINSTANCES指数据库可被多少个instance使用数。这五个参数将会影响controlfile的大小

(三)LOGFILE指的是redo log file的设置,每个GROUP中的MEMBER文件的大小必须是大小相同的。由于redo log file是循环使用的,所以最少必须有两个GROUP,否则数据库无法建立。虽然每个GROUP的MEMBER文件可以只有一个,但是为了防止某个MEMBER文件的毁坏而导致数据库的不可用,必须在每个GROUP中有多个MEMBER,最好是每个GROUP有相同数目的MEMBER文件。建立数据库的SQL语句写好后,以internal用户进入,重新启动实例并进入数据库的nomount状态,建立数据库并打开数据库。

结果:INSTANCE启动,数据库是OPEN状态,数据库可以被使用。在建立数据库的过程中,数据库中所用到的基表都在这个过程由系统运行sql.bsq自动建立了。

四、建立动态性能视图(data dictionary view)

当数据库建立后,用户仍然不能用system用户的身份进入系统。这是由于数据库的基表虽然已经建立,但是动态性能视图没有建立,所以system的身份无法被系统确认。必须以sys或者internal用户的身份重新进入系统,运行catalog.sql和catproc.sql(这两个文件存在于目录%Oracle_homerdbms73admin中)。catalog.sql的目的是建立动态性能视图。catproc.sql的目的是建立运行SQL,PL/SQL所需的一些函数包和其他帮助工具包。虽然这个时候system用户可以登录数据库,但是可能系统要求运行pupbld.SQL,目的是防止系统设置的确省的profile不能被访问。

五、建立监听器(LISTENER.ORA)

数据库的基本结构已经建立,但是用户仍然无法远程访问数据库,因为操作系统,需要为新建的实例建立一个监听器,监听用户发出的连接请求。首先,我们必须手动的修改D:ORANTNTWORKADMINLISTENER.ORA的最后部分,然后,我们进入操作系统的服务中重启OracleTNSListener服务使修改生效,新的监听器建立。但是我们还是不能远程访问数据库,必须建立数据库别名。

六、建立数据库别名

监听器中的SID_NAME指的VETO是监听器监听的连接串的值。这个值必须等于数据库别名,所以我们必须在SQL NET EASY CONFIG中建立数据库别名,使数据库的能被远程访问数据库。例如:VETOTCP/IP10.1.3.57VETO。上面句中的前一个VETO指的是数据库别名,而后一个VETO指的是实例名。由于为了方便使用和理解,推荐使数据库别名等于实例名。

七、表空间(tablespace)

上面的六步将数据库建立了起来,但是对于一个Oracle应用数据库来说仅仅是将基本的结构建立了起来,为了使数据库能够被应用程序所使用,必须为不同的应用建立不同属性的表空间。首先,建立一个存放应用程序的数据的表空间,在建立这类表空间的时候存在很多问题。我们先来建立一个数据表空间,再讨论一下建立的原则,这些原则是避免问题的关键:

create tablespace DATA

datafile 'd:orantdatabasevetodatveto.ora' size 600M

storage(initial 1600K next 1600K pctincrease 100 minextents 1 maxextents unlimited)autoextend on next 100M maxsize 1000M;

(一)由于许多系统在建表生成的SQL语句中并没有指定表的存储参数, 建表时会使用表空间的存储参数,所以并且在建立表空间时最好指定存储参数。这需要根据具体系统的特点来设置,对于一个数据表空间,由于不同的表的定义和存放的数据量一般有很大的差异,所以建议采取中等的值。

(二)为了防止在分配extent时在表空间的数据文件中产生碎片,initial和next的值必须是db_block_size的整数倍。而且是db_file_multiblock_read_count*db_block_size的整数倍,目的是在全表搜索时速度快。

(三)数据表空间中的数据表比较多,而大量的表的数据比较小,所以initial和next不能太小,也不能太大,minextents设置为1。而且个别表中的数据多,所以maxextents设置为unlimited,pctincrease=100保证数据可以全部导入表中。pctincrease的设置必须满足上面的第二条,也就是接下来建立的extent不会在数据文件中建立碎片,在这里设为100,设所有的分配的EXTENT满足条件。

接下来建立一个存放应用程序代码的表空间,这类表空间中的数据变化不大,并且数据量不大,所以initial和next也不必太大,pctincease设置为0.其他的原则与建立数据表空间的原则一致.

八、建会滚表空间和回滚段(rollback segment)

回滚段是用来记录是数据被DML(数据处理语言)处理前的值,如果事务被回滚,可以将数据恢复到修改前。它还为其他的用户提供读一致性(read consistency),就是数据被一个用户进行DML处理但还没有提交时,其他用户读取数据时看到的值。数据库建立时,会在system表空间中建立一个系统回滚段,这个回滚段是为system/sys/internal用户操作动态性能视图及其基表而使用,其他用户不能使用这个回滚段。所以我们必须为其他用户操作数据库数据而建立回滚段。为了减少因使用回滚段产生的碎片,最好建立一个专门的回滚段表空间。然后就可以建立回滚段了,但有几点必须注意:

(一)在创建时回滚段可以指定为PUBLIC或PRIVATE(默认),在创建后不能更改。一般建立的回滚段为PUBLIC。不能为回滚段指定PCTINCREASE参数,总是设置为0。这一点很多时候都被忽略了。对于回滚段而言,总是使用INITIAL=NEXT,以保证所有的扩展有相同的大小。

(二)OPTIMAL参数,如果设置了,必须至少和回滚读段的初始值相等,而且最好设置,可以保证回滚段在没有事务处理时可以自动的回到OPTIMAL指定的值,释放空间。

(三)按照事务所需的平均空间设置OPTIMAL参数。如果没有适当的数值,把它设置为初始值,以后再调整。不要把MAXEXTENTS设置为UNLIMITED。这可能会导致不必要的回滚段扩展,可能会由于程序错误造成数据文件的扩展。

(四)总是把回滚段放在分离的、独占的表空间中,以便把竞争和碎片降到最低。所以必须专门的建立一个回滚段表空间。回滚段的数量没有详细的规定,但是对于OLTP系统,一般四个事务对应使用一个回滚段。回滚段必须ONLINE后才可以被使用。

九、建临时表空间

很多时候我们忽略了临时表空间的建立,因为它的影响仅仅限于排序查询时,对速度的影响。临时段是在排序结果大于PGA中SORT_AREA_SIZE指定的排序区,在指定的临时表空间存放排序的中间结果时产生的,在实例关闭时才释放。由于临时段产生的碎片比任何段都多,所以必须建立一个专门的临时表空间,虽然在临时表空间中只有一个临时段。

十、建立用户并授权

对于一个应用程序,必须建立不同于SYSTEM用户的其他用户来管理应用程序的数据和代码。所以我们将上面建立的数据表空间和代码表空间分别给用户DATA和CODE,如下:

CREATE USER UNIFACE IDENTIFIED BY ACCA DEFAULT TABLESPACE DATA TEMPORARY TABLESPACE TMP PROFILE DEFAULT;

GRANT RESOURCE TO UNIFACE;

CREATE USER CODE IDENTIFIED BY ACCA DEFAULT TABLESPACE CODE TEMPORARY TABLESPACE TMP PROFILE DEFAULT;

GRANT RESOURCE TO CODE;

要求和原则:

(一)建用户时必须指定用户的确省表空间和临时表空间,确省表空间保存用户所有对象。临时表空间是在排序时作为当排序所需的空间大于SORT_AREA_SIZE时存放临时过程使用的。

(二)用户建立时,系统自动将角色CONNECT付给用户,但是用户如果想拥有建立对象的权利,就必须将角色RESOURCE付给用户。

虽然第二步到第四步在NT上都可以在INSTANCE MANAGER中完成,但是由于不能给大家更加清晰和灵活的配置,建议不要用。而且根据以上十步关于建立Oracle应用数据库的过程,可以将这个过程写成批处理过程,这样不仅有助于保留建立应用数据库的参数,加快数据库的建立过程,而且还有助于日后的对数据库进行性能调整。所以我推荐根据具体的应用系统要求,建立一套标准的建立过程,是很有必要。

篇10:oracle数据库题库

相信为数不少的系统管理员每天都在做着同一样的工作――对数据进行备份。一旦哪一天疏忽了,而这一天系统又恰恰发生了故障,需要进行数据恢复,那么此时就无能为力了。假如每天设定一个固定的时间,系统自动进行备份,那该多好啊!下面笔者结合实践经验,谈一谈UNIX环境下Oracle数据库的自动备份,以起到抛砖引玉的作用。

我们计划让数据库在晚上23点做export导出备份,在凌晨2点将备份文件拷贝到磁带上,在凌晨4点将备份文件拷贝到另一台UNIX机器上,为此我们可进行如下操作:

一、导出数据库

export命令将数据库中的数据备份成一个二进制文件,它通常有三种模式:用户模式、表模式和整个数据库模式。本文拟采用用户模式,备份之前,应先建立一个备份目录,以容纳备份文件,比如可建一个/backup目录。接着我们可在UNIX的Oracle目录下(也可以是其它目录)分别建立两个文件ora―backup,tar―backup。需要说明的是,前一个文件需要对Oracle的参数进行初始化,为了方便起见,我们不妨将初始化命令放到一个文件中(文件名姑且定为ora―env),再由第一个文件调用它。

1. ora―env文件对Oracle的参数进行初始化,其内容如下:

ORACLE―HOME=$ORACLE―HOME;export ORACLE―HOMEORACLE―SID=ora73;export ORACLE―SIDORACLE―TERM=sun;export ORACLE―TERMLD―LIBRARY―PATH=$ORACLE―HOME/lib;export LD―LIBRARY―PATHORA―NLS32=$ORACLE―HOME/ocommon/nls/admin/data;export ORA―NLSPATH=.:/usr/clearcase/“ target=”_blank“ >ccs/bin:/usr/ucb:$ORACLE―HOME/bin:$PATH;export PATHDISPLAY=host1:0;export DISPLAYNLS―LANG=american―america.zhs16cgb231280;export NLS―LANG

2. ora―backup文件对数据库做export导出,导出的文件名可以任意定,本文定为字母“xx”加当天日期,即假如当天日期是12月10号,则导出的文件名为“xx1210.dmp ”,以区别于其它日期的备份文件。

 

ora―backup文件内容:

./oracle/ora―env#初始化Oracle数据库rq=′date +″%m%d″ ′#把当天日期赋予变量rqrm /backup/?# 清空 /backup目录exp test/test file=/backup/xx$rq.dmplog=/backup/xx$rq.log

本命令用于在$提示符下,导出test用户的数据(其口令亦为test),导出文件及日志均放在/backup目录下。

 

二、磁带备份

tar―backup文件将用export命令导出的数据文件拷贝到磁带上。tar―backup文件内容:

tar rvf /dev/rmt/0n/backup/?

本命令可将/backup目录下当天产生的文件备份到磁带上。本文件中,tar命令使用了三个参数,其中r选项表示向磁带上拷入文件而不破坏磁带原来内容,v选项表示在拷贝过程中显示文件信息,f选项后面加上磁带设备名,指定文件向何处拷贝,n选项表示磁带机不倒带,

/dev/rmt/0表示UNIX主机第一个磁带驱动器,同理,/dev/rmt/1则表示 UNIX主机第二个磁带驱动器,依此类推。

ora―env、ora―backup、tar―backup文件编写完成后,分别使用下述命令:

chmod 755 ora―envchmod 755 ora―backupchmod 755 tar―backup

这样,三个文件就都变成了可执行文件。

 

三、异地备份

我们知道,通常可用FTP命令在两台主机间传输数据,但一般是通过交互方式实现的,即需要手工输入目标主机的IP地址、用户名、口令等。显然,这不符合自动备份的要求。所幸的是,我们可以通过编写一个.netrc的文件来达到目标。这一文件必须命名为 .netrc,且必须存放在启动FTP命令的机器上的用户注册目录中,该文件的权限应禁止组内或其它用户进行读访问。这样,当用户使用FTP命令的时候,系统将会在该用户的注册目录中寻找.netrc文件,如果能够寻找到,将会首先执行该文件,否则,会交互式地提示用户输入用户名、口令等。

在使用FTP命令之前,应先在另一台作备份用的UNIX机器上建一目录,以容纳备份文件,本文建的目录是/pub 。需要指出的是,为了加快备份速度,两台主机之间的传输速率应尽可能的高,最好位于同一局域网上。

.netrc文件内容如下:machine host2# host2为作备份用的主机名login oracle#oracle为备份主机上的一个用户password oracle#oracle用户的口令为oraclemacdef init#定义一个名为init的宏,它将在自动注册进程的最后被执行bin#文件的传输方式设为二进制lcd /backup# 进入本地工作目录/backupcd /pub# 进入备份主机目录/pubmput ?# 将/backup目录下的所有文件传输至备份主机bye#退出FTP会话进程.netrc文件编写完成后,使用下述命令:chmod 600 .netrc这样,.netrc文件就只能被该用户所访问。

四、启动备份进程

 

Cron是一个永久进程,它由/etc/rc.local启动执行。Cron检查/var/spool/cron/c rontabs/?目录中的文件,找到所要执行的任务和执行任务的时间。Crontab文件的每一行由六个域(minutes、hours、day of month、month、day of week、command)组成,域之间用空格或Tab分开,其中:

minutes:分钟域,值的范围是0到59 hours:小时域,值的范围是0到23 day of month:日期,值的范围是1到31 month:月份,值的范围是1到12 day of week:星期,值的范围是0到6,星期日值为0 command:所要运行的命令

如果一个域是?,表明命令可以在该域所有可能的取值范围内执行。如果一个域是由连字符隔开的两个数字,表明命令可以在两个数字之间的范围内执行(包括两个数字本身)。如果一个域是由逗号隔开的一系列值组成的,表明命令可以在这些值组成的范围内执行。如果日期域和星期域都有值,则这两个域都有效。

 

现在,我们编写一个文件,用以启动自动备份进程。值得注意的是,该文件只能在 Oracle用户名下用crontab -e 命令来编辑,否则将不会被定时执行,文件名定为Orac le,文件将放在/var/spool/cron/crontabs 目录下。编辑完成后,可以在Oracle的$提示符下,用crontab -l命令来查看。

Oracle文件内容:

0 23 ? ? ? /oracle/ora―backup# 每天23点对数据库执行备份0 2 ? ? ? /oracle/tar―backup# 每天2点将文件备份到磁带上0 4 ? ? ? ftp -i host2# 每天4点将文件备份到另一台主机上

经过以上的操作后,系统每天晚上将自动产生一个备份,并且自动将备份文件分别拷贝到磁带上和另一台主机上。系统管理员需要做的是,隔几天换一盘磁带(更换磁带的周期取决于备份文件的大小和磁带的容量)和清理备份目录。这样,他们就可以从备份数据的繁琐中解脱出来,去做其它更有意义的工作。而数据库既实现了磁带备份,又实现了异地备份,相应的安全性也大大提高了。 (完)

 

篇11:Oracle数据库面试练习题

分析:每个部门有多少员工 ―― 根据部门编号进行分组

select deptno,count(*) from emp group by deptno having count(*) >= 1;

2.列出薪金比“SMITH”多的所有员工。

分析:先查询出SMITH工资 : select sal from emp where ename=’SMITH’;

select * from emp where sal > (select sal from emp where ename=’SMITH’);

3.***** 列出所有员工的姓名及其直接上级的姓名。

分析:表自映射,为表起别名,进行关联 t1 表模拟员工表 t2 表保存直接上级信息

select t1.ename 员工姓名, t2.ename 直接上级 from emp t1,emp t2 where t1.MGR = t2.empno;

4.列出受雇日期早于其直接上级的所有员工。

分析:原理和上题类似

select t1.*,t2.hiredate from emp t1,emp t2 where t1.MGR = t2.empno and t1.hiredate < t2.hiredate;

5.列出部门名称和这些部门的员工信息,同时列出那些没有员工的部门。

分析:部门没员工也要显示 ― 外连接。无论怎样部门信息一定要显示,通过部门去关联员工

select * from dept left outer join emp on dept.deptno = emp.deptno ;

6.列出所有“CLERK”(办事员)的姓名及其部门名称。

分析:查找job为CLERK 员工姓名和部门名称

员工姓名 emp表

部门名称 dept表

select emp.ename,dept.dname,emp.job from emp,dept where emp.deptno = dept.deptno and emp.job=’CLERK’;

7.列出最低薪金大于1500的各种工作。

分析:工作的最低薪金 ―- 按工作分组,求最低薪金

select min(sal) from emp group by job;

大于1500 是一个分组条件 ― having

select job,min(sal) from emp group by job having min(sal) > 1500;

8.列出在部门“SALES”(销售部)工作的员工的姓名,假定不知道销售部的部门编号。

分析:员工姓名位于 emp 部门名称 dept

select emp.ename from emp,dept where emp.deptno = dept.deptno and dept.dname = ‘SALES’;

9.列出薪金高于公司平均薪金的所有员工。

分析:先求公司平均薪金 select avg(sal) from emp;

select * from emp where sal > (select avg(sal) from emp);

10.列出与“SCOTT”从事相同工作的所有员工。

分析:先查询SCOTT : select job from emp where ename =’SCOTT’;

select * from emp where ename ‘SCOTT’ and job = (select job from emp where ename =’SCOTT’);

11.列出薪金等于部门30中员工的薪金的所有员工的姓名和薪金。

分析:查看部门30 中所有员工薪资列表 select sal from emp where deptno = 30;

select * from emp where sal in (select sal from emp where deptno = 30);

12.列出薪金高于在部门30工作的所有员工的薪金的员工姓名和薪金。

分析:

select * from emp where sal > all(select sal from emp where deptno = 30);

select * from emp where sal > (select max(sal) from emp where deptno = 30);

上一篇:车辆转让合同模板下一篇:团校课程内容纲要