摘要: 一.相关的概念 Rowid的概念:rowid是一个伪列,既然是伪列,那么这个列就不是用户定义,而是系统自己给加上的。 对每个表都有一个rowid的伪列,但是表中并不物理存储ROWID列的值。不过你可以像使用其它列那样使用它,但是不能删除改列,也不能对该列的值进行 修改、插入。一旦一行数据插入数据库,则rowid在该行的生命周期内是唯一的,即即使该行产生行迁移,行的rowid也不会改变。 Recursive SQL概念:有时为了执行用户发出的一个sql语句,Oracle必须执行一些额外的语句,我们将这些额外的语句称之为''recursive calls''或 阅读全文
posted @ 2011-09-17 22:30 老猫-DB 阅读(879) 评论(0) 推荐(0) 编辑
摘要: 4、归档日志文件 Oracle可以运行在两种模式之中,归档模式和不归档模式。如果不用归档模式,当然,你就不会有归档日志,但是,你的系统将不会是一个实用系统,特别是不能用于生产系统,因为你可能会丢失数据。但是在归档模式中,为了保存用户的所有修改,在重做日志文件切换后和被覆盖之间系统将他们另外保存成一组连续的文件系列,该文件系列就是归档日志文件。 有人或许会说,归档日志文件占领我大量的硬盘空间,其实,具体想一想,你是愿意浪费一点磁盘空间来保护你的数据,还是愿意丢失你的数据呢?显而义见,我们需要保证我们的数据的安全性。其实,归档并不是一直占领你的磁盘空间,你可以把她备份到磁带上,或则删除上一次完整备 阅读全文
posted @ 2011-09-17 22:29 老猫-DB 阅读(165) 评论(0) 推荐(0) 编辑
摘要: 3、区间(Extent) 关于Extent的翻译有多种解释,有的译作扩展,有的译作盘区,我这里通常译为区间。在一个段中可以存在多个区间,区间是为数据一次性预留的一个较大的存储空间,直到那个区间被用满,数据库会继续申请一个新的预留存储空间,即新的区间,一直到段的最大区间数(Max Extent)或没有可用的磁盘空间可以申请。 在ORACLE8i以上版本,理论上一个段可以无穷个区间,但是多个区间对ORACLE却是有性能影响的,ORACLE建议把数据分布在尽量少的区间上,以减少ORACLE的管理与磁头的移动。 4、Oracle数据块(Block) ORACLE最基本的存储单位,他是OS数据块的整数倍 阅读全文
posted @ 2011-09-17 22:29 老猫-DB 阅读(152) 评论(0) 推荐(0) 编辑
摘要: j、用户进程User Process 在客户端,将用户的SQL 语句传递给服务进程 5、一个贯穿数据库全局的概念----系统改变号SCN(System Change Number) 系统改变号,一个由系统内部维护的序列号。当系统需要更新的时候自动增加,他是系统中维持数据的一致性和顺序恢复的重要标志。 a. 查询语句不会使SCN增加,就算是同时发生的更新,数据库内部对应的SCN也是不同的。这样一来就保证了数据恢复时候的顺序。 b. 维持数据的一致性,当一 二、ORACLE 数据库 ORACLE数据库的组成——物理操作系统文件的集合。主要包括以下几种。 1、控制文件(参数文件init.ora记录了 阅读全文
posted @ 2011-09-17 22:28 老猫-DB 阅读(181) 评论(0) 推荐(0) 编辑
摘要: 提交的时候,LGWR必须将被修改的数据的重做日志缓冲区内数据写入日志数据文件,然后再通知前台进程提交成功,并由前台进程通知用户。从这点可以看出LGWR承担了维护系统数据完整性的任务。 LGWR 工作的主要条件如下 用户提交 有1/3 重做日志缓冲区未被写入磁盘 有大于1M 重做日志缓冲区未被写入磁盘 超时 DBWR需要写入的数据的SCN号大于LGWR 记录的SCN号,DBWR 触发LGWR写入 d、SMON 工作主要包含 清除临时空间 在系统启动时,完成系统实例恢复 聚结空闲空间 从不可用的文件中恢复事务的活动 OPS中失败节点的实例恢复 清除OBJ$表 缩减回滚段 使回滚段脱机 e、PMON 阅读全文
posted @ 2011-09-17 22:27 老猫-DB 阅读(242) 评论(0) 推荐(0) 编辑
摘要: 在本章里你可以了解以下内容 1、 Oracle 实例——包括内存结构与后台进程 2、 ORACLE 数据库——物理操作系统文件的集合 3、 了解内存结构的组成 4、 了解后台进程的作用 5、 了解数据库的物理文件 6、 解释各种逻辑结构 一、ORACLE实例 1、ORACLE 实例 System Global Area(SGA) 和 Background Process 称为数据库的实例。 2、ORACLE 数据库 一系列物理文件的集合(数据文件,控制文件,联机日志,参数文件等) 3、系统全局共享区System Global Area(SGA) System Globa... 阅读全文
posted @ 2011-09-17 22:26 老猫-DB 阅读(239) 评论(0) 推荐(0) 编辑
摘要: e、大池(Large Pool) 大池的得名不是因为大,而是因为它用来分配大块的内存,处理比共享池更大的内存,在8.0开始引入。 下面对象使用大池: MTS——在SGA的Large Pool中分配UGA 语句的并行查询(Parallel Executeion of Statements)——允许进程间消息缓冲区的分配,用来协调 并行查询服务器 备份(Backup)——用于RMAN磁盘I/O缓存 4、后台进程(Background process) 后台进程是Oracle的程序,用来管理数据库的读写,恢复和监视等工作。Server Process主要是通过他和user process进行联系和沟 阅读全文
posted @ 2011-09-17 22:26 老猫-DB 阅读(191) 评论(0) 推荐(0) 编辑
摘要: 文章主要介绍的是Oracle临时表的实际用法的经验心得,我们目前所使用的 Oracle是作为数据库支撑平台的实际应用,可以说其数据量还是算的上比较庞大的系统,即表的数据量一般情况下都是在百万级以上的数据量。 当然在 Oracle 中创建分区是一种不错的选择,但是当你发现你的应用有多张表关联的时候,并且这些表大部分都是比较庞大,而你关联的时候发现其中的某一张或者某几张表关联之后得到的结果集非常小并且查询得到这个结果集的速度非常快,那么这个时候我考虑在 Oracle 中创建“临时表”。 我对临时表的理解:在 Oracle 中创建一张表,这个表不用于其他的什么功能,主要用于自己的软件系统一些特有.. 阅读全文
posted @ 2011-09-17 22:23 老猫-DB 阅读(253) 评论(0) 推荐(0) 编辑
摘要: 一、嵌套表的定义: 嵌套表是表中之表。一个嵌套表是某些行的集合,它在主表中表示为其中的一列。对主表中的每一条记录,嵌套表可以包含多个行。在某种意义上,它是在一个表中存储一对多关系的一种方法。考查一个包含部门信息的表,在任何时间内每个部门会有很多项目正在实施。在一个严格的关系模型中,将需要建立两个独立的表department和project. 嵌套表允许在department表中存放关于项目的信息。勿需执行联合操作,就可以通过department表直接访问项目表中的记录。这种不经联合而直接选择数据的能力使得用户对数据访问更加容易。甚至在并没有定义方法来访问嵌套表的情况下,也能够很清楚地把部门和. 阅读全文
posted @ 2011-09-17 22:21 老猫-DB 阅读(1268) 评论(0) 推荐(2) 编辑
摘要: PERCENTILE_DISC功能描述:返回一个与输入的分布百分比值相对应的数据值,分布百分比的计算方法见函数CUME_DIST,如果没有正好对应的数据值,就取大于该分布值的下一个值。注意:本函数与PERCENTILE_CONT的区别在找不到对应的分布值时返回的替代值的计算方法不同SAMPLE:下例中0.7的分布值在部门30中没有对应的Cume_Dist值,所以就取下一个分布值0.83333333所对应的SALARY来替代SELECT last_name, salary, department_id,PERCENTILE_DISC(0.7) WITHIN GROUP (ORDER BY sal 阅读全文
posted @ 2011-09-17 22:19 老猫-DB 阅读(331) 评论(0) 推荐(0) 编辑
摘要: SUM功能描述:该函数计算组中表达式的累积和。SAMPLE:下例计算同一经理下员工的薪水累积值SELECT manager_id, last_name, salary,SUM (salary) OVER (PARTITION BY manager_id ORDER BY salaryRANGE UNBOUNDED PRECEDING) l_csumFROM employeesWHERE manager_id in (101,103,108);MANAGER_ID LAST_NAME SALARY L_CSUM---------- ------------------------- ------ 阅读全文
posted @ 2011-09-17 22:19 老猫-DB 阅读(188) 评论(0) 推荐(0) 编辑
摘要: LAST功能描述:从DENSE_RANK返回的集合中取出排在最后面的一个值的行(可能多行,因为值可能相等),因此完整的语法需要在开始处加上一个集合函数以从中取出记录SAMPLE:下面例子中DENSE_RANK按部门分区,再按佣金commission_pct排序,FIRST取出佣金最低的对应的所有行,然后前面的MAX函数从这个集合中取出薪水最低的值;LAST取出佣金最高的对应的所有行,然后前面的MIN函数从这个集合中取出薪水最高的值SELECT last_name, department_id, salary,MIN(salary) KEEP (DENSE_RANK FIRST ORDER BY 阅读全文
posted @ 2011-09-17 22:18 老猫-DB 阅读(185) 评论(0) 推荐(0) 编辑
摘要: Oracle从8.1.6开始提供分析函数,分析函数用于计算基于组的某种聚合值,它和聚合函数的不同之处是对于每个组返回多行,而聚合函数对于每个组只返回一行。下面例子中使用的表来自Oracle自带的HR用户下的表,如果没有安装该用户,可以在SYS用户下运行$ORACLE_HOME/demo/schema/human_resources/hr_main.sql来创建。除本文内容外,你还可参考:ROLLUP与CUBE http://xsb.itpub.net/post/419/29159分析函数使用例子介绍:http://xsb.itpub.net/post/419/44634本文如果未指明,缺省是在 阅读全文
posted @ 2011-09-17 22:17 老猫-DB 阅读(294) 评论(1) 推荐(0) 编辑
摘要: 今天我们都在谈DBA 2.0,而此前的模式就被归结为DBA 1.0,那么DBA 1.0的时代是什么样子的呢? 我简单做了如下一幅图示,将DBA的工作分为三个部分:Pre-DBA、DBA、Post-DBA DBA 1.0也许是我们都熟悉的模样,结合上图回想一下曾经我们的工作:在Pre-DBA阶段,可能我们需要进行数据库的安装部署工作,然后为了监控数据库的运行状况,我们需要编写一系列的脚本来监控数据库的运行,监控的内容有很多,包括ORA-错误信息、警告信息、空间使用情况、负载信息等,当然如果是我们自己来进行这些开发工作,你会发现甚至每个企业每个数据库的监控脚本都全然不同,我们的DBA在不停的发明. 阅读全文
posted @ 2011-09-17 22:14 老猫-DB 阅读(374) 评论(0) 推荐(0) 编辑
摘要: 下面按类别列出一些ORACLE用户常用数据字典的查询使用方法。 一、用户 查看当前用户的缺省表空间SQL>SELECT username,default_tablespace FROM user_users; 查看当前用户的角色SQL>SELECT * FROM user_role_privs; 查看当前用户的系统权限和表级权限SQL>SELECT * FROM user_sys_privs;SQL>SELECT * FROM user_tab_privs; 二、表 查看用户下所有的表SQL>SELECT* FROM user_tables; 查看名称包含log字 阅读全文
posted @ 2011-09-17 22:13 老猫-DB 阅读(182) 评论(0) 推荐(0) 编辑
摘要: 众所周知,数据库设计的好坏直接关系到数据库运行的效率。根据笔者的经验,对于提升数据库性能来说,合理的数据库设计,比升级服务器的硬件配置,还要来的有效。但是,笔者无论是在跟同事合作,又或者是在论坛上跟相关同行交流的时候,总是会发现有些人有一些不好的数据库设计习惯,影响了数据库的性能,增加了数据库管理员的工作量。 笔者认为,为了提升数据库的性能,在Oracle数据库设计的时候,要做到五戒。 一戒:在小型表上不要建立索引。 毋庸置疑,索引可以提高数据库查询的效率。但是,俗话说,过之则不及。索引也必须用在合时的地方。如果索引设置不当,不但不会提升数据库的性能,反而会起到相反的作用。如在小型数据... 阅读全文
posted @ 2011-09-17 22:12 老猫-DB 阅读(170) 评论(0) 推荐(0) 编辑
摘要: 在这样一个晚上写下这样一个题目,是因为最近有越来越多的人问起我这个问题,我想还是试着把我的想法写下来。 1.快速有多快? 很多人都喜欢寻找捷径,所以经常问起快速,但是我经常反复告诉大家的是,没有捷径,或者说没有轻而易举的捷径可循。 当然快速两个字也是有意义的,这是这个快速的社会对于年轻人的要求,我说过这样一段话:随着技术以及时代的不断进步,社会留给DBA的成长时间越来越短,一个DBA从入门到成长为资深的时间不会超过2年……张爱玲说过,成名要趁早。做技术的也是如此,成长越早越好,越快越好。 2.如何获得成功? 无疑每个人都热切的期待成功,那么如何才能获得成功? 我曾经总结了一个简单的公式,罗列了 阅读全文
posted @ 2011-09-17 22:11 老猫-DB 阅读(371) 评论(0) 推荐(0) 编辑
摘要: 1.Y或YY或YYY 年的最后一位,两位或三位SQL> Select to_char(sysdate,'Y') from dual;TO_CHAR(SYSDATE,'Y')--------------------7SQL> Select to_char(sysdate,'YY') from dual;TO_CHAR(SYSDATE,'YY')---------------------07SQL> Select to_char(sysdate,'YYY') from dual;TO_CHAR(SYS 阅读全文
posted @ 2011-09-17 22:05 老猫-DB 阅读(229) 评论(0) 推荐(0) 编辑
摘要: 1 创建表空间 CREATE TABLESPACE CPORTAL LOGGING DATAFILE '/dev/raw/raw1' SIZE 30000M REUSE EXTENT MANAGEMENT LOCAL 2 创建用户CREATE USER CPORTAL PROFILE DEFAULT IDENTIFIED BY CPORTAL DEFAULT TABLESPACE CPORTAL TEMPORARY TABLESPACE TEMP ACCOUNT UNLOCK;GRANT CONNECT TO CPORTAL;GRANT RESOURCE TO CPORTAL; 阅读全文
posted @ 2011-09-17 22:04 老猫-DB 阅读(195) 评论(0) 推荐(0) 编辑
摘要: 如果想建立对远程数据库的访问方法,可以直接读取远程Oracle的数据,或者直接修改,可以建立dblink。dblink可以是公用连接PUBLIC或者私有连接PRIVATE。这一点和同义词很相像。创建dblink的语法很简单,但要求用户具备创建dblink的权限。权限可以由管理员赋予。创建dblink的语法如下:1>已配置本地服务:CREATE DATABASE LINK数据库链接名CONNECT TO 用户名 IDENTIFIED BY 密码 USING ‘本地配置的数据的实例名’;2>未配置本地服务:CREATE DATABASE LINK数据库链接名CONNECT TO 用户名 阅读全文
posted @ 2011-09-17 22:03 老猫-DB 阅读(329) 评论(0) 推荐(0) 编辑