ORACLE 日常积累脚本

发布 2021-05-03 02:07:28 阅读 7472

目录。1.0 oltp olat 1

数据处理大致可以分成两大类:

联机事务处理oltp(on-linetransactionprocessing)、联机分析处理olap(on-lineanalyticalprocessing)。

oltp:是传统的关系型数据库的主要应用,主要是基本的、日常的事务处理,例如银行交易;

系统强调数据库内存效率,强调内存各种指标的命令率,强调绑定变量,强调并发操作;

olap:是数据仓库系统的主要应用,支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果;

系统则强调数据分析,强调sql执行市场,强调磁盘i/o,强调分区等。

oltp与olap之间的比较:

什么是oltp

oltp,也叫联机事务处理(onlinetransactionprocessing),表示事务性非常高的系统,一般都是高可用的**系统,以小的事务以及小的查询为主,评估其系统的时候,一般看其每秒执行的transaction以及executesql的数量。在这样的系统中,单个数据库每秒处理的transaction往往超过几百个,或者是几千个,select语句的执行量每秒几千甚至几万个。典型的oltp系统有电子商务系统、银行、**等,如美国ebay的业务数据库,就是很典型的oltp数据库。

oltp系统最容易出现瓶颈的地方就是cpu与磁盘子系统。

1)cpu出现瓶颈常表现在逻辑读总量与计算性函数或者是过程上,逻辑读总量等于单个语句的逻辑读乘以执行次数,如果单个语句执行速度虽然很快,但是执行次数非常多,那么,也可能会导致很大的逻辑读总量。设计的方法与优化的方法就是减少单个语句的逻辑读,或者是减少它们的执行次数。另外,一些计算型的函数,如自定义函数、decode等的频繁使用,也会消耗大量的cpu时间,造成系统的负载升高,正确的设计方法或者是优化方法,需要尽量避免计算过程,如保存计算结果到统计表就是一个好的方法。

2)磁盘子系统在oltp环境中,它的承载能力一般取决于它的iops处理能力。因为在oltp环境中,磁盘物理读一般都是dbfilesequentialread,也就是单块读,但是这个读的次数非常频繁。如果频繁到磁盘子系统都不能承载其iops的时候,就会出现大的性能问题。

oltp比较常用的设计与优化方式为cache技术与b-tree索引技术,cache决定了很多语句不需要从磁盘子系统获得数据,所以,webcache与oracledatabuffer对oltp系统是很重要的。另外,在索引使用方面,语句越简单越好,这样执行计划也稳定,而且一定要使用绑定变量,减少语句解析,尽量减少表关联,尽量减少分布式事务,基本不使用分区技术、mv技术、并行技术及位图索引。因为并发量很高,批量更新时要分批快速提交,以避免阻塞的发生。

oltp系统是一个数据块变化非常频繁,sql语句提交非常频繁的系统。对于数据块来说,应尽可能让数据块保存在内存当中,对于sql来说,尽可能使用变量绑定技术来达到sql重用,减少物理i/o和重复的sql解析,从而极大的改善数据库的性能。

这里影响性能除了绑定变量,还有可能是热快(hotblock)。当一个块被多个用户同时读取时,oracle为了维护数据的一致性,需要使用latch来串行化用户的操作。当一个用户获得了latch后,其他用户就只能等待,获取这个数据块的用户越多,等待就越明显。

这就是热快的问题。这种热快可能是数据块,也可能是回滚端块。对于数据块来讲,通常是数据库的数据分布不均匀导致,如果是索引的数据块,可以考虑创建反向所以来达到重新分布数据的目的,对于回滚段数据块,可以适当多增加几个回滚段来避免这种争用。

1 oracle对时间格式的数据存贮。

oracle数据库中存放时间格式的数据,是以oracle特定的格式存贮的,占7个字节,与查询时显示的时间格式无关,具体哪个字节表示什么,我不太清楚,请高手补充。存贮的时间包括年月日时分秒,最小精度为秒,不存贮秒以下的时间单位。因此在一些前台支持毫秒级的程序(如pb客户端程序)连接到 oracle数据库时应注意这点。

查询时显示的时间格式,由会话环境决定,或者由用户定义,与数据库无关。

2 oracle时间显示形式。

通常,客户端与数据库建立起连接后,oracle就会给一个缺省的时间格式数据的显示形式,与所使用的字符集有关。一般显示年月日,而不显示时分秒。例如,使用us7ascii字符集(或者是其他的英语字符集)时,缺省的时间格式显示为:

28-jan-2003,而使用zhs16gbk字符集(或其他中文字符集)时时间格式缺省显示为:2003-1月-28.向表中插入数据时,如果不使用转换函数,则时间字段的格式必须遵从会话环境的时间格式,否则不能插入。

查看当前会话的时间格式,可以使用以下的sql语句:sql> select sysdate from dual;(只能按照此语句的结果,才能插入数据)

3 向oracle表中插入时间格式的数据。

向oracle表插入时间格式的数据是一个相对来讲比较麻烦的事情,要么你严格遵从当前会话的时间格式书写你的时间值,要么使用转换函数自定义时间数据的格式。有两个与时间相关的转换函数:to_char 和 to_date .

to_char(时间值,时间格式)函数将时间值转换为字符串形式,通常在查询中使用;to_date(字符串,时间格式)则把格式字符串转换时间值, 通常在insert 语句中使用。(呵呵,程序中没这样做,所以出错)在日期格式中,各种日期格式分量这里不作详细的讨论,请查oracle帮助文档中这两个函数的用法,或者查一查pl/sql编程的书,讲得很详细的。

4 如何修改会话中的日期格式。

修改当前会话中的日期格式据说有三种办法,我只做过前两种办法的试验,修改文件的办法我没有试过,不知道是不是真的能行。下面一一解说。

(1) 在sql*plus中修改当前会话的日期格式sql> alter session set nls_date_format = yyyy-mm-dd hh24:mi:ss';将当前会话的时间格式修改为这种格式:

2003-01-28 15:23:38,即四位年-两位月-两位日,空格,24小时的制的小时:

分钟:秒。

这种修改方法,只对当前会话有效。注意,是对当前会话,而不是当前的sql*plus窗口。即如果你这样修改之后,又使用connect命令以其他用户连接到数据库或者是连接到其他的数据库,则这个日期格式就失效了,又恢复到缺省的日期格式。

(2) 修改注册表(只对windows系统)

在注册表hkey_local_machinesoftwareoraclehome0主键中增加一个字串(8i版本,9i也可以),字串名为 nls_date_format,字串的值为你希望定义的时间格式,如: yyyy-mm-dd hh24:mi:

ss ,然后重新启动sql*plus.这种修改方法,对sql*plus窗口有效,即不论你打开多少个sql*plus窗口,缺省的都是这种时间格式。修改服务器端的注册表无效,只有修改客户端的注册表才有效。

unix系统下有没有这类似的方法,我不知道,我不会用unix或者是linux系统。

(3) 修改$oracle_homesqlplusadmin目录中文件这种方法我没有试过,不敢乱说,以免误导大家。请了解这种方法的高手来指教。

5 日期格式的优先级。

如果在一个具体的环境中,既修改了注册表,又使用alter session命令修改了当前会话,那么哪一种修改方法有效呢?alter session命令有效,它的优先级是最高的。即不管当前的客户端环境是什么样的,注册表修改成什么样子了,只要你使用了alter session命令来修改了时间格式,那么就以你修改后的时间格式为准。

因此,如果直接使用sql*plus交互式查询或插入时间格式的数据,两种方法都可以用。如果使用sql文件来进行批量的插入或者是定时执行,最好在使用时间数据前使用alter session命令来修改会话,以保证这个sql语句的正常运行与环境无关。同样的,如果是前台的客户端程序中需要使用到时间格式的数据,最好也在使用之前修改会话,或者使用to_char或to_date函数进行转换(强烈推荐使用转换函数),以保证程序运行与环境无关。

add_months(d,n) 用于返回特定日期时间d之后(或之前)的n个月所对应的日期时间(n为正整数表示之后)

current_date 用于返回当前会话时区所对应的日期时间。

current_timestamp 用于返回当前会话时区的日期时间。

dbtimesone 用于返回数据库所在时区。

extract 用于从日期时间值中取得所需的特定数据(如取得年份,月份等) select extract(year from sysdate) from dual

from_tz 用于将特定时区的timestamp值转变为timestamp with time zone 值。

last_day(d) 用于返回特定日期所在的月份的最后一天。

localtimestamp 用于返回当前会话时区的日期时间。

months_between(d1,d2) 用于返回日期d1和d2之间相差的月数。如果d1小于d2返回负数。如果d1,d2和天数相同或都是月底 ,则返回整数,否则oracle以每月31天为准来计算结果的小数部分。

new_time(date,zone1,zone2) 用于返回时区一的日期时间所对应的时区二的日期时间。

next_day(d,char) 用于返回指定日期后的第一个工作日(由char指定)所对应的日期 select next_day(sysdate,'月曜日') from dual

numtodsinternal(n,char_expr)用于将数字n转换为interval day to second 格式,其中char_expr可以是day,hour,minute或second

numtoyminternal(n,chr_expr) 用于将数字n转换为interval year to month格式,其中可以是year或month

round(d,[,fmt]) 用于返回日期时间的四舍五入结果,如果fmt指定年度,则7月1为分界线如果fmt指定月,则16日为分界线,如果指定天,则中午12:00为分界线。

注重日常积累

注重日常积累享受习作乐趣。作者 付庆玲。写作 中旬 2016年第05期。摘要 如今,孩子依然惧怕作文,测试时,作文成了失分的重点。甚至一些同学连提笔写作文的勇气都没有,每个格子都空着,而这也是我们做语文老师的一千个一万个不乐意。怎么样让学生丢掉惧怕,爱上阅读,爱上写作呢?围绕学校正在进行的 单元主题...

小学英语日常积累

一。单词归类。1.名词。postcard kilometer mexico canada restaurant the greatwall 明信片公里墨西哥加拿大饭馆长城。dancing square stamp hobby man men 舞蹈广场邮票业余爱好男人。woman women fest...

日常积累作文素材

1 潜能。引言。昙花用一年的默默酝酿,才换来一夜的风姿绰约 蝉虫用四年的地下修练,才换来四周的放声高歌 企鹅用竭尽全力的沉潜,才换来迅猛的腾空而起 自然现象向我们透示着一个哲理 沉潜是绚烂前的孕育,沉潜是高亢前的酝酿,沉潜是腾飞前的蓄势。在被动不利的形势下,采用沉潜的策略,往往能化被动为主动,变不利...