当前位置:  数据库>其它
本页文章导读:
    ▪OCP/OCA认证考试资料及工具软件分享      OCP认证考试资料及工具分享  由于上传权限不高,所以把pdf分成4个包了. OCP/OCA认证考试指南全册 ORACLE 11G(1Z0-051,1Z0-052,1Z0-053 第一部分 OCP/OCA认证考试指南全册 ORACLE 11G(1Z0-051,1Z0-052.........
    ▪序列      一、什么是序列 序列像表、视图一样,被称为数据库对象,它可以产生1、2、3、4……等等顺序增加的有序数。当然,也可以是1,3,5,7……,也可以由大到小。只要是有序数列,都可以有序.........
    ▪第三章——使用系统函数、存储过程和DBCC SQLPERF命令来监控SQLServer(1)      忘了说明:本系列文章出自《Microsoft SQL Server 2012 Performance Tuning Cookbook》,将会陆续推出译文,但是由于工作需要,没有按顺序贴出来。 本系列文章包含三部分: 1、  使用系统统计函数.........

[1]OCP/OCA认证考试资料及工具软件分享
    来源: 互联网  发布时间: 2013-11-07

OCP认证考试资料及工具分享 

由于上传权限不高,所以把pdf分成4个包了.


OCP/OCA认证考试指南全册 ORACLE 11G(1Z0-051,1Z0-052,1Z0-053 第一部分

OCP/OCA认证考试指南全册 ORACLE 11G(1Z0-051,1Z0-052,1Z0-053 第二部分

OCP/OCA认证考试指南全册 ORACLE 11G(1Z0-051,1Z0-052,1Z0-053 第三部分

OCP/OCA认证考试指南全册 ORACLE 11G(1Z0-051,1Z0-052,1Z0-053 第四部分


MasterExam模拟考试引擎


作者:qm4050 发表于2013-2-26 17:41:16 原文链接
阅读:0 评论:0 查看评论

    
[2]序列
    来源: 互联网  发布时间: 2013-11-07
一、什么是序列
序列像表、视图一样,被称为数据库对象,它可以产生1、2、3、4……等等顺序增加的有序数。当然,也可以是1,3,5,7……,也可以由大到小。只要是有序数列,都可以有序列产生。下面我们看一下序列的创建和使用。


二、序列的创建
序列的创建语法如下:
CREATE SEQUENCE 序列名
[INCREMENT BY n]
[START WITH n]
[{MAXVALUE n | NOMAXVALUE}]
[{MINVALUE n | NOMINVALUE}]
[{CYCLE | NOCYCLE}]
[{CACHE n | NOCACHE}];
INCREMENT BY n :序列增量,这里的n取值是一个整数。如果n为2,序列将已2为单位自增,比如1,3,5,7……。如果省略此子句,默认的自增量将是1。
START WITH n :序列的起始值。默认为1。
MAXVALUE n | NOMAXVALUE :MAXVALUE n是序列的最大值。NOMAXVALUE是系统自定最大值,通常升序的最大值ORACLE将会设为10的27次方,降序的最大值是-1。
MINVALUE n | NOMINVALUE : MINVALUE n序列的最小值。NOMINVALUE和上面的选项一样,是系统自定最小值。升序的最小值是1。降序的是负的10的26次方,即-(10的26次方)。
CYCLE | NOCYCLE :在序列到“头”后,也就是达到最大值、或最小值后,是否又回到序列的起始值。
CACHE n | NOCACHE :CACHE n 的作用是ORACLE事先生成n个序列数,保存在内存中,等用户需要时取用。NOCACHE不在内存中事先生成序列数,每次用户使用到序列的下一个数时,当场为用户生成。这样的速度不如CACHE n快。CACHE n是按序列的顺序,一次生成多个数,放在内存中,等待用户取用。NOCACHE是用一个生成一个。ORACLE的默认值,是CACHE 20。也就是在缓存中一次生成20个序列数供用户取用。
以上就是序列的创建语法,下面我们创建一个从5开始,每次增加1,最大值是 20的序列:
gyj@OCM> create sequence seq_prepay
  2  minvalue 3
  3  maxvalue 20
  4  start with 5
  5  increment by 1
  6  nocycle;


Sequence created.


有一个数据字典视图,可以显示用户创建的序列信息:
gyj@OCM> select sequence_name,min_value,max_value, increment_by,last_number from user_sequences;


SEQUENCE_NAME                   MIN_VALUE  MAX_VALUE INCREMENT_BY LAST_NUMBER
------------------------------ ---------- ---------- ------------ -----------
SEQ_PREPAY                              3         20            1           5
这些列的意义都非常简单。注意序列名,无论你创建时对象名是小写还是大写,ORACLE统统都会转换为大写。LAST_NUMBER列我们暂时还没有用到,一会儿再说这个列的意义。


三、序列使用
序列已经创建好了,如何从序列中生成顺序的数呢?
序列名.NEXTVAL ,让序列自增,并取得自增后的值。
序列名.CURRVAL ,序列不自增,仅取得序列的当前值。
注意在序列刚刚建成后,在数据库仅存有序列的定义,还没有生成任何序列数,这时不能调用CURRVAL,例如,我的seq_prepay刚刚建成:
gyj@OCM> select seq_prepay.currval from dual;
select seq_prepay.currval from dual
       *
ERROR at line 1:
ORA-08002: sequence SEQ_PREPAY.CURRVAL is not yet defined in this session


这个错误的意思就是序列的值还没有生成。下面我调用NEXTVAL一次:
gyj@OCM>  select seq_prepay.nextval from dual;


   NEXTVAL
----------
         5
序列已经有了第5个值,再调用CURRVAL也可以有结果了:
gyj@OCM> select seq_prepay.currval from dual;


   CURRVAL
----------
         5
CURRVAL你无论调用多少次,不会引起序列的自增,我可以再显示一次CURRVAL,显示的结果还是5。但是,每调用一次NEXTVAL,序列都会自增一次,并返回自增结果,seq_prepay序列当前是5,我再次调用NEXTVAL,序列的值将变为6:
gyj@OCM> select seq_prepay.nextval from dual;


   NEXTVAL
----------
         6
每次自增1。这时再调用CURRVAL,值将变为6。seq_prepay序列是NOCYCLE,即当达到最大值后不绕回,下面我们多调用NEXTVAL几次,seq_prepay的最大值是20,当达到序值为20后,再次调用NEXTVAL将会报出如下错误:
gyj@OCM> select seq_prepay.nextval from dual;
select seq_prepay.nextval from dual
*
ERROR at line 1:
ORA-08004: sequence SEQ_PREPAY.NEXTVAL exceeds MAXVALUE and cannot be instantiated
如果序列设置为CYCLE,此时序列的值将会又变回1,这就是绕回,不会报出错误。
我们已经看到了序列的使用,那么,序列都可以用在什么地方呢?我们可以把序列的NEXTVAL或CURRVAL放在INSERT的VALUES中,把序列值插入进表,也可以放在UPDATE set后,用序列值更新表。序列也就是可以放在这些地方了。能够使用序列的地方并不多,在WHERE中,在创建表的DEFAULT中,等等,除了上面我们所提到的,其他地方都不能使用序列。


四、修改序列
Oracle中所有修改元数据的命令,都是以ALTER开头,序列也不例外。修改序列的命令是:
ALTER SEQUENCE 序列名 各选项 。
除了START WITH不能修改外,创建序列时,其他所有的选项都可以修改。例如,我将seq_prepay序列改为可绕回:
gyj@OCM> alter sequence seq_prepay cycle nocache;


Sequence altered.


再调用NEXTVAL,已经绕回到最小值3,而不是起始值5了:
gyj@OCM> select seq_prepay.nextval from dual;


   NEXTVAL
----------
         3
在修改序列定义时,对序列自增的改变,只会对新产生的值生效,对已经产生过的值无效。


五、序列的空隙
序列通常都是按顺序生成,比如上面的seq_prepay,按5、6、7,…… 的顺序,通常不会将谁跳过去。但有种情况下,可能会出现你本次调用NEXTVAL时,序列值是6,下一次再调用NEXTVAL时,却变为10了。7、8、9、都被跳了过去,这就是序列中的空隙。
空隙的原因,很大程度是上CACHE引起的。
假设刚刚将CACHE 设为4 ,序列当前值是5,下一次调用NEXTVAL时,返回值是6,但同时,ORACLE会自动的沿着序列的顺序,生成7、8、9 、10三个序列值。并将这4个值放进缓存中。5已经被调取了,下一次调用NEXTVAL时,将到缓存中把6取出,再下一次到缓存中取7。7之后再调用NEXTVAL,。。。一直调到10将再次生成4个值,存进缓存中。这样做的目的,是为了加快序列生成顺序数的效率,但这可能会生成空隙。比如说现在序列值是6,在缓存中有6、7、8、9四个序列值,这四个值已经生成了。如果此时停电了,内存中的数据被清空了。再次启动数据库后,调用NEXTVAL将返回10,因为7、8、9这3个值刚才已经生成过了。下面我们试一下:
步1:确认当前序列值是5
gyj@OCM> select seq_prepay.nextval from dual;


   NEXTVAL
----------
         5


步2:将CACHE设为4


gyj@OCM> alter sequence seq_prepay cache 4;


Sequence altered.




步3:再次调用NEXTVAL
gyj@OCM> select seq_prepay.nextval from dual;


   NEXTVAL
----------
         6
虽然NEXTVAL显示当前序列的值为6,但我们可以通过USER_SEQUENCES中的last_number列,看到序列的下一个值应该是什么:
gyj@OCM> select sequence_name,min_value,max_value, increment_by,last_number from user_sequences;


SEQUENCE_NAME                   MIN_VALUE  MAX_VALUE INCREMENT_BY LAST_NUMBER
------------------------------ ---------- ---------- ------------ -----------
SEQ_PREPAY                              3         20            1          10


应该是10了。这就是CACHE在起的作用。也就是说序列的当前值已经是10了。缓存了6、7、8、9四个


步4:登录具有特殊权限的用户,以最突然的方式关闭数据库,再打开数据库。
sys@OCM> conn / as sysdba
Connected.
sys@OCM> shutdown abort;
ORACLE instance shut down.
sys@OCM> startup
ORACLE instance started.


Total System Global Area 1071333376 bytes
Fixed Size        
    
[3]第三章——使用系统函数、存储过程和DBCC SQLPERF命令来监控SQLServer(1)
    来源: 互联网  发布时间: 2013-11-07

忘了说明:本系列文章出自《Microsoft SQL Server 2012 Performance Tuning Cookbook》,将会陆续推出译文,但是由于工作需要,没有按顺序贴出来。

本系列文章包含三部分:

1、  使用系统统计函数(system statistical functions)来监控系统健康程度。

2、 使用系统存储过程来监控SQLServer进程和会话。

3、  使用DBCC SQLPERF命令来监控日志空间使用情况。

 

前言:

         SQLServer提供了一些系统函数、系统存储过程和DBCC命令来分析SQLServer性能相关的问题,不过绝大部分这些工具所获得的信息都可以通过DMVs和DMFs来获得。很多人依旧使用本文的工具的原因是因为他们长期使用这些工具来监控SQLServer,已经成为了一个习惯,所以为了向后兼容,微软依旧保留这些工具,但是建议新入门的人尽可能从DMO(DMVs和DMFs的统称)中获取信息。

 

      性能监控有很多工具,SQL Profiler、扩展事件、DMO及本系列文章提供的工具等,来获取信息,对于简单的性能问题,使用某一种即可,但是对于复杂的性能问题,往往需要多个工具协同使用。

 

下面先介绍使用系统统计函数来监控SQLServer的健康程度。

 

使用系统统计函数来监控SQLServer

 

        SQLServer提供了一些列非常有用的系统统计函数来监控当前SQLServer的状态。这些函数用于检查和监控服务器的健康状态非常有效。

 

       现在假设一个情况,在你的数据库环境中,一个web应用程序对数据集的操作是一行一行的。为了读取每一行,应用程序会在数据库中往返访问,导致经常需要开启新的连接。为了处理这个问题,需要经常监控SQLServer的连接数,下面将演示如何操作。

 

准备工作:

 

SQLServer提供了下面这些有用的系统函数:

 

@@CONNECTIONS

@@TIMETICKS

@@CPU_BUSY

@@IDLE

@@IO_BUSY

@@PACK_RECEIVED

@@PACK_SENT

@@PACKET_ERRORS

@@TOTAL_READ

@@TOTAL_WRITE

@@TOTAL_ERRORS


 

本例子中将使用这些函数,并创建脚本来获取信息。

 

环境准备:

 

使用SQLServer2008企业版(本机只有企业版)和示例数据库AdventureWorks。

 

步骤:

 

1、  打开SQLServer(这里使用SQLServer Management Studio后面简称SSMS),然后新开一个查询窗口(ctrl+m)。

 

2、  在窗口上输入一下脚本:

 

--创建一个表来存储统计信息
IF OBJECT_ID('[dbo].[tbl_ServerHealthStatistics]') IS NULL 
    BEGIN
        CREATE TABLE [dbo].[tbl_ServerHealthStatistics]
            (
              ID INT IDENTITY(1, 1) ,
              StatDateTime DATETIME DEFAULT GETDATE() ,
              TotalConnections INT ,
              TimeTicks INT ,
              TotalCPUBusyTime INT ,
              TotalCPUIdleTime INT ,
              TotalIOBusyTime INT ,
              TotalReceivedPackets INT ,
              TotalSentPackets INT ,
              TotalErrorsInNetworkPackets INT ,
              TotalPhysicalReadOperations INT ,
              TotalWriteOperations INT ,
              TotalReadWriteErrors INT
            )
    END
GO 

--收集信息到表中
INSERT  INTO [dbo].[tbl_ServerHealthStatistics]
        ( TotalConnections ,
          TimeTicks ,
          TotalCPUBusyTime ,
          TotalCPUIdleTime ,
          TotalIOBusyTime ,
          TotalReceivedPackets ,
          TotalSentPackets ,
          TotalErrorsInNetworkPackets ,
          TotalPhysicalReadOperations ,
          TotalWriteOperations ,
          TotalReadWriteErrors 
        )
        SELECT  @@CONNECTIONS TotalConnections ,
                @@TIMETICKS TimeTicks ,
                @@CPU_BUSY TotalCPUBusyTime ,
                @@IDLE TotalCPUIdleTime ,
                @@IO_BUSY TotalIOBusyTime ,
                @@PACK_RECEIVED TotalReceivedPackets ,
                @@PACK_SENT TotalSentPackets ,
                @@PACKET_ERRORS TotalErrorsInNetworkPackets ,
                @@TOTAL_READ TotalPhysicalReadOperations ,
                @@TOTAL_WRITE TotalWriteOperations ,
                @@TOTAL_ERRORS TotalReadWriteErrors


 

3、运行下面脚本,显示收集的服务器信息:

 

WITH    cteStatistics
          AS ( SELECT   *
               FROM     [dbo].[tbl_ServerHealthStatistics]
             )
    SELECT  Cur.TotalConnections AS CurrentConnections ,
            Cur.StatDateTime AS CurrentStatDateTime ,
            Prev.TotalConnections AS PreviousConnections ,
            Prev.StatDateTime AS Previous_StatDateTime ,
            Cur.TotalConnections - Prev.TotalConnections AS ConnectionsIncreamentedBy ,
            DATEDIFF(millisecond, Prev.StatDateTime, Cur.StatDateTime) AS ConnectionsIncreamentedIn
    FROM    cteStatistics AS Cur
            LEFT JOIN cteStatistics AS Prev ON Cur.ID = Prev.ID + 1


 

分析:

        上面例子中,先创建一个表[dbo].[tbl_ServerHealthStatistics],在创建之前,使用OBJECT_ID()函数来检查是否存在该表,如果存在则不创建,这是一个良好的编程习惯,建议在创建表(无论是实体表还是临时表)时使用。可以确保脚本可重复执行。

 

        步骤2的脚本中,通过INSERT..SELECT语句来收集数据并插入到表中。

 

        步骤3中,由于需要对比两行之间的数据,所以使用CTE(2005之前可以使用临时表)来暂时存放数据然后与目前数据做对比。

 

 

扩展信息:

 

下面是这些系统统计函数的简介,这些函数

    
最新技术文章:
▪gc buffer busy/gcs log flush sync与log file sync    ▪让你的PL/SQL更好用    ▪ADO.NET中的非脱机数据库查询
▪参数job_queue_processes与Oracle jobs    ▪11gR2游标共享新特性带来的一些问题以及_cursor...    ▪_library_cache_advice和latch:shared pool、latch:shared poo...
▪SQL: Date Utility    ▪DB2 分区表增加分区    ▪DB2第一步 — 创建表
▪oracle 数据库    ▪插入10万条记录测试    ▪rebuild index VS. rebuild index online
▪如何处理undo tablespace 表空间太大的问题    ▪ado执行存储过程中包含结果集获取输出参数为...    ▪oracle函数的demo
▪Entity Framework 学习建议及自学资源    ▪存储过程的编写    ▪Linux/Unix shell 自动发送AWR report(二)
▪第二章 Oracle恢复内部原理(基础数据结构)    ▪Redis源码学习之【Tcp Socket封装】    ▪Java Jdbc减少与Oracle之间交互提升批量处理性能...
▪南大通用GBase8a Vs Oracle11g 单机测试亲测    ▪oracle 中行列转换    ▪rhel下安装oracle10g+asm---测试环境搭建
▪Redis系列-主从复制配置    ▪MySQL索引与查询优化    ▪INDEX受到NULL值的影响
▪测试人员的SQL语言 系列    ▪SQL数据库基本语句    ▪MySQL Replication常见错误整理[持续更新...]
▪eclipse下建立esper的demo    ▪把oracle rac 转化为单机数据库    ▪Redis系列-存储篇sorted set主要操作函数小结
▪基本的SQL*Plus报表和命令    ▪druid简单教程    ▪11g调度--scheduler使用
▪EF基础一    ▪db2存储过程中循环语句while do的continue有没有...    ▪oracle 创建DBLINK
▪DB2数据库备份还原    ▪Warning: prerequisite DBD::mysql 1 not found错误解决方...    ▪innotop性能监视mysql,innodb工具
▪数据迁移:DataGuard配置    ▪QX项目实战-19.跨库数据同步    ▪Mysql EXPLAIN
▪Oracle 11g AWR 系列七:Active Session History (ASH) 报...    ▪Oracle 11G新特性(共36个)    ▪父子节点问题
▪OEM简介及按钮乱码问题    ▪NoSql之MongoDB的常用类管理    ▪ORA-39700: database must be opened with UPGRADE option
▪node.js 访问redis数据库,pub/sub    ▪使用DBMS_REDEFINITION在线重定义分区表    ▪SQL Developer 使用问题与解决方法汇总
▪oralce 11g dataguard 概念    ▪ORA-30004 错误处理    ▪oracle分组函数rollup,cube
▪Sql Developer 使用问题与解决方法汇总    ▪Configure Oracle Dataguard Primary-ASM to Physical-ASM    ▪Oracle Data Guard 理论知识
▪Control File 恢复    ▪Oracle数据文件收缩    ▪Oracle 11g AWR 系列五:如何生成 AWR 报告?
▪Wireshark数据包分析实战(第2版)    ▪MySql用户权限控制    ▪db2和oracle查询序列区别
▪更新blob字段的存储过程    ▪MySQLReport分析报告三    ▪DB2中的序列
▪Oracle中DBMS_RANDOM.STRING 的用法    ▪SQL SERVER无法安装成功,sqlstp.log文件提示[未发...    ▪Data Guard 部署物理备库的 10 大注意事项
▪万能数据库查询分析器使用技巧之(九)    ▪SQL 自定义Split函数    ▪视图 v$sql,v$sqlarea,$sqltext,v$sqltext_with_newlines 的...
▪Data Guard Standby_archive_dest 和 Log_archive_dest_n 的...    ▪机房收费系统数据库设计(一)    ▪利用putty的SSH tunnel连接Oracle
▪DBCA建库偶遇ORA-27125    ▪使用PowerPivot建立简单的分析模型    ▪Linux/Unix shell 自动发送AWR report
▪写入到blob字段的存储过程    ▪关于JDBC中ResultSet接口的一点细节探究    ▪Data Guard 配置 Standby Redo Log
▪linux下redis的安装    ▪windows下redis的安装    ▪手动创建数据库步骤(简单翻译官方文档)
▪Ubuntu安装Mongodb    ▪SQL CLR应用    ▪redis的配置文件参数--详细说明
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3