当前位置:文档之家› oracle笔记整理

oracle笔记整理

oracle笔记整理
oracle笔记整理

1,SGA主要有那些部分,主要作用是什么

共享SQL和PLSQL的执行计划和数据字典对象等信息

1.data dict cache 也叫rowcache 加速SQL的解析

使用过的字典就会缓存在这里再次使用这个字典就直接从内存获取这些统计的信息在v$rowcache中记录

2.library cache: 加速解析减少语句重解析

SQL文本,解析树和执行计划就在这里

缓冲被访问的数据块.每次从磁盘向内存缓冲数据的单位由db_block_size=8192 决定,这个区域缓冲的数据保持时间也由LRU算法决定

记录数据库的每个改动向量,就是记录有顺序的SQL条目,这些SQL条目包括系统的改动和UNDO的改动,用户数据的改动,将一个人的工资由800改成1000 还没提交就断电,这时数据有可能写盘下次启动时就通过回滚段中的改前镜像和日志进行恢复,如果提交了数据有可能没写盘这时断电下次启动就通过日志重做,主要是为了数据的增删改过程记录日志的提高数据安全性

4large pool(9I引入)

大池存放对那些复杂的程序包分析、RMAN、UGA(共享模式)、异步IO等相关的数据

5 java pool(9I引入)

JAVA池存放JAVA存储过程的分析信息。

6 stream pool(10g引入)

流池为流复制服务提供数据缓冲缓存

2:oracle系统进程主要有哪些,作用是什么

在众多实例进程中有5个必须进程

1.SMON 系统监视进程

1.空间管理:定期合并空间(老版本才有) 定期回收临时段

2.实例恢复:(服务器掉电了实例意外终止) 恢复的方法:先前滚==>后回滚==>释放资源

前滚将数据库中的SQL(包括提交的和未提交的)全部重新做一遍

回滚将没提交的SQL句从数据库中将老的镜像取出覆盖

释放资源将前滚和回滚中使用到的资源释放

2.DBWn n指的是0-9 a-j 多个写进程的区分将脏块写盘

触发写的条件

1.产生检查点

2.脏数据缓冲区达到阀值默认10%

3.扫描整个data buffer没有空闲data buffer中包含脏的和未脏的优先写脏数据列表再写未改的

4.timeout超时如果DBWR没事做会被每三秒唤醒一次去巡检写不写不一定

5.集群环境的ping请求触发多实例的数据写请求

6.表级别的truncate或drop也会触发数据写

7.修改表空间的read only

8.做表空间的offline(离线)

9.热备份begin backup命令

3.PMON 进程监视器

1.清理与实例非法断开的server_procese残留的资源非正常终止的用户进程产生的垃圾资源

2.负责重启意外死掉的调度器(网络监听中使用的)

3.将实例的信息注册到监听程序

4.CKPT 把新的检查点写入指定位置

1.调度数据写dbwN

2.将新检查点写数据文件头

3.将新检查点写控制文件中的数据文件头的记录

5.LGWR 只有一个进程不会向数据写进程那么多因为写要求有顺序将redo log buffer里的条目写到redo文件

触发写的条件

https://www.doczj.com/doc/1715283042.html,mit

2.redo log buffer 1/3满

3.redo log buffer 日志缓冲区达到1M

4.写日志优先

当DBWR要写脏数据时,要检查脏数据对应的日志是否写盘,如果日志还没写,会优先写日志

5.3秒写一次

简答题

1解释冷备份和热备份的不同点以及各自的优点

解答:热备份针对归档模式的数据库,在数据库仍旧处于工作状态时进行备份。而冷备份指在数据库关闭后,进行备份,适用于所有模式的数据库。热备份的优点在于当备份时,数据库仍旧可以被使用并且可以将数据库恢复到任意一个时间点。冷备份的优点在于它的备份和恢复操作相当简单,并且由于冷备份的数据库可以工作在非归档模式下,数据库性能会比归档模式稍好。(因为不必将archive log写入硬盘)

2如何转换init.ora到spfile?

解答:使用create spfile from pfile 命令

3. 解释data block , extent 和segment的区别(这里建议用英文术语)

解答:data block是数据库中最小的逻辑存储单元。当数据库的对象需要更多的物理存储空间时,连续的data block就组成了extent . 一个数据库对象

拥有的所有extents被称为该对象的segment.

4. 比较truncate和delete 命令

解答:两者都可以用来删除表中所有的记录。区别在于:truncate是DDL操作,它移动HWK,不需要rollback segment .而Delete是DML操作, 需要rollback segment 且花费较长时间.

5解释归档和非归档模式之间的不同和它们各自的优缺点

解答:归档模式是指你可以备份所有的数据库transactions并恢复到任意一个时间点。非归档模式则相反,不能恢复到任意一个时间点。但是非归档模式可以带来数据库性能上的少许提高

6. 给出数据库正常启动所经历的几种状态?

解答:

STARTUP NOMOUNT –数据库实例启动

STARTUP MOUNT - 数据库装载

STARTUP OPEN –数据库打开

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

解答:PMON

33. 如何进行强制LOG SWITCH?

解答:ALTER SYSTEM SWITCH LOGFILE;

39. 如何在tablespace里增加数据文件?

解答:ALTER TABLESPACE ADD DATAFILE SIZE

40. 如何变动数据文件的大小?

解答:ALTER DATABASE DA TAFILE RESIZE ;

41. 哪个VIEW用来检查数据文件的大小?

解答:DBA_DATA_FILES

42. 哪个VIEW用来判断tablespace的剩余空间

解答:DBA_FREE_SPACE

实例instance

实例是访问数据库的正常模式的唯一途径(排除DUL等工具)

一个实例只能打开一个数据库

一个数据库可以被多个实例访问(RAC)

实例由内存结构和一组后台进程组成

ORACLE INSTANCE是一个数据库文件进行实例化提供的服务,而它也是我们体系结构的核心

参数文件

是实实在在存在于你硬盘或裸设备中的.

参数文件决定着实例初始化的形态

内存由SGA和PGA组成,分别代表系统全局区和私有全局区。

SGA:系统全局区

每个实例只有一个SGA,生命周期是实例的启停,SGA随之创建消亡;用于存储数据库信息的内存区,该信息为数据库所有进程所共享。

PGA:程序全局区

整个实例有很多PGA,对应的是进程,一个进程一个PGA,生命周期是进程的创建和消亡

PGA中主要包含排序区和UGA(专有模式)的信息

UGA:用户全局区

存储session信息和解析执行计划的

它的位置比较特殊

如果是专有模式(默认) 进程和会话是一对一的,UGA会存在PGA中

如果是共享模式进程和会话是一对多的关系,UGA会存在large pool中

但large pool没内存可分时会存在于SHARED POOL中PGA和UGA的区别

PGA是服务于进程的,它包含的是进程的信息.

UGA是服务于会话的,它包含的是会话的信息.

8 Oracle系统进程主要有哪些,作用是什么

数据写进程(DBWR):负责将更改的数据从数据库缓冲区高速缓存写入数据文件

日志写进程(LGWR):将重做日志缓冲区中的更改写入在线重做日志文件

系统监控(SMON): 检查数据库的一致性如有必要还会在数据库打开时启动数据库的恢复进程监控(PMON): 负责在一个Oracle 进程失败时清理资源

检查点进程(CKPT):负责在每当缓冲区高速缓存中的更改永久地记录在数据库中时,更新控制文件和数据文件中的数据库状态信息。

归档进程(ARCH):在每次日志切换时把已满的日志组进行备份或归档

恢复进程(RECO): 保证分布式事务的一致性,在分布式事务中,要么同时commit,要么同时rollback;

作业调度器(CJQ ): 负责将调度与执行系统中已定义好的job,完成一些预定义的工作.

9 SGA主要有那些部分,主要作用是什么

系统全局区(SGA):是ORACLE为实例分配的一组共享缓冲存储区,用于存放数据库数据和控制信息,以实现对数据库数据的管理和操作。

SGA主要包括:

a)共享池(shared pool) :用来存储最近执行的SQL语句和最近使用的数据字典的数据。

b)数据缓冲区(database buffer cache):用来存储最近从数据文件中读写过的数据。

c)重作日志缓冲区(redo log buffer):用来记录服务或后台进程对数据库的操作。

另外在SGA中还有两个可选的内存结构:

d)java pool: 用来存储Java代码。

e)Large pool: 用来存储不与SQL直接相关的大型内存结构。备份、恢复使用。

GA:db_cache/shared_pool/large_pool/java_pool

db_cache: 数据库缓存(Block Buffer)对于Oracle数据库的运转和性能起着非常关键的作用,它占据Oracle数据库SGA(系统共享内存区)的主要部分。Oracle数据库通过使用L RU算法,将最近访问的数据块存放到缓存中,从而优化对磁盘数据的访问.

shared_pool: 共享池的大小对于Oracle 性能来说都是很重要的。共享池中保存数据字典高速缓冲和完全解析或编译的的PL/SQL 块和SQL 语句及控制结构

large_pool: 使用MTS配置时,因为要在SGA中分配UGA来保持用户的会话,就是用Lar ge_pool来保持这个会话内存使用RMAN做备份的时候,要使用Large_pool这个内存结构来做磁盘I/O缓存器

java_pool: 为java procedure预备的内存区域,如果没有使用java proc,java_pool不是必须的

三:备份恢复类

1 备份如何分类

逻辑备份:exp/imp 指定表的逻辑备份

物理备份:

热备份:alter tablespace begin/end backup;

冷备份:脱机备份(database shutdown)

RMAN备份

full backup/incremental backup(累积/差异)

物理备份

物理备份是最主要的备份方式。用于保证数据库在最小的数据库丢失或没有数据丢失的情况下得到恢复。

冷物理

冷物理备份提供了最简单和最直接的方法保护数据库因物理损坏丢失。建议在以下几种情况中使用。

对一个已经存在大最数据量的数据库,在晚间数据库可以关闭,此时应用冷物理备份。

对需对数据库服务器进行升级,(如更换硬盘),此时需要备份数据库信息,并在新的硬盘中恢复这些数据信息,建议采用冷物理备份。

热物理

主要是指备份过程在数据库打开并且用户可以使用的情况下进行。需要执行热物理备份的情况有:

由于数据库性质要求不间断工作,因而此时只能采用热物理备份。

由于备份的要求的时间过长,而数据库只能短时间关闭时。

逻辑备份(EXP/IMP)

逻辑备份用于实现数据库对象的恢复。但不是基于时间点可完全恢复的备份策略。只能作为联机备份和脱机备份的一种补充。

2 归档是什么含义

关于归档日志:Oracle要将填满的在线日志文件组归档时,则要建立归档日志(archived re do log)。其对数据库备份和恢复有下列用处:

数据库后备以及在线和归档日志文件,在操作系统和磁盘故障中可保证全部提交的事物可被恢复。

在数据库打开和正常系统使用下,如果归档日志是永久保存,在线后备可以进行和使用。

数据库可运行在两种不同方式下:NOARCHIVELOG方式或ARCHIVELOG 方式

数据库在NOARCHIVELOG方式下使用时,不能进行在线日志的归档,

数据库在ARCHIVELOG方式下运行,可实施在线日志的归档

归档是归档当前的联机redo日志文件。

9. 绑定变量是什么?绑定变量有什么优缺点?

绑定变量是指在SQL语句中使用变量,改变变量的值来改变SQL语句的执行结果。

优点:使用绑定变量,可以减少SQL语句的解析,能减少数据库引擎消耗在SQL语句解析上的资源。提高了编程效率和可靠性。减少访问数据库的次数, 就能实际上减少ORACLE 的工作量。

缺点:经常需要使用动态SQL的写法,由于参数的不同,可能SQL的执行效率不同;

绑定变量是相对文本变量来讲的,所谓文本变量是指在SQL直接书写查询条件,

这样的SQL在不同条件下需要反复解析,绑定变量是指使用变量来代替直接书写条件,查询bind value在运行时传递,然后绑定执行。

优点是减少硬解析,降低CPU的争用,节省shared_pool

缺点是不能使用histogram,sql优化比较困难

2 简单描述tablespace / segment / extent / block之间的关系

tablespace: 一个数据库划分为一个或多个逻辑单位,该逻辑单位成为表空间;每一个表空间可能包含一个或多个Segment;

Segments: Segment指在tablespace中为特定逻辑存储结构分配的空间。每一个段是由一个或多个extent组成。包括数据段、索引段、回滚段和临时段。

Extents: 一个extent 由一系列连续的Oracle blocks组成.ORACLE为通过extent 来给segment分配空间。

Data Blocks:Oracle 数据库最小的I/O存储单位,一个data block对应一个或多个分配给data file的操作系统块。

table创建时,默认创建了一个data segment,每个data segment含有min extents指定的3 描述tablespace和datafile之间的关系

一个表空间可包含一个或多个数据文件。表空间利用增加或扩展数据文件扩大表空间,表空间的大小为组成该表空间的数据文件大小的和。一个datafile只能属于一个表空间;

一个tablespace可以有一个或多个datafile,每个datafile只能在一个tablespace内, table 中的数据,通过hash算法分布在tablespace中的各个datafile中,tablespace是逻辑上的概念,datafile则在物理上储存了数据库的种种对象。

4 本地管理表空间和字典管理表空间的特点,ASSM有什么特点

本地管理表空间:(9i默认)空闲块列表存储在表空间的数据文件头。

特点:减少数据字典表的竞争,当分配和收缩空间时会产生回滚,不需要合并。

字典管理表空间:(8i默认)空闲块列表存储在数据库中的字典表里.

特点:片由数据字典管理,可能造成字典表的争用。存储在表空间的每一个段都会有不同的存储字句,需要合并相邻的块;

本地管理表空间(Locally Managed Tablespace简称LMT)

extents数,每个extent据据表空间的存储参数分配一定数量的blocks

8i以后出现的一种新的表空间的管理模式,通过位图来管理表空间的空间使用。字典管理表空间(Dictionary-Managed Tablespace简称DMT)

8i以前包括以后都还可以使用的一种表空间管理模式,通过数据字典管理表空间的空间使用。动段空间管理(ASSM),它首次出现在Oracle920里有了ASSM,链接列表freelist 被位图所取代,它是一个二进制的数组,

能够迅速有效地管理存储扩展和剩余区块(free block),因此能够改善分段存储本质,ASSM 表空间上创建的段还有另外一个称呼叫Bitmap Managed Segments(BMB 段)。

5 回滚段的作用是什么

回滚段用于保存数据修改前的映象,这些信息用于生成读一致性数据库信息、在数据库恢复和Rollback时使用。一个事务只能使用一个回滚段。

事务回滚:当事务修改表中数据的时候,该数据修改前的值(即前影像)会存放在回滚段中,当用户回滚事务(ROLLBACK)时,ORACLE将会利用回滚段中的数据前影像来将修改的数据恢复到原来的值。

事务恢复:当事务正在处理的时候,例程失败,回滚段的信息保存在undo表空间中,ORACLE将在下次打开数据库时利用回滚来恢复未提交的数据。

读一致性:当一个会话正在修改数据时,其他的会话将看不到该会话未提交的修改。当一个语句正在执行时,该语句将看不到从该语句开始执行后的未提交的修改(语句级读一致性)

当ORACLE执行SELECT语句时,ORACLE依照当前的系统改变号(SYSTEM CHANGE NUMBER-SCN)来保证任何前于当前SCN的未提交的改变不被该语句处理。可以想象:当一个长时间的查询正在执行时,若其他会话改变了该查询要查询的某个数据块,ORACLE将利用回滚段的数据前影像来构造一个读一致性视图

6 日志的作用是什么

日志文件(Log File)记录所有对数据库数据的修改,主要是保护数据库以防止故障,以及恢复数据时使用。其特点如下:

a)每一个数据库至少包含两个日志文件组。每个日志文件组至少包含两个日志文件成员。

b)日志文件组以循环方式进行写操作。

c)每一个日志文件成员对应一个物理文件。

记录数据库事务,最大限度地保证数据的一致性与安全性

重做日志文件:含对数据库所做的更改记录,这样万一出现故障可以启用数据恢复,一个数据库至少需要两个重做日志文件

归档日志文件:是重做日志文件的脱机副本,这些副本可能对于从介质失败中进行恢复很必要。

4:rman是什么,有何特点?

RMAN(Recovery Manager)是DBA的一个重要工具,用于备份、还原和恢复oracle数据库,

RMAN 可以用来备份和恢复数据库文件、归档日志、控制文件、系统参数文件,也可以用来执行完全或不完全的数据库恢复。

RMAN有三种不同的用户接口:

COMMAND LINE方式、GUI 方式(集成在OEM 中的备份管理器)、API 方式(用于集成到第三方的备份软件中)。

具有如下特点:

1)功能类似物理备份,但比物理备份强大N倍;

2)可以压缩空块;

3)可以在块水平上实现增量;

4)可以把备份的输出打包成备份集,也可以按固定大小分割备份集;

5)备份与恢复的过程可以自动管理;

6)可以使用脚本(存在Recovery catalog 中)

7)可以做坏块监测

期末试题

1.SGA有各部分组件是哪几部分?

2.如何查看oracle的内存管理是自动管理还是手动管理?

3.共享池share_pool由哪两个重要部分组成?

4.写日志,写脏块,写控制文件哪种代表数据有安全保障了?

5.实例恢复哪个进程来做恢复原理是什么?

SMON 系统监视进程

6.参数文件有哪几种优先级顺序是什么样?如何验证是Pfile还是SPfile起库?

7.实例启动三个步骤关闭的四种方法

8.什么叫增量检查点什么叫完全检查点

9.假设数据库orcl有一个数据文件d:\test01.dbf是test表空间的数据文件,请在不停库的情况下将数据文件移动到e:\test01.dbf,请简述其过程。

10,请写出创建文本参数文件,二进制参数文件和控制文件备份的命令

create pfile from spfile;

create spfile from pfile;

11,如何启动数据库的归档模式,如何设置用户的归档目录

alter system set log_archive_dest_1='location=/home/oracle/arc1';

alter system switch logfile;

12。假设当前生产库为orcl,数据库hang住,用sysdba登录,在owi等待事件里查询发现

等待的进程为LGWR,请解释数据库hang住的原因,并提出解决方案

资料

1,如何设置SGA

Oracle的一个重要发展方向就是自动管理,当然,SGA与PGA也不例外。

从Oracle 9i开始,就出现了一个新的参数sga_max_size,可以保证在此数值之内的内存可以自由地修改与调配。

如指定了sga_max_size,就可以在这个范围内自由地设置Shared pool、Data buffer等的大小。

从Oracle 10g开始,又出现了另外一个新的参数,sga_target,只要设置了这个参数.

所有的SGA的组件,如Shared pool、Data buffer、Large pool等,都不需要手工指定了,

Oracle会自动管理。这一特性被称为自动共享内存管理(Automatic Shared Memory Management,ASMM)

也就是说,Oracle会根据需要随时改变各个内存组件的大小,以达到最佳使用状态。

但这个参数的最大值会受sga_max_size值限制

关闭自动管理只需将这个sga_target参数设置为0

2,参数文件的优先级

spfile.ora

==> spfile.ora

==> init.ora

==> i5nit.ora

参数文件种类和区别

1. pfile

文本格式

可以放在客户端

一直都存在

命名规则: init.ora 或init.ora

2. spfile

二进制格式

只能放在服务端

9i之后引入

命名规则: spfile.ora 或spfile.ora 只能使用系统命令修改alter system set name=value;

3,数据库的启动分3 个阶段

1、nomount:只加载实例

查看数据库状态:select instance_name,status from v$instance; ==>

STARTED

select * from v$sgainfo; ==> 与内存相关的如何启动:在停止状态==> startup nomount

数据库作了什么:1.读取参数文件

2.产生警报日志

3.分配了内存

4.后台进程启动

需要什么条件:(1)参数文件,目的分配内存和后台进程;

(2)实例管理的目录,目的写警报日志

我们可以作什么:1)查看部分动态性能视图,即v$等(参数与内存和后台进程相关的视图)

2)修改初始化参数

3)创建数据库

4)重新创建控制文件

2、mount

如何启动:(1)startup mount

(2)已经启动的状态,从nomount到mount状态==> alter database mount

数据库作了什么:从参数文件中获得控制文件的位置加载控制文件到内存需要什么条件:需要所有的控制文件都在,并且状态是一致的

控制文件在哪:由初始化参数control_file 决定,该参数指向几个控制文件,数据库就需要几个文件

我们可以作什么:(1)可以查看所有动态性能视图(v$xxx)但不能查询数据字典

(2)可以移动数据文件和联机日志文件

(3)可以备份还原恢复数据库

(4)可以作数据库级别的offline 和online ,但不能作表空间的offline 和online

(5)可以修改数据库的归档模式

(6)可以打开和关闭闪回数据库的功能

3、open

如何启动:从mount状态修改到open状态==>alter database open

数据库作了什么:按照控制文件的指针寻找到数据库文件和联机日志文件,并且要校验文件的有效性

需要什么条件:需要所有的物理文件都在,并且是好的

控制文件在哪:由初始化参数control_file 决定,该参数指向几个控制文件,数据库就需要几个文件

我们可以作什么:

数据文件日志文件都已打开随意查看修改使用

但有些操作只能在mount下和nomount下完成例如改归档模式就只能在mount

open并不是一切皆可

nomount mount open没有子集包含的关系.

alter database open; --不是所有数据库都可以使用要保证数据文件日志文件是健康的一致的

alter database open read only; --所有oracle数据库都可以使用此方式

只能查询不能修改数据

可以执行本地管理的表空间的磁盘排序

select open_mode from v$database; --查看数据库打开模式

shutdown normal

不允许建立新的连接(普通用户)

等待会话结束

等待事务结束

产生检查点(完全检查点) 相对于增量检查点8I后才引入完全检查点会将所有脏块写盘而增量只是对块产生写标记

关闭数据文件

卸载控制文件

关闭实例

shutdown transactional(生产库常用的关库命令)

不允许建立新的连接(普通用户)

不等待查询结束(查询的会话被杀掉)

等待事务结束

产生检查点(完全检查点) 相对于增量检查点8I后才引入完全检查点会将所有脏块写盘而增量只是对块产生写标记

关闭数据文件

卸载控制文件

关闭实例

shutdown immediate

不允许建立新的连接(普通用户)

不等待查询结束(查询的会话被杀掉)

不等待事务结束(将事务rollback) (但是用户自己的事务需要commit或rollback)

产生检查点(完全检查点) 相对于增量检查点8I后才引入完全检查点会将所有脏块写盘而增量只是对块产生写标记

关闭数据文件

卸载控制文件

关闭实例

shutdown abort

对oracle数据库相当于拔掉电源

不产生检查点是脏库

重新启动数据库时需要实例恢复由后台进程SMON先前滚再回滚进行恢复

将orcl数据库整体迁移到e:\test

迁移数据库:

1.建立数据库的文本参数文件,一致性停库

2。将所有文件复制到目标迁移位置

3.在文本参数文件中修改新的控制文件的位置

4。将二进制参数文件删除

5。将库启动到mount状态

6。将库中文件重命名到目标位置

alter database rename file '旧文件名' to '新文件名‘(新文件要确实已经存在)

7。将库修改到open状态

查看各文件的位置,验证移库有没成功

,4,联机日志redofile

联机日志存在的目的是为了数据完整性通过时间向量和日志条目来维持完整性

Oracle服务器维护联机重做日志文件以使数据库中的数据丢失减到最小。

重做日志文件记录了对数据库缓冲区高速缓存内数据所做的所有更改,

存放着SQL条目(记录)就是改变向量

重做日志

按group来存放的.叫日志组

一个数据库至少有2个日志组

每个日志组至少有一个成员,组内成员与成员之间是镜像关系

顺序切循环写

当前组日志写满,就会触发日志切换.手动也可以触发

alter system switch logfile;

手动触发日志切换

idle> select * from v$log;

GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIME

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

1 1 0 52428800 1 YES UNUSED 0

2 1 0 52428800 1 YES UNUSED 0

3 1 1 52428800 1 NO CURRENT

706870 22-FEB-11

status:

CURRENT 当前当前日志非常重要若当前日志组丢失系统崩溃恢复时将会丢失数据

UNUSED 未使用

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函数

许多软件公司都理解开发不依赖于特定数据库类型(例如Oracle、SQL Server、DB2)的应用程序的重要性,它可以让客户们选择自己习惯的平台。一般来说,软件开发人员都能够识别出他们的负责数据库维护的客户,和必须使用现有平台和个性化的客户。 关于Oracle和SQL Server之间的区别,已经有很多篇文章从企业的角度和数据库管理员的角度出发描写了两者之间的一般差别。在这篇文章里面,我将会从应用程序的角度向你描述SQL erver 和oracle平台之间的区别,并且将会讨论开发不依赖于数据库环境的应用程序的几种可能的方法。与此同时,我不会再论讨对于应用程序来说,两个平台之间显而易见的区别,例如表的分割和索引。 定义通用接口和语言有很少的几种通用语言和接口可以让应用程序不依赖于数据库,想来也可以以同样的方式应用在关系型数据库上面: ANSI是美国国家标准局定义的,这是一家志愿者成员的组织(用私人基金运转),他们在有关设备和程序等广泛领域内开发了国家承认的标准。在数据库领域, ANSI定义了编写SQL命令的标准,假设命令可以运行在任何的数据库上,而不需要更改命令的语法。 ODBC是开放数据库连接(ODBC)接口,微软定义的,它可以让应用程序访问数据库管理系统(DBMS)中的数据,使用SQL作为访问数据的标准。 ODBC允许最大的互联性,这意味着一个单个的应用程序可以访问不同的数据库管理系统。然后,应用程序终端用户可以添加开放数据库连接(ODBC)数据库驱动来将应用程序与他们所选择的数据库管理系统链接上。 OLE DB 是ODBC的继承者,是一组允许例如基于VB、C++、Access等任何可以连接到类似SQL Server、Oracle、DB2、MySQL等后台的“前台”的软件组件。在许多种情况下,OLE DB组件都比原有的ODBC提供了好得多的性能。 JDBC(Java数据库连接)应用程序接口是Java编程语言和广泛范围的数据库,SQL数据库和其他表列数据源(例如电子表格或者普通文本文件)之间,进行不依赖于数据库的连接的行业标准。JDBD应用程序接口为基于SQL的数据库访问提供了调用级别的应用程序接口。真实世界中的通用接口不幸的是,并不是所有数据库级别的命令都是ANSI,每个数据库平台都有自己的扩展功能。对于ANSI或者通用接口,一般来说都代表着几本功能,因此也可能意味着丧失了性能方面的竞争力。对于小型数据库和小型应用程序来说,要维护对数据库的通用访问是简单的,但是当数据库和/或应用程序变得越来越大,越来越复杂,你就不得不向代码中添加功能。 SQL Server和Oracle的常用函数对比 ---------数学函数 1.绝对值 S:select abs(-1) value O:select abs(-1) value from dual 2.取整(大) S:select ceiling(-1.001) value O:select ceil(-1.001) value from dual

(Oracle数据库管理)玩转实战教程学习笔记最全版

(O管理)玩转实战教程(韩顺平)学习笔记

韩顺平—玩转oracle视频教程笔记 一:Oracle认证,与其它数据库比较,安装 oracle的卸载 1.停止所有与ORACLE相关的服务。 2. 使用OUI(Oracle Universal Installer)卸载Oracle软件。 “开始”->“程序”->“Oracle-OraDb110g_home1|Oracle installation product|Universal installer. 3.删除注册表内容。运行regedit命令,删除下面内容:HKEY_LOCAL_MACHINE|SOFTWARE|ORACLE注册表键,删除此键。 HKEY_LOCAL_MACHINE|SYSTEM|CurrentControlSet|Services,删除Services键下所有以oracle为首的键。 HKEY_LOCAL_MACHINE|SYSTEM|CurrentControlSet|Services|Eventlog|Application,删除此键下所有以oracle为首的键。 HKEY_CLASSES_ROOT,删除此键下所有以Ora,Oracle,Orcl,EnumOra 为前缀的键。 HKEY_CURRENT_USER|Software| Microsoft|Windows|CurrentVersion|Explorer|MenuOrder|Start Menu|Programs,删除此键下所有以oracle为首的键。 HKEY_LOCAL_MACHINE|SOFTWARE|ODBC|ODBCINST.INI注册表键,删除了

oracle笔记七(其他)

1.如何限定特定IP访问数据库 可以利用登录触发器、cmgw或者是在$OREACLE_HOME/network/admin下新增一个protocol.ora文件(有些os可能是. protocol.ora),9i可以直接修改sqlnet.ora: 增加如下内容: tcp.validnode_checking=yes #允许访问的ip tcp.inited_nodes=(ip1,ip2,...) #不允许访问的ip tcp.excluded_nodes=(ip1,ip2,...) 2.如何穿过防火墙连接数据库 这个问题只会在WIN平台出现,UNIX平台会自动解决。 解决方法: 在服务器端的SQLNET.ORA应类似 SQLNET.AUTHENTICATION_SERVICES= (NTS) NAMES.DIRECTORY_PATH= (TNSNAMES, ONAMES, HOSTNAME) TRACE_LEVEL_CLIENT = 16 注册表的HOME0加[HKEY_LOCAL_MACHINE] USE_SHARED_SOCKET=TRUE 3.如何利用hostname方式连接数据库 host name方式只支持tcp/ip协议的小局域网 修改listener.ora中的如下信息 (SID_DESC = (GLOBAL_DBNAME = ur_hostname) --你的机器名 (ORACLE_HOME = E:\oracle\ora92) --oracle home (SID_NAME = orcl) --sid name ) 然后在客户端 的sqlnet.ora中,确保有 NAMES.DIRECTORY_PATH= (HOSTNAME) 你就可以利用数据库服务器的名称访问数据库了 4.dbms_repcat_admin能带来什么安全隐患 如果一个用户能执行dbms_repcat_admin包,将获得极大的系统权限。 以下情况可能获得该包的执行权限: 1、在sys下grant execute on dbms_repcat_admin to public[|user_name] 2、用户拥有execute any procedure特权(仅限于9i以下,9i必须显示授权) 如果用户通过执行如下语句: exec sys.dbms_repcat_admin.grant_admin_any_schema('user_name'); 该用户将获得极大的系统特权 可以从user_sys_privs中获得详细信息

Oracle 常见函数(一)——数值函数

Oracle常见数值函数 ----***特别说明***: x 可以是纯的数值,也可以是数值型表达式/* ABS(x)返回x绝对值 eg. */ selectabs(100),abs(-100) from dual; /* sign(x)判断x的正负,正数返回1,负数返回-1,0返回0; eg. */ selectsign(100),sign(-100),sign(0) from dual;

/* round(x[,n])对x进行四舍五入,保留n位小数,其中n采用其整数部分; 没有n时默认四舍五入到整数位,n为负数时,四舍五入保留小数点左边n位(补零), eg. */ selectround(5555.6666, 2.1), round(5555.6666, -2.6), round(5555.6666) from dual; /* trunc(x)对x进行直接截取,保留n位小数,其中n采用其整数部分; 没有n时默认截取到整数位,n为负数时,截取保留小数点左边n位(补零), eg. */ selecttrunc(5555.66666,2.1), trunc(5555.66666,-2.6), trunc(5555.033333) from dual; /* ceil(x)对x进行向上取整,返回不小于x的最小整数(可以是整数x本身)。

eg. */ selectceil(3.1), ceil(2.8+1.3), ceil(0) from dual; /* floor(x)对x进行向下取整,返回不大于x的最大整数(可以是整数x本身)。eg. */ selectfloor(3.1), floor(2.8+1.3), floor(0) from dual; /* mod(x,y)求x除以y的余数,x,y为数字型表达式。 eg. */ selectmod(23,8),mod(24,8) from dual;

oracle笔记(3)

1.用insert语句进行行数据的迁移 Insert into 表名(列,列) select 列,列from emp where 条件 2.用update更新数据(使用子查询):希望员工scott的岗位,工资,补助与smith员工一样? update emp set (job,sal,comm)=(select job,sal,comm. From emp where ename=?SMITH?) where ename=?SCOTT?; 3.事务 (1)锁 (2)提交事务 (3)回退事务(一开始就做保存点(savepoint)) (4)事务的几个重要操作 1)设置保存点:savepoint a 2)取消部分事务:rollback to a 3)取消全部事务:rollback (5)只读事务:set transaction read only(当前用户能看到之前的操作,若其他用户进行更 新,该用户之后的操作都不能看到更新) (6)字符函数 (1)lower(char):将字符串转化为小写的格式 (2)upper(char): 将字符串转化为大写的格式 (3)length(char):返回字符串的长度 (4)substr(char,m,n):取字符串的子串,从m开始取,取n个 (5)例:以首字符大写的方式显示所有的员工的姓名: (1)完成首字母大写:select upper(substr(ename,1,1)) from emp; (2)完成后面字母小写:select lower(substr(ename,2,length(ename)-1)) from emp; (3)合并:select upper(substr(ename,1,1)) || lower(substr(ename,2,length(ename)-1)) from emp; (6)replace(char1,search_string,replace_string) (7)instr(char1,char2,[,n[,m]])—取子串在字符串的位置 (8)例:显示所有员工的姓名,用”我是A”替换所有”A”:select replace(ename,?A?,? 我是A?) from emp; (7)数学函数 (1)round(n,[m]):用于四舍五入 (2)trunc(n,[m]):用于截取数字 (3)mod(m,n):取模 (4)floor(n):返回<=n的最大整数 (5)ceil(n):返回>=n的最小整数 (6)例:显示在一个月为30天的情况所有员工的日薪金,忽略余数:select floor(sal/30),ename from emp; (8)日期函数 (1)sysdate (2)add_months(d,n) (3)last_day(d):返回指定日期所在月份的最后一天 例:返回在八个月前雇佣的员工(已经入职8个月多的员工):select * from emp where sysdate>add_months(hiredate,300); 例:对于每个员工,显示其加入公司的天数:select trunk(sysdate-hiredate) “入职天

Oracle学习笔记

Oracle的四个主要用户 1.超级管理员sys/change_on_install 2.普通管理员system/manager 3.普通用户scott/tiger 4.大数据用户sh/sh 简单查询 1.查询表结构 DESC 表名 2.简单查询SELECT [DISTINCT] *|[字段 [别名]] [,字段 [别名]] … FROM 表名 [别名] (1)查询时也可以使用四则运算,如:SELECT (字段*x)+y FROM 表名 (2)可以使用“||”连接字段与字符串,如: select '工作与工资:' || job || sal 工作工资 from emp 执行结果: 3.限定查询SELECT [DISTINCT] *|[字段 [别名]] [,字段 [别名]] … FROM 表名 [别名] [WHERE 条件(s)] (1)Where字句后可以增加多个条件,最常见的条件就是最基本关系运算:>、<、>=、<=、!=(<>)、BE TWEEN…AND、LIKE、IN(指定范围)、IS NULL(为空)、AND(且)、OR(或)、NOT(非)。 (2)多个条件可以使用AND与OR连接。 例如:select * from emp where sal>1300 and sal<4000 (3)范围判断BE TWEEN…AND:BETWEEN 最小值 AND 最大值(大于等于最小值,小于等于最大值),BE TWEEN…AND 对数字、日期都可以使用!!! 例如:select * from emp where sal between 1300 and 4000 例如:select * from emp where hiredate between '01-1月-1981' and '31-12月-1981' (4)判断为空IS (NOT) NULL 例如:select * from emp where comm is null 例如:select * from emp where comm is not null 例如:select * from emp where not comm is null (5)指定范围的判断(NOT) IN 例如:select * from emp where empno in(7369,7566,7799)

Oracle函数详解(经典)

Oracle常用函数/过程说明主要介绍Oracle的系统函数、过程和包。 SQL常用函数: 数值函数: ABS Purpose 返回绝对值 Returns the absolute value of n. Example SELECT ABS(-15) "Absolute" FROM DUAL; Absolute ---------- 15 CEIL Purpose 取最小整数 Returns smallest integer greater than or equal to n. Example SELECT CEIL(15.7) "Ceiling" FROM DUAL;

Ceiling ---------- 16 * MOD Syntax MOD(m,n) Purpose 取余 Returns remainder of m divided by n. Returns m if n is 0. Example SELECT MOD(11,4) "Modulus" FROM DUAL; Modulus ---------- 3 * ROUND Syntax ROUND(n[,m]) Purpose 取四舍五入信息 Returns n rounded to m places right of the decimal point; if m is omitted, to 0 places. m can be negative to round off digits left of the decimal point. m must be an integer.

学习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文件

Oracle EBSGL学习笔记

12.8 1、冲销日记账 1) 原始 借:租金10,000 本位币美元 贷:现金10,000 本位币美元 冲销 借:现金10,000 本位币美元 贷:租金10,000 本位币美元 2)可以创建冲销日记账分录来冲销应计、估计、临时调整和重新分类,或更正错误。 3)方法: 转换借贷项:通过转换借项和贷项金额来冲销日记账分录。 红字冲销:通过将原始日记账金额从正值改为负值来冲销日记账分录。 4)日记账> 输入> 复核日记账(B)其他活动 日记账> 生成> 冲销 2、自动冲销日记账 1)可以自动冲销上一个月的应计日记账分录,并自动将其过账(如果需要)。 2)自动冲销日记账的前提条件: --日记账余额类型为“实际” --日记账类型已启用“自动冲销”选项 --日记账已过帐,但尚未冲销 --日记账冲销期间为“打开”或“将来可输入” 3) 设置> 日记账> 自动冲销(AutoReverse) 3、日记账分录报表提供:会计结算日期、类别、日记账名称、参考、日记账批 4、与Oracle General Ledger 集成 --在Excel中创建日记账 --通过Web ADI 加载到GL_INTERFACE 表 --从接口表中提交“日记账导入” -从Web ADI中与加载流程同时提交 -从Web ADI 中作为独立的提交流程提交 -从Oracle General Ledger中使用“导入日记账”窗口提交 5、Web ADI 的核心功能 1)布局功能 --从布局中删除或向布局中添加字段 --指定字段在布局中的位置 --为布局中的字段分配默认值 --保存布局,可以由具有适当责任的某个人来定义,然后由整个站点使用 2) 文本导入功能 --将文本文件数据导入到桌面文档中

ORACLE常用函数和一些项目中常用的SQL语句

Oracle笔记 实现中英文转换 Alter session set nls_language=‘ADMIN’ 从已知表中复制数据和结构 Create table test as select * from dept; 从已知表中复制数据和结构,但是不包括数据 Create table test as select * from dept where 1=2 插入数据 Insert into test select * from dept 二、运算符 +——*/可以在select 语句中使用 ||连接两个字段,select deptno ||dname from dept 比较运算付:> >= = !=< <= 逻辑运算符:not ,or 集合运算符:intersect,union,union all,minus, 使用ord er by 的时候必须使用位置序号,不能使用列名 Select *from emp intersect select * from emp where deptno=10; Select *from emp minus select * from emp where deptno=10; ---不包括重复行 Select *from emp where deptno=10 union select * from emp where deptno in(10,20);----包括重复行 Select *from emp where deptno=10 union all select * from emp where deptno in(10,20); 三、常用ORACLE函数

oracle学习笔记

●PLSQL控制台输出语句 SET serveroutput ON; --打开控制台输出服务 dbms_output.put_line('values2='||var_val); --输出语句 ●PLSQL动态变量 var_str := '&input'; ●创建表空间和用户 --创建表空间 CREATE TABLESPACE "BCPBS" LOGGING DATAFILE 'D:\app\E430\oradata\orcl\BCPBS_01.ora' SIZE 2048M AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED, 'D:\app\E430\oradata\orcl\BCPBS_02.ora' SIZE 2048M AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO ; --建立用户 CREATE USER "BCPBS" PROFILE "DEFAULT" IDENTIFIED BY "bcpbs123" DEFAULT TABLESPACE "BCPBS" TEMPORARY TABLESPACE "TEMP" ACCOUNT UNLOCK; GRANT "CONNECT" TO "BCPBS"; GRANT "DBA" TO "BCPBS"; GRANT "RESOURCE" TO "BCPBS"; ●删除表空间和用户 drop user bcpbs cascade ; drop tablespace BCPBS including contents and datafiles cascade constraints ; ●自定义函数 CREATE OR REPLACE FUNCTION fun_level_value(level_value number) RETURN number IS return_value number:=null; BEGIN CASE level_value WHEN 0 THEN return_value:='0'; WHEN 1 THEN return_value:='1'; WHEN 2 THEN return_value:='2'; WHEN 3 THEN return_value:='3'; WHEN 6 THEN return_value:='8'; ELSE

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)修改表结构,添加约束

oraclesql优化笔记

基本的Sql 编写注意事项 尽量少用IN 操作符,基本上所有的IN 操作符都可以用EXISTS 代替。 不用NOT IN操作符,可以用NOT EXISTS或者外连接+替代。 Oracle 在执行IN 子查询时,首先执行子查询,将查询结果放入临时表再执行主查询。而EXIST则是首先检查主查询,然后运行子查询直到找到第一个匹配项。NOT EXISTS:匕NOT IN效率稍高。但具体在选择IN或EXIST操作时,要根据主子表数据量大小来具体考虑。 不用“<>”或者“ !=”操作符。对不等于操作符的处理会造成全表扫描,可以用“ <” or “>”代替。 Where子句中出现IS NULL或者IS NOT NULL时,Oracle会停止使用索引而执行全表扫描。可以考虑在设计表时,对索引列设置为NOT NULL这样就可以用其他操作来取代判断NULL的操作。 当通配符“ %”或者“ _”作为查询字符串的第一个字符时,索引不会被使用。 对于有连接的列“ || ”,最后一个连接列索引会无效。尽量避 免连接,可以分开连接或者使用不作用在列上的函数替代。 如果索引不是基于函数的,那么当在Where子句中对索引列使用函数时,索引不再起作用。 Where子句中避免在索引列上使用计算,否则将导致索引失效而进行全表扫描。 对数据类型不同的列进行比较时,会使索引失效。

用“ >=”替代“ >”。 UNION操作符会对结果进行筛选,消除重复,数据量大的情况 下可能会引起磁盘排序。如果不需要删除重复记录,应该使用UNION ALL。 Oracle从下到上处理Where子句中多个查询条件,所以表连接语句应写在其他Where条件前,可以过滤掉最大数量记录的条件必须写在Where子句的末尾。 Oracle从右到左处理From子句中的表名,所以在From子句中包含多个表的情况下,将记录最少的表放在最后。(只在采用RBO 优化时有效,下文详述) Order By 语句中的非索引列会降低性能,可以通过添加索引的方式处理。严格控制在Order By 语句中使用表达式。 不同区域出现的相同的Sql 语句,要保证查询字符完全相同, 以利用SGA共享池,防止相同的Sql语句被多次分析。多利用内部函数提高Sql 效率。 当在Sql 语句中连接多个表时,使用表的别名,并将之作为每列的前缀。这样可以减少解析时间。 需要注意的是,随着Oracle 的升级,查询优化器会自动对Sql 语句进行优化,某些限制可能在新版本的Oracle 下不再是问题。尤其是采用CBO (Cost-Based Optimization ,基于代价的优化方式)时。 我们可以总结一下可能引起全表扫描的操作:

oracle中常用函数大全

oracle中常用函数大全 1、数值型常用函数 函数返回值样例显示 ceil(n) 大于或等于数值n的最小整数select ceil(10.6) from dual; 11 floor(n) 小于等于数值n的最大整数select ceil(10.6) from dual; 10 mod(m,n) m除以n的余数,若n=0,则返回m select mod(7,5) from dual; 2 power(m,n) m的n次方select power(3,2) from dual; 9 round(n,m) 将n四舍五入,保留小数点后m位select round(1234.5678,2) from dual; 1234.57 sign(n) 若n=0,则返回0,否则,n>0,则返回1,n<0,则返回-1 select sign(12) from dual; 1 sqrt(n) n的平方根select sqrt(25) from dual ; 5 2、常用字符函数 initcap(char) 把每个字符串的第一个字符换成大写select initicap('mr.ecop') from dual; Mr.Ecop lower(char) 整个字符串换成小写select lower('MR.ecop') from dual; mr.ecop replace(char,str1,str2) 字符串中所有str1换成str2 select replace('Scott','s','Boy') from dual; Boycott substr(char,m,n) 取出从m字符开始的n个字符的子串select substr('ABCDEF',2,2) from dual; CD length(char) 求字符串的长度select length('ACD') from dual; 3 || 并置运算符select 'ABCD'||'EFGH' from dual; ABCDEFGH 3、日期型函数 sysdate当前日期和时间select sysdate from dual;

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常用函数及使用案例(珍藏版)

Oracle常用函数及使用案例(珍藏版) 一:sql函数: lower(char):将字符串转化为小写的格式。 upper(char):将字符串转化为大写的格式。 length(char):返回字符串的长度。 substr(char,m,n):取字符串的字串。 案例1.将所有员工的名字按小写的方式显示 select lower(ename),sal from emp; 案例2.将所有员工的名字按大写的方式显示。 select upper(ename),sal from emp; 案例3.显示正好为五个字符的的员工的姓名。 select * from emp where length(ename)=5; 案例4.显示所有员工姓名的前三个字符。 select substr(ename,1,3) from emp;//从名字的第一个字符开始取,向后取三个字符。 案例5.以首字母为大写的方式显示所有员工的姓名。 (1)首字母大写:select upper(substr(ename,1,1)) from emp; (2)完成后面字母小写。select lower(substr(ename,2,length(ename)-1)) from emp; (3)合并select upper(substr(ename,1,1))||lower(substr(ename,2,length(ename)-1)) from emp; 案例6.以首字母为小写的方式显示所有员工的姓名。(需要有较高的灵活度,细心分析和清晰思路) (1)首字母小写:select upper(substr(ename,1,1)) from emp; (2)完成后面字母大写。select lower(substr(ename,2,length(ename)-1)) from emp; (3)合并select lower(substr(ename,1,1))||upper(substr(ename,2,length(ename)-1)) from emp; 案例7.函数(替换):replace(char1,search_string,replace_string); 显示所有员工的姓名,用“我要替换A”替代所有“A”。 select replace(ename,'A','我是老鼠')from emp; 案例8.以首字母为小写的方式显示所有员工的姓名。 select replace(ename,substr(ename,1,1),lower(substr(ename,1,1)))from emp; 案例9.以首字母为大写的方式显示所有员工的姓名。 Select replace(ename,substr(ename,2,length(ename)-1),lower(substr(ename,2,length(ename) -1)))from emp; 二:数学函数:(在财务中用的比较多) ronud(sal)用于四舍五默认取整; ronud(sal,1)用于四舍五留一位小数。 trunc(sal)取整,忽略小数。截去小数部分。 trunc(sal,1)截取;小数点留一位,之后的右边的省去。 trunc(sal,-1)截取;只留整数,个位数取零。 floor(sal)向下最接近取整;比如1.1值为1.

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数据库中的表。

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