2006-10
03


数据库、安装等

初始化参数

  • MAX_ENABLED_ROLES:用户拥有的有效角色的最大值
  • DB_CACHE_SIZE:数据库缓存大小

建立数据库

建立数据库之前需要考虑以下条件。

  • 拥有SYSDBA权限
  • 若使用操作系统认证,则需要建立相关操作系统帐户, 若使用密码文件认证,则需要建立密码文件
  • 足够的内存
  • 足够的磁盘空间

建立数据库时执行的脚本:

sql.bsq建立数据字典的表建立数据库时由Oracle自动执行
catalog.sql建立数据字典视图建立数据库之后由管理者手动执行

数据库模板

  • 仅包括数据库结构的模板
    • 表空间
    • 数据文件
    • 初始化参数
  • 包括数据库结构和用户数据的模板
    • 表空间
    • 数据文件
    • 初始化参数
    • 用户schema
    • 用户数据

OFA

Optimal Flexible Architecture,Oracle推荐的目录结构, 将数据文件、控制文件、日志等分散在多个磁盘中。好处:

  • 能轻易地区分数据文件和系统文件
  • 可以简单地识别控制文件、数据文件、日志等
  • 同一台服务器上建立多个Oracle数据库时降低管理难度
  • 通过分散数据文件,减少读写文件时的冲突,提高性能

Oracle Universal Installer

启动之前需要建立拥有 Oracle 的系统帐户(oracle用户、dba组、oinstall组)

监察(audit)

使监察有效:设置初始化参数 AUDIT_TRAIL=DB|OS|NONE

  • DB: 监察记录写到 SYS.AUD$
  • OS: 监察记录写道操作系统日志中

控制文件

使用 CREATE CONTROLFILE 命令建立控制文件。

使用OMF(Oracle-Managed Files)管理文件时也能用CREATE CONTROLFILE命令建立控制文件, 但必须要指定 DATAFILE 和 LOGFILE。

可以过以下方法察看控制文件:

  • V$CONTROLFILES
  • V$PARAMETERS
  • show parameters 命令

控制文件在以下情况下更新。

数据文件和REDO日志文件的名称和位置数据库中添加、更改或删除数据文件和REDO日志文件时
表空间信息添加或删除表空间时
REDO日志的历史记录日志切换时
备份日志的位置和状态日志备份发生时
备份的位置和状态由Recovery Manager记录
现在的日志序号日志切换时
checkpoint信息checkpoint执行时

自动段(Segment)管理

  • 自动管理 PCTUSED、FREELISTS、FREELIST GROUPS参数
  • 提高空间利用率、提高并行数据插入的性能
  • 使用位图(而不是空闲列表)管理段内的空闲空间,插入数据时通过位图查找大小合适的数据块。
  • 不能保存LOB段和包含LOB列的表

段类型

  • 表(Table)
  • 分区表(Partition Table)
  • 簇(Cluster)
  • 索引(Index)
  • 索引组织表(Index-organized Table, IOT)
  • 分区索引(Partition Index)
  • UNDO段
  • 临时段:查询和建立索引时排序用
  • LOB
  • 嵌套表(Nested Table)
  • bootstrap:打开数据库时初始化数据字典时使用的段

其中UNDO段和临时段为系统建立,不属于 schema 对象。

rollback 段

包括系统rollback段非系统rollback段延迟rollback段三种。

系统rollback段
创建数据库时创建,仅当系统表空间内的对象发生变化时使用
非系统rollback段
自动管理、手动管理
延迟rollback段
事务进行时,表空间以 NORMAL 以外的方式脱机,事务信息将被保存在延迟rollback段中以便表空间联机时恢复事务。由oracle自动管理。

范围(extent)

范围(extent)管理

手动分配

ALTER TABME emp ALLOCATE EXTENT [(SIZE size DATAFILE 'filename)]

表空间

默认表空间

创建表时如果不指定表空间,则建立在schema规定的默认表领域中。

临时表空间

  • 创建:CREATE TEMPORARY TABLESPACE 语句,默认使用字典方式管理
  • 更改默认临时表空间:ALTER DATABSE DEFAULT TEMPORARY TABLESPACE 语句。

表空间管理

local表空间管理方式不能更改其存储参数(STORAGE)。 字典管理方式下可以更改存储参数。

Oracle9i中默认管理方式为local管理,8i 为字典管理。 9i中可以通过 EXTENT MANAGEMENT DICTIONARY 来指定字典管理方式。

使用 ALTER TABLESPACE user01 OFFLINE NORMAL 将表空间设置为OFFLINE的动作 会同时被记录到控制文件和数据字典中。

索引

索引

通过 ALTER INDEX ... REBUILD 语句重新建立索引有以下特征:

  • 根据原有索引来建立新索引
  • 不需要排序
  • 建立时需要有足够的空间来容纳新旧索引。建立完毕后旧索引会被删除
  • 建立的索引中不包括已删除的数据
  • 建立过程中依然可以通过旧索引进行查询

监视索引

通过下面的方法来监视索引是否被使用。

ALTER INDEX ... MONITORING USAGE;

之后通过 V$OBJECT_USAGE 来确认索引的使用情况。例如

ALTER INDEX numb_oe_index MONITORING USAGE;     -- 监视开始
SELECT inde_name, usage FROM v$object_usage;    -- 确认使用情况
SELECT COUNT(*) FROM numbers WHERE odd_even='E';  -- 在numbers表上执行查询
SELECT inde_name, usage FROM v$object_usage;    -- 确认使用情况
ALTER SESSION SET optimizer_mode=first_rows;    -- 修改优化器为cost base
SELECT COUNT(*) FROM numbers WHERE odd_even='E';  -- 在numbers表上执行查询
SELECT inde_name, usage FROM v$object_usage;    -- 确认使用情况
ALTER INDEX numb_oe_index NOMONITORING USAGE;   -- 监视停止

临时表

临时表仅在当前会话或者当前事务中存在。 其生命期由 CREATE GLOBAL TEMPORARY TABLE语句的参数决定。

  • ON COMMIT DELETE ROWS:(默认)事务范围内存在
  • ON COMMIT PRESERVE ROWS:会话范围内存在

特性

  • 针对临时表的DML操作不锁定、不生成REDO日志
  • 可以针对临时表建立索引、视图、触发器。
  • 可以通过工具导入/导出其定义,但无法导出数据。

创建表时的注意事项

  • rollback segment、临时段、索引等放在不同的表空间,防止出现碎片
  • 尽可能少地分配 extent 以减少碎片
  • 尽量使用 local 管理以降低 overhead

表约束

约束延迟

创建约束时通过 [NOT] DEFERRABLE INITIALLY {IMMEDIATE|DEFERRED} 来设置延迟。 延迟即为事务提交时检查约束,反之则在语句执行时检查约束。

  • NOT DEFERRABLE 不能延迟
  • DEFERRABLE INITIALLY IMMEDIATE 能够延迟,但默认情况下为不延迟。DEFERRABLE 情况下的的默认设置
  • DEFERRABLE INITIALLY DEFERRABLE 能够延迟,默认情况下为延迟

修改延迟设置:

  • ALTER SESSION SET CONSTRANT[S] = {IMMEDIATE|DEFERRED|DEFAULT}
  • SET CONSTRANT[S] {constrant_name|ALL} {IMMEDIATE|DEFERRED}

一致性

读取一致性

默认情况下是语句级别读取一致性。 通过 SET TRANSACTION READ ONLY 可以使用事务级读写一致性。

日志(REDO Log)

checkpoint的发生条件

  • 日志切换
  • SHUTDOWN ABORT以外的方式终止实例
  • 由于FAST_START_MTTR_TARGET参数导致的强制执行
  • ALTER SYSTEM CHECKPOINT命令执行
  • OFFLINE NORMAL、READ ONLY、BEGIN BACKUP选项的 ALTER TABLESPACE命令

日志的archive

  • ARCHIVELOG模式:过去的日志文件被archive之后,才会被覆盖
  • ARCHIVELOG模式、NOARCHIVELOG模式:checkpoint结束之后过去的日志才会被覆盖

UNDO

建立

建立数据库时建立:

CREATE DATABASE ... UNDO TABLESPACE undo01 DATAFILE '...';

建立数据库之后建立:

CREATE UNDO TABLESPACE undo01 DATAFILE '...';

UNDO表空间管理

如果系统中有事务正在执行,那么切换UNDO表空间

ALTER SYSTEM SET undo_tablespace=undotbs2

会造成

  • 新的 UNDO 表空间中的 UNDO 段成为ONLINE状态
  • 旧 UNDO 表空间中包含事务的 UNDO 段成为 PENDING OFFLINE 状态

自动UNDO表空间管理的参数

UNDO_MANAGEMENTauto=自动管理 manual=手动管理
UNDO_TABLESPACE指定有效的undo表空间
UNDO_RETENTIONUNDO数据的保存时间(秒)
UNDO_SUPPRESS_ERRORS设置为true可以禁止显示 ORA_30019 错误信息

数据字典

数据字典

DBA_TAB_PRIVS对象权限
DBA_COL_PRIVS列权限
DBA_SYS_PRIVS系统权限
SESSION_PRIVS当前会话可以使用的系统权限
DBA_ROLLBACK_SEGS所有的rollback段的信息,但不包括OPTIMAL值
DBA_FREE_SPACES数据文件内可分配的连续空间的信息
DBA_USERS包含用户的角色信息

数据字典视图由 catalog.sql 脚本建立。

动态性能视图

使用动态性能视图可以获得以下信息。

V$DATAFILE数据文件
V$INSTANCE数据库状态
V$LOCK, V$LOCKED_OBJECT锁信息
V$SESSION会话信息
V$ROLLSTAT有效rollback段的信息
V$ROLLNAME仅包含rollback段id和名称,通常和V$ROLLSTAT结合使用

权限管理

用户

创建用户时使用 IDENTIFIED GLOBALLY AS 'external' 可以用企业目录服务(Enterprise Directory Service)进行用户认证。

操作系统认证

OS_AUTHENT_PREFIX参数值 + OS用户名 = Oracle用户名

角色

修改角色的条件:用户需要拥有 ALTER ANY ROLE 权限,或者以 WITH ADMIN OPTION 被赋予某个角色。

权限

DDL的系统权限在取消时不会连锁。例如 A -> B with admin option, B -> C,那么 A 在 revoke B 时 B 赋予 C 的权限不会被自动取消。

密码

  • PASSWORD_REUSE_TIME: 重复使用旧密码的最小间隔日数
  • PASSWORD_REUSE_MAX: 重复使用旧密码之前,最少需要修改几次密码
  • FAILED_LOGIN_ATTEMPTS: 密码错误超过规定次数以上则锁定帐户
  • PASSWORD_LOCK_TIME: 帐户锁定时间
  • PASSWORD_LIFE_TIME: 密码有效期限
  • PASSWORD_GRACE_TIME: 密码过期后多长时间内必须修改密码
  • PASSWORD_VERIFY_FUNCTION: 检查密码复杂度的函数

执行 utlpwdmg.sql 可以建立默认的复杂度检查函数。

策略(profile)

创建策略:

CREATE PROFILE dev_prof LIMIT
  IDLE_TIME 60
  SESSIONS_PER_USER 2
  CONNECT_TIME 30

创建策略时的参数:

CPU_PER_SESSION会话使用的CPU时间(单位0.01秒)
SESSIONS_PER_USER用户可以同时进行的会话数
CONNECT_TIME允许连接时间(分钟)
IDLE_TIME允许空闲时间(分钟)
LOGICAL_READS_PER_SESSION一次会话中能够进行的逻辑读次数(单位为数据块)
PRIVATE_SGA私有SGA的大小(单位为数据块)
CPU_PER_CALL一次调用(SQL语句)允许使用的CPU时间最大值(0.01秒)
LOGICAL_READS_PER_CALL一次调用(SQL语句)能够进行的逻辑读次数(单位为数据块)

如何使策略有效

  • 设置初始化参数 RESOURCE_LIMIT=TRUE
  • 用ALTER SYSTEM命令动态变更

SQL*Plus

确认表或视图的结构:

  • DESCRIBE 命令
  • DICT_COLUMNS 视图



看完这篇文章后感觉怎样?如果还需要更多的内容,可以看看下面这些,也许会对你有帮助:


添加评论

Security Code: