Chinaunix首页 | 论坛 | 博客
  • 博客访问: 249374
  • 博文数量: 64
  • 博客积分: 1416
  • 博客等级: 上尉
  • 技术积分: 565
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-18 10:54
文章分类

全部博文(64)

文章存档

2011年(4)

2010年(60)

我的朋友

分类: Oracle

2010-03-24 19:18:40

ocp原厂培训笔记(第二天) 

段 segment,区 extent ,块 block 逻辑概念
table.A-> heap ,堆表,比较慢(heap 表的记录没有次序)

每个block的头有 SCN,尾部也写有一些数据,(如果坏掉了,整个block就会变得无法标识)
如果有个 12K的表,它将被分配到两个块上去。

TABLESPACE的作用: Are a repository for schema object data;
    datafile:ORACLE 自动把表存在这个地方(table 不能指定到 datafile,只能指定到 tablespace)


OMF
DB_CREATE_FILE_DEST
如果设置了DB_CREATE_FILE_DEST_N:  指定镜像 到多个位置
DB_RECOVERY_FILE_DEST:闪回恢复区域

extent 管理
本地管理 :通过位图来管理  
dictionary管理; 通过 Fet$,vet$ 表插入数据。 (有可能出现产生 SYS RECURSIVE SQL,影响系统功能的情况)
如果本地管理,就不会产生上面的 SYS RECURSIVE SQL


当没有指定某个用户的永久表空间时,users会被指派为默认的永久表空间。

v$tablespace 有几种形式:
大表空间:一个表空间只能有一个datafile
Extent 分配: 1>automatic 自动
                    2>uniform 统一大小
   选择自动的 extent 分配,前面16个盘区为64KB,8*1M,?*8MB


   segment 管理方式:
     1>Automatic :位图块来管理
     2>Manual:freelist
   一般选择第一种管理方式,automatic 管理方式有更好的并发性,这种管理方式叫自动段空间管理(ASSM)

当置于某个tablespace 处于logging 模式
 1>update,delete (仍产生redolog)
 2>create table t1 as select * from ***; 不会产生redo
可以设定表级别的logging和unlogging,,如果不指定这个表级别 logging,则自动从tablespace级别继承是否logging。

alter tablespace offline = alter tablespace offline normal (这时会发生完全检查点,部分的完全检查点,只写回一个表空间的脏数据)
alter tablespace immediate; 不发生检查点 ,下次启动必须做将media recovery;
alter tablespace temporary;(如果能 normal down掉下来,则先做完全检查点之后再 normal down 下去(类似normal);
 如果文件坏掉了,则会发生强制offline(类似immediate)

建立tablespace需要注意的情况:
建立tablespace 名字的时候,推荐不要用“”来指定文件名,否则以后都会大小写敏感了。
如果指定 reuse 参数,如果datafile名字一样,则覆盖原来的tablespace。

数据库里由字典管理的表空间,我们可以通过调用一个plsql包,通过里面的存储过程,把它变成本地的管理方式。


dba_tablespace:被存储在系统表空间,数据库位于open状态的时候才能看
v$tablespace:动态视图 ,不同状态可以看不同的内容,但没dba_tablespace内容 详细。


盘区映射图:
storage->tablespace->察看表空间内容->extent map


一个数据库理论上有最多有 65000的datafile.
ASM; File system.Volume manager ( I/O 情况下状态平衡)
(ASM instance 掉了之后 ,数据能找回来吗)
能,oracle support有这种软件,读组成 asm盘的裸盘的header,然后恢复它.把asm instance 起起来.


对一个block插入,
用户数据从下往上插入,系统数据从上往下插入。

一个库里的大表空间可以有多少? 没有限制.

权限的授予和回收:
Grant,revoke

profile的两个作用:口令管理,资源管理

sys用户system用户比较:
sys的属性:DBA ACCOUNT,ADMIN OPTION,有对DATA DICTIONARY 管理的权限,AWR报告的权限
SYSTEM:用户会拥有一些额外的工具视图.
用户: sys  拥有DBA权限,SYSDBA 权限.
      system:拥有 DBA的权限.(是系统权限) SYSTEM没有权限关闭数据库,因为它仅有DBA权限.


dba与sysdba的区别:
权限:dba 角色权限是复合的
     sysdba: 权限是原子的,不能分割(是系统权限)

passwd的认证方式
     1>password (data dictionary 里)
     2>external (OS 认证)
     3>global (SSO 单点认证,)
普通用户,管理员用户


如果有操作系统帐号tsmith,在数据库中存在一个用户 OPS$tsmith,则这个用户可以直接采用操作系统登陆方式登陆.
操作系统验证优先于口令文件认证.

操作系统认证的内容:
因为ORACLE属于oinstall 成员,(sysdba)oracle可以通过操作系统命令来登陆.
通过下面命令来查看所有有sysdba权限的用户:
SQL>select * from v$pwfile_users;
可以看到默认 system没有sysdba系统权限的.

但是我们可以通过grant 命令来给system 权限.

用户权限分为 1> system系统权限(open shutdown)
             2> object 对象权限(update,delete)

系统权限 的关系 : A B C 不级连 ,A 赋予B 权限D,B赋予C权限D (open shutdown)
A可以从B 拿走权限,但是不会顺带把C的权限拿走

 对象权限:   A B C级连
如果 A从B拿走权限d,则顺带把从c的权限拿走吧  (update,delete)

一个角色的最终权限是它所有权限的集合

版本不同:
9i和10G比,9i的connect 有了更多的connect 权限.
resource 有无限制的空间配额.

缺省角色;默认角色
SET ROLE vocationdba;
分配角色给用户
create user u1 identified by u1 quota 10m on users;
create role r1;
grant  create table to r1;
grant r1 to u1;

非默认角色(事后打开)
sql>alter user u1 default role none;( u1默认角色是没有被激活的)
但用户可以自己激活这个角色.


sql>conn u1/u1
sql>set role r1;

用户的概要文件的两个作用 :1>控制文件
                          2>限制资源(防止黑客)
                          CPU 时间,连机时间,服务器控制时间

如果数据库处于共享连接模式,则 session占用的SGA,就是私有的.


在设置profile的前提是,
必须先设置 系统参数 resource_limit, alter system set resource_limit=true;
这样profile的资源限制才能生效.


不推荐用保留字,空格来做对象名.
db_link最长可以到128个字节.

""对于对象用双引号,则大小写敏感了
''日期,字符单引号
varchar2 :比varchar更加增加空间
nunmber: 数字类型
timestamp:对日期时间扩展千万分之一秒(比date 更精细)
clob:大字符串类型
Blob:照片作为数据文件存储数据,照片文件直接存入数据文件
BFILE:文件名称的引用
external table:

约束: 1>主键约束:主键列不允许有空值,重复值(主键约束=特殊的check约束)
      2>unique约束,某列只能有一个
      3>check约束, 比如限制员工的岁数在14-18岁之间
      4>主键,外键约束
      干掉部门无法干掉(必须先移除对他作了索引的外键才行)

201 页,
禁用约束(Disable Novalidate 不检查约束)数据插完之后再检查.
如果对某表有 disable validate 设置,无法对此表做DML操作.

缺省的约束是 非延时约束.

 约束的属性

drop table hr.employees purge(不加'purge'则回到回收站,加了它就是完全删除)

只有主键列和unique列可以被作为别的表的外键.

truncate (属于ddl,每个语句作为一个独立事务隐含提交,不能加where条件,只删除表的数据,保留结构)
    delete(可回滚,属于dml)
    drop(删除整个表,包含表结构,是ddl语句)

drop 和truncate相比耗资源差不多,都是ddl操作.

索引包含两个内容.[key和row pointer]
两种类型的索引,位图索引和B-TREE索引
B-Tree索引的 ROWID 包括:文件名,对象名,块号,行偏移,
如果利用ROWID来查找数据,我们只需要一个 io即可操作它

位图索引:重复值比较多的情况下建议使用位图索引。(比如一个列值建立索引,它是表示颜色的,那么一种颜色就可以用一行来表示,这样,如果要查找红蓝色的所有列,则可以把它们对应的行做一个 或 的操作即可)

位图索引的缺点在于,跟新一个列就会锁定整个index表,所以位图索引只适合查询系统,(重复值比较多的查询系统)。
oracle默认对外键是不建立索引的,只有主键和唯一键才建立索引。

反键索引:
命令类似于 alter index reverse.
如果对 1001,1002,1003,1004块插入数据,这样会在索引的文件块中产生热点块,可能会拖延查询,
我们把键值翻过来之后,变成1001,2001,3001,4001,这样索引文件中各自的块会放在不同的位置。
避免了索引中热点块的出现。
反键索引的缺点在于对范围查询支持不好,(因为反键索引中对应数据不是顺序存储的) 用在等值查询则比较块。
如果此时做范围查询,则会变成全表扫描。

建立索引的语法: create index my_index on table()
这时会建立索引,默认类型是 b-tree索引。


函数索引:
建立函数索引的原因是:索引都被放在函数里,无法被使用。
例如:
create index indx1 on hr.employees(upper(last_name));
这是无法利用索引的,
为了解决这个问题,我们可以用函数索引。

视图的概念:
    为了隐藏某些敏感信息,可以对某些基表的某些选项开放(敏感信息保留),建立一个视图。
    如果我们对这个视图进行修改,将会直接修改下面基表对应的内容。

物化视图则是在基表 上综合数据,产生一个实际的表,对物化视图的修改不会影响基表。

224 面
序列对象:sequence 只针对当前对象来使用的
sequence current:针对当前的sequence值
sequnnce.nextval:针对全局的sequence值

for example:
create sequence s1 start with 1;(如果没写增量,则每次sequence以一来递增)
select s1.currval from dual;察看会话的当前sequence
insert into t1 values(s1.nextval,'limin');

序列对象产生后,只能保证它是唯一的,但是不能保持是连续的。
(一个会话产生一个 sequence,如果rollbak,或者掉电,这个sequence 序列号都会消失)

临时表:
临时表可以产生undo,但不会产生redo。
temp表里,发生commit之后,只会删除表里的记录,定义会保存下来。

for example:
create global temporary table t_dept as select * from departments;
这样会建立一个table ,t_dept,但是里面不会有数据。因为上面是一个完整的会话。
create global temporary table t_dept as select * from departments on commit reserve (基于会话的,只有断掉会话时才释放)

视图:
DBA_ 只有管理员才能看
ALL_ 每个人都可以看
USER_ 用户才可以看

试题:以管理员的角度,察看hr帐号下的所有表
select table_name from dba_tables where owner='HR';

for example
su - oracle
conn hr/hr
create table dept as select * from departments;
create table emp as select * from employees;
create table ** as select ** from **
建立这些表的时候只会把原表的非空约束拷贝过来,其他约束都不会拷贝过来。

练习:
通过EM建立约束:
TABLES->EDIT->TABLE->CONSTRAINTS
建立复合索引(无关键字)
建立函数索引。
create index indx1 on emp(upper(last_name));
查处emp 表有哪些索引,以及索引的类型。
select index_name,index_type from user_indexes;

DML 语言 merge= update+insert(有条件的更新)合并

oracle 事务的开始和结束:
从第一条DML语句隐含开始
事物到commit ,rollbak结束

for example:
1.select
2.insert
3.update
4.create table t1(DDL)
在执行第4个语句的时候,它会默认检查前面一个语句,如果没有发生提交,则它会产生一个隐含提交工作。

使用isqlplus的步骤:
isqlplus start
%ORACLE_HOME/install/port.lst
/5560/isqlplus

从浏览器里面浏览的方法:
edsir2p0.us.oracle.com:5560/isqlplus

阅读(1323) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~