sys和system用户、sysdba和sysoper系统权限、dba角色的区别
一、 sys和system用户的区别(1)最重要的区别,存储的数据的重要性不同 【sys】所有oracle的数据字典的基本和视图都存放在sys用户中,这些基表和视图对于oracle的运行是至关重要的,由数据库自己维护,任何用户都不能手动更改。sys用户拥有dba,sysdba,sysoper等角色或权限,是oracle权限最高的用户。【system】 用户用于存放次一级的内部数据,如oracle的一些特性或工具的管理信息。system用户拥有普通dba角色权限。 (2)其次的区别,权限不同。 【system】用户只能用normal身份登录em,除非你对它授予了sysdba的系统权限或
显示某月的每一天日期
今天遇到客户需求,要显示每月的每一天的数据,哪怕那天没有数据也要显示出来日期,客户的需求是一朵奇葩,不过正是这些奇葩提高了自身的技能:代码如下:select to_char(to_date('&month','yyyymm')+(rownum-1),'dd') DAY_IDfrom dualconnect by rownum<=to_number(to_char(last_day(to_date('&month','yyyymm')),'dd'))[@more@]
Oracle分页例子:
对于一些网站搜索或者BBS经常会要求分页显示,为了快速显示出第一页的信息,需要加first_rows(n)来快速显示最前面的几行数据。实例:select/*+first_rows(10)*/ *from (select/*+first_rows(10)*/ t.*,rownum rn from(select/*+first_rows(10)*/ * from t order by x) whererownum<=20)where rn<=10这就是典型的分页例子,不过排序使用的X列必须有索引,否则的话CBO会忽略FIRST_ROWS(n)而使用ALL_ROWS。[@more@]
Oracle append Hint(四)
既然直接加载会产生少量的redo,那么再加入并行会并行的往表中插入数据,肯定速度会更快,即:insert/*+append parallel(t,4)*/ into tselect * from t1;到底结果是不是这样呢?请看例子:sys@ORCL> alter session enable parallel dml;Session altered.sys@ORCL> alter session set sql_trace=true;Session altered.执行两条语句:sys@ORCL> insert/*+append parallel(t,4)*/ into t 2 select * from t1;9999 rows created.sys@ORCL> rollback;Rollback complete.sys@ORCL> insert/*+parallel(t,4)*/ into t 2 select
Oracle append Hint(三)
如果一个表上有索引,那么直接加载又会是什么情况呢?产生的redo量跟传统加载又相差多少呢?例子: sys@ORCL> create table t 2 as3 select * from dba_objects where 1=0;Table created. sys@ORCL> create index t_ind on t(object_id);Index created. sys@ORCL> set autotrace trace stat;首先看下传统加载在有索引列产生的redo量 sys@ORCL> insert into t2 select * from dba_objects where rownum<10000;9999 rows created.Statistics----------------------------------------------------------1067 recursive calls
Oracle append Hint(二)
很多人都认为使用直接加载可以大量减少redo的产生量,实际上直接加载并非在任何时候都能减少redo的产生。如果对象实在LOGGING模式下,直接加载并不能显著的减少日志量。看一个例子:sys@ORCL> create table t 2 as 3 select * from dba_objects where 1=0;Table created.sys@ORCL> alter table t logging;Table altered.sys@ORCL> alter table t logging;Table altered.sys@ORCL> set autotrace trace stat;sys@ORCL> insert into t 2 select * from dba_objects where rownum<10000;9999 rows created.Statistic
Oracle append Hint(一)
在执行数据插入或数据加载时,可以通过append Hint的方式进行数据库直接加载,可以在insert的SQL语句里面使用append,比如:insert/*+append*/ into t select * from dba_objects;Oracle执行直接加载时,数据直接追加到数据段的最后,不需要花费时间在段中寻找空闲,数据不经过Data Buffer直接写到数据文件中,效率自然比传统的加载方式要高。首先看一个直接加载的例子,用来演示直接加载的机制:sys@ORCL> create table t 2 as 3 select * from dba_objects where rownum<2000;Table created.sys@ORCL> select segment_name
hextoraw函数和rawtohex函数
介绍下两个函数的作用:hextoraw():十六进制字符串转换为raw;rawtohex():将raw串转换为十六进制;先来看下hextoraw()函数,当出现比f大的字母时(以a最小z最大)就会报错:正确结果:sys@ORCL> select hextoraw('abcdef') from dual;HEXTOR------ABCDEF错误结果:sys@ORCL> select hextoraw('abcdeg') from dual;select hextoraw('abcdeg') from dual *ERROR at line 1:ORA-01465: invalid hex number再来看看rawtohex()函数:sys@ORCL> select rawtohex('AA') from dual;RAWT----4141结果之所以是4141是因
Oracle instr函数
今天在群里面有人问到instr的用法,下面我也来总结一下吧语法如下: instr( string1, string2 [, start_position [, nth_appearance ] ] ) 参数分析: string1 源字符串,要在此字符串中查找。 string2 要在string1中查找的字符串. start_position 代表string1 的哪个位置开始查找。此参数可选,如果省略默认为1. 字符串索引从1开始。如果此参数为正,从左到右开始检索,如果此参数为负,从右到左检索,返回要查找的字符串在源字符串中的开始索引。 nth_appearance 代表要查找第几次出现的string2. 此参数可
Oracle Sequence中Cache与NoCache的区别
Oracle在创建序列(sequence)时有个参数你可以选择cache或者nocache,下面来讲一下两者的区别:先来看下创建sequence的语句:create sequence SEQ_ID minvalue 1 maxvalue 99999999 start with 1 increment by 1 cache n / nocache --其中n代表一个整数,默认值为20order;如果指定CACHE值,Oracle就可以预先在内存里面放置一些Sequence,这样存取的快些。cache里面的取完后,Oracle自动再取一组到cache。使用cache或许会跳号, 比如数据库突然不正常down掉(shutdown abort),cache中的Sequence就会丢失。举个例子:比如你的sequence中cac
Oracle多版本和读一致性
对于以Oracle后台的开发人员了解Oracle多版本和一致读尤其重要,因为它在很大程度上提升了数据库的并行操作。如果对并发了解的不够,通常会遇到以下几种情况:1、破坏了数据的完整性2、随着用户数的增多,应用的运行速度减慢3、不能很好的扩展应用来支持大量用户介绍多版本和一致读之前先来了解下Oracle的锁机制:1、Oracle只在修改时才对数据加载行级锁2、写入器不会阻塞读取器(其他数据库中往往读会被写阻塞)3、写入器想写某行数据,但另外一个写入器锁定了这行数据,此时写入器才会被阻塞明白了锁机制,下面就进入正题。多版本:是指
Oracle同义词的使用
今天看书,突然想到了同义词,于是就产生了2个问题:1、如何查看同义词是public还是private;2、对public和private同义词是否可以重名?于是针对这两个问题做了个实验:首先对scott赋予创建同义词的权限:sys@ORCL> grant create synonym to scott; (创建私有同义词权限)sys@ORCL> grant create public synonym to scott;(创建公共同义词的权限)连接数据库:sys@ORCL> conn scott/tiger;Connected.创建表:scott@ORCL> create table t(id number);Table created.接着创建同义词:scott@ORCL> create or replace synonym
数据库和实例
这篇文章跟数据库开发有什么关系呢?我感觉呢只从字面上看确实没有什么关系,可是了解的话跟大牛讨论时他们最起码不会被鄙视、面试时可能也会有用。如果你再深入的钻研下去你就会发现里面的内容好“丰满”。作为一个菜鸟(指本人)以前跟别人讨论数据库时经常会说:“Oracle数据库、SQL Server数据库、DB2数据库”,以至于我认为数据库是一种软件(对于Oracle、微软、IBM来说也确实是软件),刚接触Oracle时才知道一个完整的“数据库”需要有数据库和实例。这是很多初学者比较难以掌握的概念。那这两者到底是什么?从字面上讲,我感觉tom
数据库开发之绑定变量 .
对于每个程序开发人员来说,数据库的知识都是或多或少的了解些,都能编写一些SQL语句,即使不会也可以使用一些工具来生成SQL语句,因此数据库在很多时候被认为是没有必要研究的。随着系统使用人数增加,系统也遇到了瓶颈,于是开发人员高呼:“给我内存与CPU,系统将会faster!”可是作为盈利性企业,投入与回报是不能成等价比的,必须做到投入少回报多!所以,数据库的开发在系统的前期工作当中非常重要,良好的数据库设计将会提升系统的可扩展性。数据库在执行SQL语句时会首先解析SQL语句,解析又分为硬解析与软解析。说到硬解析和软解析