ORACLE SG042的笔记

更新时间:2024-07-03 06:20:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

介绍 构件

oracle Database 10g

oracle Application Server 10g; oracle Developer Suite; oracle Applications 11i; oracle Collaboration Suite; oracle Services;

应该用标准语法.使用JOIN,CROSS JOIN,NATURAL JOIN等关键字的ANSI SQL:1999语法, 一个Segment被定义为任何一个消耗数据库内物理存储空间的实体.常见的段类型: 表,索引,回退,分区.每个Segment由数据库内连续存储空间块(盘区)构成. 操作系统块-->数据库块-->盘区-->段

PL/SQL:Oracle Procedural Language for SQL对象:匿名代码块,过程,函数,程序包,触发器

除了SQL,Web工具,PL/SQL和JAVA之外,Oracle公司还提供了把SQL命令及数据库连通性集成到传统编程语言中的能力.这种集成是通过使用Oracle预编译器和Oracle Call Interface(OCI)来实现的.

要想成为一名成功的Oracle数据库管理员(DBA),首先需要彻底了解Oracle的基础体系架构及其机制.了解Oracle的内存结构,后台进程和I/O活动之间的关系是至关重要的,然后才能学习怎样管理这些方面.

第二章 安装软件 OFA is designed to:

? Organize large amounts of complicated software and data on disk, to avoid device bottlenecks and poor performance

? Facilitate routine administrative tasks such as software and data backup, which are often vulnerable to data corruption

? Facilitate switching between multiple Oracle databases ? Adequately manage and administer database growth

? Help eliminate fragmentation of free space in the data dictionary, isolate other fragmentation, and minimize resource contention。 要用到两个初始化参数: 安装中提示orainstRoot.sh

create the oracle inventory pointer file(/etc/oraInst.loc)

检查技术文档->检查系统需求->制定安装计划(OFA)->使用OUI 详细看书已经文档

安装要求: 硬件上:

512内存,1GBswap(或者是2倍的内存) /tmp空间要达到400M

1.5GB的硬盘空间安装软件 1.5GB的硬盘空间安装数据库

第三章 安装数据库和体系架构 Oracle体系结构

按以下三个类别来描述 用户相关进程

总称为Oracle Instance 的逻辑逻辑内存结构 总称为Database的物理文件结构

用户进程

User Process:要么在用户自己的PC上,要么在中间层应用服务器上.然后这个User Process启动一个与实例的连接.Oracle把启动和管理User Precess与实例间通信的这个进程称作一个Connection.一旦这个Connection建立了起来,用户就在实例中建立了一个Session.当建立一个会话之后,每个用户就在主机服务器自身上启动了一个Server Process(共享服务器多个User Process共享Server Process).然后,由这个Server Process负责执行实际允许用户与数据库进行交互的各项任务.

PGA(Process Global Area):程序全局区,数据库给每个用户创建了一个PGA的辅助内存结构.PGA存储与用户具体相关的会话信息,比如Bind variable和Session variable.

Oracle实例

一个Oracle实例由Oracle的主内存结构和几个Oracle后台进程所组成;主内存结构又叫做SGA(System Global Area).当用户访问数据库中的数据时,Server Process就是和SGA进行通信.

SGA构件

Oracle把SGA内存划分成叫做Granule(区组)的组快来实现动态的空间分配.4MB,8MB OR 16MB

共享存储池:高速缓存由数据库用户已经发布的最常用的SQL语句(LRU)

数据库缓冲器告诉缓存:高速缓存由数据库用户最近访问过的数据(LRU) 重做日志缓冲器:存储事务信息以用于恢复目的

Java存储池:可选,在Oracle的JVM选件得到使用时,高速缓存最近使用的Java对象和应用软件代码

大存储池:为诸如RMAN备份与恢复之类的大型操作和Shared Server 构件高速缓存数据 流存储池:当Oracle的Advanced Queuing选件得到使用时,高速缓存跟排队的信息请求相关联的数据

参数:基本参数和高级参数 如:SGA_TARGET

SQL>select * from V$SGA

Fixed Size:用来存储由实例的后台进程所使用的信息的辅助空间 Variable Size:Shared Pool,Large Pool,Java Pool Database Buffers Cache: Redo Log Buffer

SQL>select component,current_size from v$sga_dynamic_components; 或用EM DatabaseControl来查看每个SGA构件的大小.

Oracle的后台进程 必需:SMON(System Monitor),PMON(Process Monitor),DBWn(Database Writer),CKPT(Checkpoint)

任选:ARCn(Archive),RECO(Recover),CJQn(Job Queue Monitor),Jnnn(Job Queue),Qnnn(Parallel Queue Slave),Dnnn(Dispatcher),Snnn(Shared Server),MMAN(Memory Manager),MMON(Memory Monitor),MMNL(Memory Monitor Light),RVWR(Recover Writer),CTWR(Change Tracking Writer) Unix下查看后台进程 $ps -ef | grep PROD

在windows环境中,还有一个叫做OracleServiceInstanceName的Windows服务与每个实例相关联.必须启动这个服务,才能启动实例.

Oracle数据库

一个实例就是一个临时的内存结构,但是Oracle数据库是由驻留在主机服务器的磁盘驱动器上的一组物理文件所构成的.这些物理文件称做Control File,Data File,Redo File.跟Oracle数据库有关,但从技术上看不属于Oracle数据库的附加物理文件有Password File,PFILE,SPFILE,以及Archived redo log file. Control File: Data File: Redo File:

了解Database Writer,Log Writer进程何时工作的.

DB control只要做: ? Performance monitoring ? Managing proactive alerts

? Controlling maintenance wizards and advisors

? User and database object administration ? Database backup and recovery ? Storage management and much more.

在DBCA中可以修改shared server 还是独占server。

GRID Control 下面是management server和management repository

DBCA: 创建数据库

数据库配置(在选择了change database configured) 删除数据库

管理模板 :下面有三个选项

from an existing template

from an existing database(structure only)

from an existing database(structure as well as data)

第四章 database interface 要点:

1.利用SQL*PLUS和iSQL*PLUS进入数据库。 2.表的结构

3.利用SQL查询,管理和定义数据 4.认清一些常见的数据库界面

iSQL*PLUS必须启动进程才能使用 isqlplusctl start

网址是:http://hostname:port/isqlplus port一般是5560

SQL分为几下几类:

? Data definition language (DDL) statements:create,replace,alter.drop ? Data manipulation language (DML) statements,insert,update,delete ? Transaction control statements

? Session control statements ? System control statements ? Embedded SQL statements

Oracle Reports is generally used for standard, fixed

reports. Oracle Discoverer is a data mining tool that allows users to browse data without knowing the underlying structure and relationship of that data.

order by 默认是升序, 要是降序要加上desc

A transaction ends when any of the following occurs:

? A user issues a COMMIT or ROLLBACK statement without a SAVEPOINT clause.

? A user runs a DDL statement such as CREATE, DROP, RENAME, or GRANT. If the current transaction contains any DML statements, Oracle first commits the transaction, and then runs and commits the DDL statement as a new, single statement transaction. ? A user disconnects from Oracle. The current transaction is committed.

? A user process terminates abnormally. The current transaction is rolled back.

第五章 控制数据库 启动iSQLPLUS $isqlplusctl start 停止iSQLPLUS $isqlplusctl stop

启动database control emctl start dbcontrol 停止database control emctl stop dbcontrol

查看database control 状态 emctl status dbcontrol

nomount:

1)读取初始化参数文件:

先是spfileSID.ora 然后是spfile.ora 最后是initSID.ora 2)指定SGA 3)开启后台进程

4)打开alert文件和trace文件

Mount 下可以:

1)rename datafile(当表空间是offline时,可以在数据库打开时候修改) 2)修归档模式

3)执行全数据库恢复

OPEN:

open the online data files

open the online redo log files

第六章 存储管理 要点:

1.认清表空间和数据文件的用途 2.建立表空间 3.管理表空间

4.获得表空间的信息

表空间的空间管理方式 本地管理:

1.free extent 在表空间管理 2.bitmap来记录空间的extent

3.每个bit correspods来一个块或者一组块 4.bit指示空间是used

extents在表空间内通过bitmap管理,每个在bitmap中的bit对应一个块和或者一组块。当extent指定或者回收时候,bitmap的值相应的改变。

字典管理

1.空闲extent在数据字典中管理

2.数据字典中的表当extent 指定或者回收时候更新

extent在数据字典中管理。当extent指定或者回收时候,在数据字典中的表更新。

本地管理的优点:本地治理表空间与字典治理表空间相比大大提高了治理效率和数据库性能,其优点如下:

1.减少了递归空间治理

本地治理表空间是自己治理分配,而不是象字典治理表空间需要系统来治理空间分配,本地表空间是通过在表空间的每个数据文件中维持一个位图来跟踪在此文件中块的剩余空间及使用情况。并及时做更新。这种更新只对表空间的额度情况做修改而不对其他数据字典表做任何update操作,所以不会产生任何回退信息,从而大大减少了空间治理,提高了治理效率。同时由于本地治理表空间可以采用统一大小分配方式(UNIFORM),因此也大大减小了空间治理,提高了数据库性能。

2.系统自动治理extents大小或采用统一extents大小

本地治理表空间有自动分配(AUTOALLOCATE)和统一大小分配(UNIFORM)两种空间分配方式,自动分配方式(AUTOALLOCATE)是由系统来自动决定extents大小,而统一大小分配(UNIFORM)则是由用户指定extents大小。这两种分配方式都提高了空间治理效率。

3.减少了数据字典之间的竞争

因为本地治理表空间通过维持每个数据文件的一个位图来跟踪在此文件中块的空间情况并做更新,这种更新只修改表空间的额度情况,而不涉及到其他数据字典表,从而大大减少了数据字典表之间的竞争,提高了数据库性能。

4.不产生回退信息

因为本地治理表空间的空间治理除对表空间的额度情况做更新之外不修改其它任何数据字典表,因此不产生回退信息,从而大大提高了数据库的运行速度。

5.不需合并相邻的剩余空间

因为本地治理表空间的extents空间治理会自动跟踪相邻的剩余空间并由系统自动治理,因而不需要去合并相邻的剩余空间。同时,本地治理表空间的所有extents还可以具有相同的大小,从而也减少了空间碎片。

6.减少了空间碎片

7.对临时表空间提供了更好的治理

select dbms_metadata.get_ddl('TABLE','fuck','YANWEI') from dual;

不能指定临时表空间为automatic extent allocate 不能指定UNDO表空间为uniform extent allocate

在本地管理的表空间: antomatic

manual(必须指定PCTUSED,FREELISTS AND FREELIST GROUPS)

logging:就是表空间的变化记录在redo stream,然后写到redo log里。 可以在表空间上设置REDO LOG的写方式LOGGING、NOLOGGING和FORCE LOGGING。其中设置FORCE LOGGING则会覆盖对象级的设置,使建立在该表空间上的对象都具有LOGGING的属性。

如果你想把一个字典管理的表空间转换成本地管理的表空间,利用DBMS_SPACE_ADMIN.TABLESPACE_MIGRATE_TO_LOCAL包

利用TOAD或者select dbms_metadata.get_ddl('TABLESPACE','TABLESPACENAME','') FROM DUAL查询建立表空间的语句。(必须大写)

select dbms_metadata.get_ddl('TABLESPACE','USES','SYS') FROM DUAL; 数据库需要要有的是SYSTEM,UNDO。 不能read only是system sysaux。

将表空间设为read only的限制条件:

1) 表空间必须online

2) 在线备份该表空间时不能设为read only

3) 系统会等待当前事务完成

4) 不能包含活动回滚段

临时表空间:排序,存放临时段(临时表)。不能offline。

Temp表空间的限制:不能在没有新的临时表空间的情况下删除当前的临时表空间,不能被offline或改为永久表空间。 UNDO只能用本地管理。

移动数据文件:

1)将对应的表空间offline(系统会等待当前事务结束)

2)alter tablespace user rename datafile '*01.dbf' to '*02.dbf';

3)对应的表空间online

重命名系统表空间

1) sql>shutdown immediate;

2) sql>startup mount;

3) sql>alter database rename file '*1.dbf' to '*2.dbf';

Obtaining tablespace and data file information can also be obtained by querying the following: ? Tablespace information: - DBA_TABLESPACES - V$TABLESPACE ? Data file information: - DBA_DATA_FILES - V$DATAFILE

? Temp file information: - DBA_TEMP_FILES - V$TEMPFILE

建立表空间

CREATE TABLESPACE data01

DATAFILE '/oracle/oradata/db/DATA01.dbf' SIZE 500M

UNIFORM SIZE 128k; #指定区尺寸为128k,如不指定,区尺寸默认为64k

删除表空间

DROP TABLESPACE data01 INCLUDING CONTENTS AND DATAFILES;

一、建立表空间

CREATE TABLESPACE data01

DATAFILE '/oracle/oradata/db/DATA01.dbf' SIZE 500M

UNIFORM SIZE 128k; #指定区尺寸为128k,如不指定,区尺寸默认为64k

二、建立UNDO表空间

CREATE UNDO TABLESPACE UNDOTBS02

DATAFILE '/oracle/oradata/db/UNDOTBS02.dbf' SIZE 50M

#注意:在OPEN状态下某些时刻只能用一个UNDO表空间,如果要用新建的表空间,必须切换到该表空间:

ALTER SYSTEM SET undo_tablespace=UNDOTBS02;

三、建立临时表空间

CREATE TEMPORARY TABLESPACE temp_data

TEMPFILE '/oracle/oradata/db/TEMP_DATA.dbf' SIZE 50M

四、改变表空间状态

1.使表空间脱机

ALTER TABLESPACE game OFFLINE;

如果是意外删除了数据文件,则必须带有RECOVER选项

ALTER TABLESPACE game OFFLINE FOR RECOVER;

2.使表空间联机

ALTER TABLESPACE game ONLINE;

3.使数据文件脱机

ALTER DATABASE DATAFILE 3 OFFLINE;

4.使数据文件联机

ALTER DATABASE DATAFILE 3 ONLINE;

5.使表空间只读

ALTER TABLESPACE game READ ONLY;

6.使表空间可读写

ALTER TABLESPACE game READ WRITE;

五、删除表空间

DROP TABLESPACE data01 INCLUDING CONTENTS AND DATAFILES;

六、扩展表空间

首先查看表空间的名字和所属文件

select tablespace_name, file_id, file_name, round(bytes/(1024*1024),0) total_space from dba_data_files

order by tablespace_name;

1.增加数据文件

ALTER TABLESPACE game

ADD DATAFILE '/oracle/oradata/db/GAME02.dbf' SIZE 1000M;

2.手动增加数据文件尺寸

ALTER DATABASE DATAFILE '/oracle/oradata/db/GAME.dbf' RESIZE 4000M;

3.设定数据文件自动扩展

ALTER DATABASE DATAFILE '/oracle/oradata/db/GAME.dbf AUTOEXTEND ON NEXT 100M

MAXSIZE 10000M;

设定后查看表空间信息

SELECT A.TABLESPACE_NAME,A.BYTES TOTAL,B.BYTES USED, C.BYTES FREE, (B.BYTES*100)/A.BYTES \FROM SYS.SM$TS_AVAIL A,SYS.SM$TS_USED B,SYS.SM$TS_FREE C WHERE A.TABLESPACE_NAME=B.TABLESPACE_NAME AND A.TABLESPACE_NAME=C.TABLESPACE_NAME;

1 oracle数据库如何增加表空间大小:

两种方法,一种是为表空间增加数据文件

alter tablespace users add datafile 'c:oracleora81oradatasiduser002.dbf' size 100M; alter tablespace users add DATAFILE '/dev/rr_ttbbxxA_4g' size 3960M;

另一种方法是增加表空间原有数据文件尺寸(裸设备如果最大了就无法扩展,不同于windows文件,需要采用

第一种方法,再次增加一个裸设备):

alter database datafile 'c:oracleora81oradatasidusers.dbf' resize 1000M; alter database DATAFILE '/dev/rr_ttbbxxA_4g' resize 3960M;

修改某些参数得命令:alter database

alter database DATAFILE '/dev/rttbbxxA_4g' AUTOEXTEND ON NEXT 256K MAXSIZE UNLIMITED;

2 在 Oracle Database 10g 中,您可以类似地为用户指定一个默认表空间。

在数据库创建期间,CREATE DATABASE 命令可以包含子句 DEFAULT TABLESPACE 。 在创建之后,您可以通过发出以下命令来使一个表空间变成默认表空间。 ALTER DATABASE DEFAULT TABLESPACE ;

3 删除表空间

DROP TABLESPACE TableSpaceName [INCLUDING CONTENTS [AND DATAFILES]]

ORACLE数据库名词解释 ORACLE数据库名词解释 关键字: Database 收藏

一:首先对几个有关模式对象进行下说明

二:AUTOEXTNED_CLAUSE相关参数的说明及建议

三:STORAGE主要相关参数的说明及建议

四:建表时一些可能影响系统性能的参数的说明

一:首先对几个有关模式对象进行下说明

数据块(block):也叫逻辑块或ORACLE块,它是数据库进行I/O的最小单位。一个数据库块对应硬盘上的一个或多个物理块,它决定于建库时所使用的初始化参数DB_BLOCK_SIZE。数据库块的大小也决定了SGA中每一个数据库缓冲区的大小。

范围(extent):范围是数据库存储空间分配的逻辑单位,它由一组连续的数据块所组成。当数据库的对象(如表、列等)增长时,空间就被分配给范围。

段(segment): 是由一个或多个范围组成的范围集,它包含一个表空间内特定逻辑存储结构的所有数据。一个段是一个能被建立的逻辑结构,它占有存储,并且能增长,当一个段中的所有空间被用完时,ORACLE就分配它一个新的范围,但是一个段不能跨越表空间。

表空间(tablespace):一个数据库从逻辑上来说是由一个或多个表空间所组成,表空间是数据库中物理编组的数据仓库。每一个表空间是由段所组成,一个表空间存放一个或多个数据库的物理文件。一个数据库中的数据被逻辑地存储在表空间上。

行链锁:当把一个包含LONG类型的列数据行存储到一个数据库中时,则该行就可能被存储在两个或多个相链接的数据块中,这种现象叫行链锁。

迁移:当数据库块中的行被更新时,其行长可能增长,此时可能会出现块的自由空间被用完,而使行被移至下一数据库块,这种现象叫迁移。不论是行链锁还是迁移都将会影响系统访问数据的效率,因为ORACLE是以数据块为单位进行读取的,所以ORACLE在访问一个行链锁或迁移行时就必须扫描多个数据块,降低I/O性能也就是影响系统性能。

二:AUTOEXTNED_CLAUSE相关参数的说明及建议 AUTOEXTEND

OFF: 当AUTOEXTEND开关设置为OFF时数据文件将不能进行自动扩展。

ON: 当AUTOEXTEND开关设置为ON时数据文件在空间用完时将自动进行扩展。

NEXT:在AUTOEXTEND开关设为ON时,对指定该参数,表示数据文件每次向外扩展的字节数。MAXSIZE:指定允许数据文件向外扩展的最大空间大小。(有了此参数后面的UNLIMITED就不用)。UNLIMITED:表示不限止分配给数据文件的磁盘空间。(有了此参数那MAXSIZE就不用)。

一般建议在建立数据文件时都指定允许其扩展,对于回滚段可设置为UNLIMITED,以防止事务大多时回滚段可以有更大的扩展空间;对于将来在其空间上要建立数据量较大增长较快的表时,应该给它指定个较大的MAXSIZE值。

三:STORAGE主要相关参数的说明及建议 INITIAL:

此参数指定分配给段的第一个范围的字节量,其缺省值相当于5个数据库块,最小值为相当于2个数据库块的大小。最大值要依赖于操作系统。该参数一般设定为该对象可能增长到的最大值稍大30%或更大些到预计可能大小的2倍。

NEXT:

分配给一个段的下一个增量范围的字节量,该参数的值一般设置等于INITIAL的值。MAXEXTENTS是能分配给段的范围总数。对于我们自己建立的表在磁盘空间允许时一般把它设为UNLIMITED(无限制)。

MINEXTENTS

是段建立时分配给它的范围总数,一般为1个范围。回滚段最少应为2个范围,应尽可能再大一些

PCTINCREASE

是一个百分数,每一个增量范围都在最新分配的增量范围上增长这个百分数。缺省值是50%,但在回滚段中此参数应设置为0。对于一般的表应把它设置为0,但对于一些修改频繁且增长很快的表应给它设置个较大的PCTINCREASE参数值,

OPTIMAL(此参数只对回滚段而言)

它指定在回滚段空闲时系统对回滚段回收的位置,当回滚段比OPTIMAL大时,ORACLE就能重新分配范围,从而维护其大小。以下几点建议可供参考:

1、于长时间运行的更新事务的回滚段,应该分配一个高的OPTIMAL参数值,以避免过多的分配和重新分配。

2、对于长时间运行查询的回滚段,为了保证在查询的同时能用于更新信息的事务,它应该有一个大的OPTIMAL参数值,以免错误快照太老。于短时间运行更新事务和短时间运行查询事务的回滚段,应该有一个较小的OPTIMAL参数值,以便增加回滚段的高速缓冲存储器。ORACLE具有范围动态重新分配的性能,其特点是:一个回滚段可以有一个最佳的尺寸,最佳尺寸是在段建立或修改时指定的。一旦一些活动事务被删除,回滚段将收缩到最佳尺寸(OPTIMAL)。(在指定存储参数时,应当遵循的的方针:即最大的使用连续的自由空间和防止数据文件碎片化。如果不控制范围的分配,则会由于过量的I/O操作和操作系统文件的碎片化而使系统性能下降。减少碎片的办法是使一个段符合INITIAL范围,并且设置PCTINCREASE适合于扩大的增量范围)以上参数在对clusters、 indexes、 rollback segments、 snapshots、 snapshot logs、 tables、 tablespaces、 partitions等对象进行创建或修改时进行设置。其中INITIAL、MINEXTENTS为在创建时设置,已后就不能对它进行修改;

MAXEXTENTS、NEXT、PCTINCREASE、OPTIMAL都可以在对象创建后根据情况对其进行重新设置。

3、表空间(TABLESPACE)与建立在其上的对象在STORAGE参数的关系

在建立表空间(TABLESPACE)时可以设置有关存储参数(STORAGE),那么以后建立在其上的对象都将可以继承这些参数。这些参数只是一个较合理的设置,一般情况下建立在此表空间上的对象可以继承它。但有时可能有些对象较特殊,比如:对于一些修改频繁且数据量较大的对象,就应该给它个较大的NEXT参数值和较大的PCTINCREASE参数值,以避免范围的频繁删除-分配所导致的物理文件的碎片化。在这种情况下就应该在建对象时为此对象设置特有的STORAGE参数值。

四:建表时一些可能影响系统性能的参数的说明 1、自由空间的控制及相关参数的说明

对于插入、更新和删除数据库块中的行来说,可通过指定PCTFREE和PCTUSED空间参数的值来控制自由空间的使用,减少上面所讲到的“行链锁”和“迁移”:

PCTFREE:该参数用于指定在向块中插入新行时应该保留的自由空间的百分数,该保留空间用于修改已包含在该块中的行时使用。比如在建表CREATE TABLE 语句中指定该参数为:PCTFREE=20,则在向该表插入新的数据行时,其每个数据块空间最多只能使用80%,一旦达到80%,就不能再向该块插入数据行。留下的20%空间留作此后修改该块中的行时使用。

PCTUSED:该参数是一个限定值,其目的是控制向一个低于PCTUSED所指定的值时,。当通过删除行或更新行(减少了列的存储使用量)而使数据库块的使用百分数ORACLE又许可向该块插入新的数据行。

所以在建表时可以根据表的特性和将来系统对表所要进行的操作对其设置一个合理的值。但两参数之和要小于或等于100((PCTFREE+PCTUSED)<= 100)。利用PCTFREE和PCTUSED对块的自由空间进行控制:

1. 当选择较低的PCTFREE值时能允许向数据块中插入更多的数据行,使其填的更满,这样可节约数据块,使行移动少;但如果有频繁删除操作时,就需要频繁的空间再组织操作从而增加处理代价。

2. 当选择较高的PCTFREE参数时,可为未来的更新操作提供更多的空间;减少空间再组织,从而降低处理代价,减少链锁行,但它需要更多的数据库块来存储数据,而且如果PCTFREE参数值太高,那么装入一个块的数据行就越少,因为ORACLE总是以块为单位读,块的数据少那每次读的数据就少,这样将影响访问数据的效率。

3. 当选择较低的PCTUSED时,可降低处理代价(因为数据库块空闲的机会少),增加未用空间,但容易造成碎片增多。

4. 当选择较高的PCTUSED时,可改善空间使用,但会增加处理代价(因为数据库块经常呈现空闲状态)

2、建表时考虑对INITRANS和MAXTRANS参数的设置

这两个参数是对数据块访问进行控制,合理调整两个参数也将尽量减少用户访问时的冲突,对所有数据的访问最终都是对数据块的访问。

INITRANS:

此参数指定在对象的每一个数据块中为指定数目的事务项预分配的空间,这样当事务进入数据块时系统就不必动态地来为事务项分配空间,其默认值为1。

MAXTRANS:

此参数指定能够并发进入一个数据块的最大事务数目,这也就限制了在任何特定的时间事务项在一个数据块所能占用的空间大小。

说明:对于用户数量较大的情况,就应将这两个参数都设得大些,对于用户较少的情况,相应事务数目也不会太多,可以设得小些,以节省空间,另外要考虑对象的大小,对于大对象,数据分散在许多数据块中,这样对同一数据块访问的可能性较小,则可考虑将这两个参数设小些,而对于较小的表,也许用不了几个数据块当用户多时,对同一块的访问可能性很大,就需要将它们设得大些。

在建表时应分析在将来开发的系统中将对表进行什么样的操作,对于在系统中要对表进行的经常性的查询的字段应为其建立索引,这样在系统中就可以利用此索引进行查询以提高查询的速度。同时在建索引时,应最好将索引存放在不同的表空间中,并且最好是存放在不同的磁盘上,这样在处理数据时就可以充分利用磁盘I/O,使数据和索引在不同的I/O上进行,以提高访问速度。

接下来是实际工作中常常使用的操作 --查看block_size大小

select * from USER_TABLESPACES; select * from DBA_TABLESPACES; --查看用户的某个表占据的空间大小

select sum(bytes)/1024/1024||' M 字节' from user_extents where SEGMENT_NAME = upper('&TABLE_NAME');

--查看用户的某个表的段空间大小

select sum(bytes)/1024/1024||' M 字节' from user_segments where SEGMENT_NAME = upper('&TABLE_NAME');

--查看存储文件的空间分配详情和临时空间的大小

select tablespace_name, sum(bytes) / 1024 / 1024 / 1024||'GB' from dba_data_files group by tablespace_name

union all

select tablespace_name, sum(bytes) / 1024 / 1024 / 1024||'GB' from dba_temp_files group by tablespace_name order by 2;

--这个是一个比较各个空间的使用情况的查询语句 select tablespace_name,

sum(bytes) / 1024 / 1024 / 1024 || ' GB', 'user_segments' from user_segments group by tablespace_name union all

select tablespace_name,

sum(bytes) / 1024 / 1024 / 1024 || ' GB', 'dba_segments' from dba_segments

group by tablespace_name union all

select tablespace_name,

sum(bytes) / 1024 / 1024 / 1024 || ' GB', 'dba_data_files' from dba_data_files

group by tablespace_name union all

select tablespace_name,

sum(bytes) / 1024 / 1024 / 1024 || ' GB', 'dba_temp_files' from dba_temp_files group by tablespace_name union all

select tablespace_name,

sum(bytes) / 1024 / 1024 / 1024 || ' GB', 'dba_free_space' from dba_free_space group by tablespace_name order by 1;

--如何建立表空间

表空间的建立有如下几种方式 --Create tablespace in Oracle

--The create tablespace statement is used to create a tablespace. -- --Permanent tablespace--

create tablespace ts_something logging

datafile '/dbf1/ts_sth.dbf' size 32m

autoextend on

next 32m maxsize 2048m extent management local;

create tablespace data datafile '/home/oracle/databases/ora10/data.dbf' size 10M autoextend on maxsize 200M extent management local uniform size 64K;

--Temporary tablespace--

create temporary tablespace temp_mtr tempfile '/dbf1/mtr_temp01.dbf' size 32m

autoextend on

next 32m maxsize 2048m extent management local;

Note, a temporary tablespace has tempfiles, not datafiles. --Undo tablespace--

create undo tablespace ts_undo datafile '/dbf/undo.dbf' size 100M; Misc

More than one datafile can be created with a single create tablespace command: create tablespace ts_sth

datafile 'c:\\xx\\sth_01.dbf' size 4M autoextend off, 'c:\\xx\\sth_02.dbf' size 4M autoextend off, 'c:\\xx\\sth_03.dbf' size 4M autoextend off logging

extent management local;

--如何更改表空间的大小

有两种方式:1--增加数据文件 2--修改数据文件大小

alter database datafile '/ocsdata/ahocs/OCS_TBS_CUST_02.dbf' resize 2047M;

alter tablespace ocs_tbs_cust add datafile '/ocsdata/ahocs/OCS_TBS_CUST_02.dbf' size 2047M;

其他表空间问题

用delete 方法删掉表中的数据后,发现数据所占的空间释放不了,怎么办?

需要你对 high water mark (高水位) 有一个认识 除了truncate表和drop表外

要释放空间,就只能重新建立表(exp/imp等)或者:

Alter table table_name move tablespace tab_space_name; 把表移动到其他表空间,这样索引会失效的 oracle的数据空间是只能增大,不能减小的

Oracle表空间小知识

Oracle表空间,底层以data_file文件形式存放,可以定义一个数据库能打开多少个数据文件,一个表空间可以有1到多个数据文件,一个数据文件只能隶属于一个表空间。 建表时:

1、指定表空间 2、指定扩展大小

普通表只能建在一个表空间,分区表可以建在多个表空间上。

delete只能删除数据,还占着表空间,用truncate命令,但truncate没有条件。

如何将表移动表空间?

ALTER TABLE TABLE_NAME MOVE TABLESPACE_NAME;

如何将索引移动表空间?

ALTER INDEX INDEX_NAME REBUILD TABLESPACE TABLESPACE_NAME;

查询表空间信息?

SELECT * FROM DBA_DATA_FILES;

如何查看各个表空间占用磁盘情况? SQL> col tablespace format a20 SQL> select

b.file_id 文件ID号,

b.tablespace_name 表空间名, b.bytes 字节数,

(b.bytes-sum(nvl(a.bytes,0))) 已使用, sum(nvl(a.bytes,0)) 剩余空间,

sum(nvl(a.bytes,0))/(b.bytes)*100 剩余百分比 from dba_free_space a,dba_data_files b where a.file_id=b.file_id

group by b.tablespace_name,b.file_id,b.bytes order by b.file_id;

事务要求的回滚段空间不够,表现为表空间用满(ORA-01560错误),回滚 段扩展到达参数MAXEXTENTS的值(ORA-01628)的解决办法.

向回滚段表空间添加文件或使已有的文件变大;增加MAXEXTENTS的值。

如何监控表空间的I/O 比例?

select B.tablespace_name name,B.file_name \A.phyblkrd pbr,A.phywrts pyw, A.phyblkwrt pbw from v$filestat A, dba_data_files B where A.file# = B.file_id order by B.tablespace_name;

如何知道表在表空间中的存储情况?

select segment_name,sum(bytes),count(*) ext_quan from dba_extents

where tablespace_name='&tablespace_name' and segment_type='TABLE' group by tablespace_name,segment_name;

如何知道索引在表空间中的存储情况? select segment_name,count(*)

from dba_extents where segment_type='INDEX' and owner='&owner' group by segment_name;

DBA_TABLESPACES 所有表空间的描述.

V$TABLESPACE

控制文件中表空间的信息

V$TEMP_EXTENT_MAP

显示所有临时表空间的每一个单元的状态信息.

V$TEMP_SPACE_HEADER

显示每一个临时表空间中每一个文件的聚集信息,涉及每个空间首部中当前使用多少空间和有多少自由空间.

USER_TABLESPACES 可存取的表空间的描述.

USER_TS_QUOTAS 用户的表空间限额.

DATABASE_PROPERTIES

列出当前缺省的临时表空间的名称.

DBA_FREE_SPACE

列出所有表空间中的空闲分区.

DBA_FREE_SPACE_COALESCED 包含表空间中合并空间的统计数据

DBA_TS_QUOTAS

所有用户的表空间的限额.

DBA_UNDO_EXTENTS

在撤消表空间的每个范围的提交时间.

USER_FREE_SPACE

用户可存取表空间中的空闲范围.

TS_PITR_CHECK

提供可能禁止表空间及时点恢复继续的依赖或约束信息

TS_PITR_OBJECTS_TO_BE_DROPPED

列出作为执行表空间及时点恢复的结果而丢失的所有对象.

Oracle高水位标志的概念 Oracle高水位标志的概念

来源:linux宝库 作者:linux宝库 发布时间:2007-09-30

Oracle高水位标志: high-water mark

能够用以下几点对high-water mark进行理解

1.指一个表中曾被用过的最后一个块

2.假如有数据被插入表,high-water mark 就移到到被使用的最后一个块

3.假如有数据被删除,high-water mark的位置不会变

4.high-water mark被储存在表的段头(segment header of the table)

5.当对表执行全表扫描时,oracle server 被任何的块直到high-water mark

另外我的理解如下,

1 假如为表分配了大量的extents , 但这些extent 还没使用能够手工收回。并且有如下两种情况

第一种 minextent

alter table tablename deallocate unused;

将hwm以上任何没使用的空间释放

第二种 minextent >hwm 则释放minextents 以上的空间。

假如要释放hwm以上的空间则使用keep 0。

alter table tablesname deallocate unused keep 0;

2 truncate table命令能够将minextent 之上的空间完全释放。

3 只是将hwm移动,释放的空间不会被其他段使用--

第七章 管理用户 要点:

1.建立和管理数据库帐户 2.建立和管理角色role 3.授权和回收权限

4.通过用户来控制资源的利用

Profile:

1》控制资源的占用 2>管理密码

oracle用户管理:

一、创建profile文件。

SQL>Create profile 文件名 limit

FAILED_LOGIN_ATTEMPTS:指定锁定用户的登录失败次数 PASSWORD_LOCK_TIME:指定用户被锁定天数 PASSWORD_LIFE_TIME:指定口令可用天数

PASSWORD_REUSE_TIME:指定在多长时间内口令不能重用

PASSWORD_REUSE_MAX:指定在重用口令前口令需要改变的次数 SESSIONS_PER_USER:限制用户并发会话个数

CPU_PER_SESSION:限制会话所占用的CPU时间(百分之一秒) CPU_PER_CALL:限制每次调用所占用的CPU时间(百分之一秒) CONNECT_TIME:限制会话的总计连接时间(分钟)

IDLE_TIME:限制会话的空闲时间(分钟));

二、创建用户(包括创建角色):

SQL>Create user 用户名 IDENTIFIED BY 口令

Default tablespace 表空间名

TEMPORARY tablespace 临时表空间名 Profile profile文件名

Quota 限制空间大小 on 表空间名; 并给用户授权:

SQL>grant connect ,resource to 用户名;

举例:

-- 创建角色

DROP ROLE ICDYW;

CREATE ROLE ICDYW NOT IDENTIFIED;

GRANT \

GRANT \GRANT \

-- 创建用户

DROP USER ICDMAIN CASCADE;

CREATE USER ICDMAIN IDENTIFIED BY icd DEFAULT TABLESPACE SERVICE_RPT_DAT TEMPORARY TABLESPACE SERVICE_TEMP PROFILE DEFAULT;

GRANT \

GRANT UNLIMITED TABLESPACE TO \

GRANT SELECT ON SYS.V_$MYSTAT TO ICDMAIN; GRANT SELECT ON SYS.V_$SESSION TO ICDMAIN; GRANT SELECT ON SYS.DBA_JOBS TO ICDMAIN;

ALTER USER ICDMAIN DEFAULT ROLE ALL;

三. 改动用户:

一. 修改用户各项参数:(除用户名外其它各项均可以修改) SQL>Alter user 用户名 IDENTIFIED BY 口令

Default tablespace 表空间名

TEMPORARY tablespace 临时表空间名 Profile profile文件名

Quota 限制空间大小 on 表空间名;

将用户加锁:

SQL>Alter user 用户名 ACCOUNT LOCK; - -加锁 ACCOUNT UNLOCK; - -解锁

强制用户修改口令:

SQL>Alter user 用户名 password expire;

四. 删除用户:

用户下没有实体时:

SQL>Drop user 用户名;

用户已创建实体如表和数据时:

SQL>Drop user 用户名 CASCADE; 注意:当前正连接的用户不得删除。 使用CASCADE选项时,用户及实体马上被删除,应再进入数据文件进行物理删除。

五. 监视用户:

查询用户会话信息:(如果有两个用户以同一用户名登录,则可动态查询

SQL>Select username machine , sid , serial # From V$ session;

删除用户会话:

SQL>Alter system kill session 'sid , serial' ;

显示用户的SQL语句:

SQL>Select user _name , SQL _text From V$ open _cursor;

CREATE USER 语句将建立一个用户。当一个用户连接到ORACLE数据库时,它必须被验

证。ORACLE中验证有三种类型:

Database

external

Global

缺省是数据库验证,当用户连接到数据库时,oracle将检测用户是否是数据库的合法用户,并且要提供正确的password.external验证,oracle将只检测用户是否是合法用户,password已经被网络或系统验证了。global验证也是只检测是否是合法用户,password由oraclesecurity server验证。

Database验证用户账号

数据库验证账号是张好的缺省类型,也是最普通的类型。建立一个账号是piyush,口令是welcome的账号,只需执行下面的命令:

CREATE USE piyush IDENTIFIED BY welcome

piyush可以通过下面的语句将口令改变为saraswatt:

ALTER USER piyush IDENTIFIED BY saraswati;

外部验证用户账号

用户账号进入数据库时可以不提供口令,这种情况下代替数据库识别口令的是客户端操作系统。外部验证账号有时也叫OPS$账号,当他们最初在oracle6开始介绍时,oracle账号都有关键字前缀OPS$,这也就是为什么init.ora 参数os_authent_prefix是OPS$--默认特征与oracle6保持一致。os_authent_prefix定义的字符串必须被预处理为用于Oracle外部识别账号的操作系统账号名。创建操作系统用户appl的语句是:

CREATE USER ops$appl IDENTIFIED EATERNALLY

但在通常情况下,os_authent_prefix将被设置为空,像下面这样:

CREATE USER appl IDENTIFIED EATERNALLY

这样效果是一样的,关键字IDENTIFIED EXTERNALLY告诉ORACLE这是一个外部识别账号。

GLOBAL用户账号

GLOBAL类型的用户账号数据库不检测口令,而是由X.509目录服务器检测口令。创建一个GLOBAL类型的用户账号的方法是:

CREATE USER scott IDENTIFIED GLOBALLY AS \ 关键字IDENTIFIED GLOBALLY AS表示建立的是一个GLOBAL类型的用户账号.

创建和更改用户账号

CREATE USER 用于建立用户账号和给用户账号的属性赋值。ALTER USER用于更改用户账号和属性。但CREATE USER语句必须包括用户名和口令。

有部分属性能用CREATER USER和ALTER USER语句设置,下面对是这些的属性具体描述:

给用户分配缺省表空间

表空间(tablespace)是放置表、索引、丛等用户对象的。如果在create user语句中没有包含表空间,那么缺省的是系统表空间。

CREATE USER piyush IDENTIFIED BY saraswati DEFAULTE TABLESPACE user_data;

ALTER USER manoj DEFAULTE TABLESPACE dev1_data;

给用户分配临时表空间

临时表空间,顾名思义是临时存放表、索引等用户对象的临时段。建立方法一样

CREATE USER piyush IDENTIFIED BY saraswati Temporary TABLESPACE user_data;

ALTER USER manoj Temporary TABLESPACE dev1_data;

给用户分配表空间的使用定额

使用定额限制用户在表空间中使用磁盘的数量。定额可以按字节、千字节、兆字节或者无限制来制定。

CREATE USER piyush IDENTIFIED BY saraswati DEFAULT TABLESPACE user_data QUOTA UNLIMITED ON user_data

QUOTA 20M ON tools;

ALTER USER manoj QUOTA 2500K ON tools;

给用户分配一个简表

简表可以限制用户在会话时消耗的资源。这些资源包括:连接数据库的时间,空闲时间,每次会话的逻辑读数据的数量等等,缺省的简表对资源无限制。

CREATE USER piyush IDENTIFIED BY saraswati PROFILE TABLESPACE user_data;

ALTER USER manoj Temporary TABLESPACE dev1_data;

为用户响应指定角色

这个属性只能由ALTER USER语句设置,试图用CREATE USER语句设置将回返回一个例外。

ALTER USER manoj DEFAULT ROLE ALL EXCEPT salary_adm;

为用户的password设定到期时间以便在用户下次登录时更改

当用户的password到期,在下一次登录时将强迫修改password,oracle提示用户输入旧的password,然后输入新的password。这项功能常用于新用户,当新用户用缺省的password登录时必须修改立即修改password.

ALTER USER manoj IDENTIFIED BY welcome; ALTER USER manoj PASSWORD EXPIRE;

锁定账号,是用户不能登录

ALTER USER ql ACCOUNT LOCK

对账号解锁,以便用户能登录数据库

ALTER USER ql ACCOUNT UNLOCK

权限和角色 权限和角色

权限允许用户访问属于其它用户的对象或执行程序,ORACLE系统提供三种权限:

Object 对象级

System 系统级

Role 角色级

这些权限可以授予给用户、特殊用户public或角色,如果授予一个权限给特殊用户\(用户public是oracle预定义的,每个用户享有这个用户享有的权限),那么就意味作将该权限授予了该数据库的所有用户。

对管理权限而言,角色是一个工具,权限能够被授予给一个角色,角色也能被授予给另一个角色或用户。用户可以通过角色继承权限,除了管理权限外角色服务没有其它目的。权限可以被授予,也可以用同样的方式撤销。

建立和使用角色

如前所诉,角色存在的目的就是为了使权限的管理变得轻松。建立角色使用CREATE ROLE语句,他的语法如下:

CREATE ROLE role_name IDENTIFIED BY password CREATE ROLE role_name IDENTIFIED EXTERNALLY CREATE ROLE role_name IDENTIFIED GLOBALLY

缺省情况下建立的角色没有password或者其他的识别。如果使用IDENTIFIED BY 子句建立,那么角色不会自动响应,必须用SET ROLE激活。

SET ROLE role_name IDENTIFIED BY password

EXTERNALLY和GLOBALLY类型的角色由操作系统和ORACLE Service server验证。通常用户需要权限修改应用程序中使用的表单中的数据,但是只有在应用程序运行时而不是在使用ad hoc工具时,这种上下文敏感安全可以通过有PASSWORD的角色来实现。当用户在应用程序内部连结数据库时,代码将执行SET ROLE命令,通过安全验证。所以用户不需要知道角色的password,也不需要自己输入SET ROLE命令。

对象权限

对象权限就是指在表、视图、序列、过程、函数或包等对象上执行特殊动作的权利。有九种不同类型的权限可以授予给用户或角色。如下表:

权限 ALTER DELETE EXECUTE INDEX INSERT READ REFERENCE SELECT

UPDATE

Directory no no no no no yes no no no function no no yes no no no no no no procedure no no yes no no no no no no package no no yes no no no no no no

DB Object no no yes no no no no no no Libary no no yes no no no no no no

Operation no no yes no no no no no no Sequence yes no no no no no no no no Table yes yes no yes yes no yes yes yes Type no no yes no no no no no no View no yes no no yes no no yes yes

对象由不止一个权限,特殊权限ALL可以被授予或撤销。如TABLE的ALL权限就包括:

SELECT,INSERT,UPDATE和DELETE,还有INDEX,ALTER,和REFERENCE。

如何看这个表我们以ALTER权限为例进行说明

ALTER权限

允许执行ALTER TABLE和LOCK TABLE操作,ALTER TABLE可以进行如下操作:

. 更改表名

. 增加或删除列

. 改变列的数据类型或大小

. 将表转变为分区表

在SEQUENCE上的ALTER权限允许执行ALTER Sequence语句,重新给sequence分配最小值、增量和缓冲区大小。

系统权限

系统权限需要授予者有进行系统级活动的能力,如连接数据库,更改用户会话、建立表或建立用户等等。你可以在数据字典视图SYSTEM_PRIVILEGE_MAP上获得完整的系统权限。对象权限和系统权限都通过GRANT语句授予用户或角色。需要注意的是在授予对象权限时语句应该是WITH GRANT OPTION子句,但在授予系统权象时语句是WITH ADMIN OPTION,所以在你试图授予系统权限时,使用语句WITH GRANT OPTION系统会报告一

个错误:ONLY ADMIN OPTION can be specified。在考试中要特别注意这个语法和错误信息。回收系统特权

SQL>REVOKE CREATE USER,ALTER USER,DROP USER

>FROM jxzy_new

//但没有级联回收功能

显示已被授予的系统特权(某用户的系统级特权) SQL>SELECT*FROM sys.dba_sys_privs

2.4 对象特权管理与控制

ORACLE对象特权指用户在指定的表上进行特殊操作的权利。这些特殊操作包括增、删、改、查看、执行(存储过程)、引用(其它表字段作为外键)、索引等。

授予对象特权

SQL>GRANT SELECT,INSERT(office_num,office_name),

>UPDATE(desc)ON office_organization

>TO new_adminidtrator

>WITH GRANT OPTION;

//级联授权

SQL>GRANT ALL ON office_organization

>TO new_administrator

回收对象特权

SQL>REVOKE UPDATE ON office_orgaization

>FROM new_administrator

//有级联回收功能

SQL>REVOKE ALL ON office_organization

>FROM new_administrator

显示已被授予的全部对象特权

SQL>SELECT*FROM sys.dba_tab_privs

角色和角色权限

角色权限就是将属于用户的权限授予一个角色。任何权限都可以授予给一个角色。授予系统权限给被授予者必须使用WITH_ADMIN_OPTION子句,在会话期间通过SET ROLE语句授予或撤销角色权限。然而,角色权限不能依靠存储在SQL中的权限。如果函数、程序、包、触发器或者方法使用另一个计划拥有的对象,那么就必须直接给对象的拥有者授权,这是因为权限不会在会话之间改变。

授予和撤销权限

给用户或者角色授予权限使用GRANT 语句,GRANT语句的语法如下:

GRANT ROLE(或system privilege) TO user(role,Public) WITH ADMIN OPTION(可选)

对象权限被授予 WITH GRANT OPTION,

权限和数据字典

数据字典是ORACLE存储有关数据库结构信息的地方,数据本身存放在其他地方,数据字典由表和视图组成。在考试中关于数据字典最容易考的内容是:查看那一类权限已经被授予。比如DBA_TAB_PRIV包含了用户授予给另一用户的对象权限和在授予时是否带有WITH GRANT OTPION子串的信息。注意DBA_TAB_PRIV不仅仅包含了对表的权限的关系,他还包括函数、包、队列等等上的权限的关系。下表列出了所有的权限和角色的数据字典视图:

表: 权限的数据字典视图

视图 作用

ALL_COL_PRIVS 表示列上的授权,用户和PUBLIC是被授予者 ALL_COL_PRIVS_MADE 表示列上的授权,用户是属主和被授予者 ALL_COL_RECD 表示列上的授权,用户和PUBLIC是被授予者

ALL_TAB_PRIVS 表示对象上的授权,用户是PUBLIC或被授予者或用户是属主 ALL_TAB_PRIVS_MADE 表示对象上的权限,用户是属主或授予者

ALL_TAB_PRIVS_RECD 表示对象上的权限, 用户是PUBLIC或被授予者 DBA_COL_PRIVS 数据库列上的所有授权

DBA_ROLE_PRIVS 显示已授予用户或其他角色的角色 DBA_SYS_PRIVS 已授予用户或角色的系统权限 DBA_TAB_PRIVS 数据库对象上的所有权限 ROLE_ROLE_PRIVS 显示已授予用户的角色

ROLE_SYS_PRIVS 显示通过角色授予用户的系统权限 ROLE_TAB_PRIVS 显示通过角色授予用户的对象权限 SESSION_PRIVS 显示用户现在可利用的所有系统权限

USER_COL_PRIVS 显示列上的权限,用户是属主、授予者或被授予者 USER_COL_PRIVS_MADE 显示列上已授予的权限,用户是属主或授予者 USER_COL_PRIVS_RECD 显示列上已授予的权限,用户是属主或被授予者 USER_ROLE_PRIVS 显示已授予给用户的所有角色 USER_SYS_PRIVS 显示已授予给用户的所有系统权限 USER_TAB_PRIVS 显示已授予给用户的所有对象权限

USER_TAB_PRIVS_MADE 显示已授予给其他用户的对象权限,用户是属主 USER_TAB_PRIVS_RECD 显示已授予给其他用户的对象权限,用户是被授予者

数据库用户和schemes

schemas是一个用户在数据库拥有的对象的集合,schemas和对应的用户一致: 表tables 指针triggers 索引indexes 视图view

序列sequences

存储程序单元stored programs units 同义词synonyms

用户定义的数据类型 user-defined data types 数据库连接 database links

第八章 管理schema对象 要点:

1.建立和改变表 2.定义限制

3.建立视图和索引

数据库命名规则 1.1到30个字符

2.数据库名字只能是8个字符内 3.数据库连接可以是128个字符 4.必须以字符开始

数据库对象命名规则 1.阿拉伯字符 2.包括_ 3.包括$和# 4.不能重名

namespaces

下列对象在相同的namespace 1)tables 2)views 3)sequences

4)private synonms

5)stand-alone procedure 6)packages

7)materialized views 8)user-defined types

下列有他们自己的namespaces 1)索引indexes 2)限制constraints 3)clusters

4)database triggers 5)private database links 6)dimensions(尺度)

在oracle中sequence就是所谓的序列号,每次取的时候它会自动增加,一般用在需要按序列号排序的地方。 1、Create Sequence

你首先要有CREATE SEQUENCE或者CREATE ANY SEQUENCE权限, CREATE SEQUENCE emp_sequence INCREMENT BY 1 -- 每次加几个 START WITH 1 -- 从1开始计数 NOMAXVALUE -- 不设置最大值 NOCYCLE -- 一直累加,不循环 CACHE 10;

一旦定义了emp_sequence,你就可以用CURRVAL,NEXTVAL CURRVAL=返回 sequence的当前值

NEXTVAL=增加sequence的值,然后返回 sequence 值 比如:

emp_sequence.CURRVAL

emp_sequence.NEXTVAL

可以使用sequence的地方:

- 不包含子查询、snapshot、VIEW的 SELECT 语句 - INSERT语句的子查询中 - iNSERT语句的VALUES中 - UPDATE 的 SET中

可以看如下例子:

INSERT INTO emp VALUES

(empseq.nextval, 'LEWIS', 'CLERK',7902, SYSDATE, 1200, NULL, 20);

SELECT empseq.currval FROM DUAL;

但是要注意的是:

- 第一次NEXTVAL返回的是初始值;随后的NEXTVAL会自动增加你定义的INCREMENT BY值,然后返回增加后的值。CURRVAL 总是返回当前SEQUENCE的值,但是在第一次NEXTVAL初始化之后才能使用CURRVAL,否则会出错。一次NEXTVAL会增加一次SEQUENCE的值,所以如果你在同一个语句里面使用多个NEXTVAL,其值就是不一样的。明白?

- 如果指定CACHE值,ORACLE就可以预先在内存里面放置一些sequence,这样存取的快些。cache里面的取完后,oracle自动再取一组到cache。 使用cache或许会跳号, 比如数据库突然不正常down掉(shutdown abort),cache中的sequence就会丢失. 所以可以在create sequence的时候用nocache防止这种情况。

2、Alter Sequence

你或者是该sequence的owner,或者有ALTER ANY SEQUENCE 权限才能改动sequence. 可以alter除start至以外的所有sequence参数.如果想要改变start值,必须 drop sequence 再 re-create .

Alter sequence 的例子

ALTER SEQUENCE emp_sequence INCREMENT BY 10 MAXVALUE 10000

CYCLE -- 到10000后从头开始 NOCACHE ;

影响Sequence的初始化参数:

SEQUENCE_CACHE_ENTRIES =设置能同时被cache的sequence数目。

可以很简单的Drop Sequence DROP SEQUENCE order_seq;

第九章 管理数据 要点:

1.通过SQL管理数据

2.通过Data Pump导入和导出数据 3.用SQL loader load数据

INSERT命令

每次只能插入一行

可以按照别的表一样一致的插入多行

UPDATE 修改

delete删除行

commit和rollback

建立目录

create directory bdump as '/usr/spp/datafiles'; 查询

select * from dba_directories;

完整限制: 外键:

1.insert and update:值必须在附表中存在

2.delete:外表对应附表的一行不能被删除。 NOT null:

insert:不能insert空值 update:不能改变值为空值

UNIQUE:

insert and update:不能有相同的值

主键:

具有UNIQUE 和 not null的值

check:

必须符合限制的条件

这两天在试ora10g的data pump,将执行的步骤贴出来大家看看

由于我的试验的数据库数据不是很多,所以data pump的速度上的优势并不明显,但是备份

的文档大小可比exp出来的大不少。

-----lisalan 20040825 oracle data pump ----创建目录

$ mkdir /home/oracle/backup/data/expdp

----用system登陆为用户赋权限

sql> grant create any directory for ***; 假如需要删除用户目录的话,需要: sql> grant drop any directory for ***;

----用***登陆创建目录

sql> create directory backup_expdp_dir as /home/oracle/backup/data/expdp 假如需要删除目录的话,需要: sql> drop directory backup_expdp_dir;

----备份***用户数据(保留七天的备份数据) backup_expdp.sh #!/bin/sh

. $home/.bash_profile

day=`date +%a`

file_target=backup_expdp_`expr $day`.dmp file_log=backup_expdp_`expr $day`.log

cd /home/oracle/backup/data/expdp rm -f $file_target rm -f $file_log

export file_target file_log

expdp ***/***@*** schemas=*** directory=backup_expdp_dir dumpfile=$file_target logfile=$file_log job_name=cases_export parallel=4

----导入的命令行 impdp ***/***@*** schemas=*** directory=backup_expdp_dir dumpfile=backup_expdp_fri.dmp logfile=backup_expdp_in.log job_name=cases_export

data pump

利用 Oracle Database 10g 实用工具数据移动得到了很大的提高。

迄今为止,导出/导入工具集仍是跨多个平台转移数据所需劳动强度最小的首选实用工具,尽管人们常常抱怨它速度太慢。导入只是将每条记录从导出转储文件中读出来,然后使用常见的 INSERT INTO 命令将其插入到目标表中,因此导入可能是个很慢的过程,这一点并不让人感到吃惊。

进入 Oracle Data Pump,Oracle Database 10g 中的导出/导入工具包的更新更快的同类工具,它被设计来成倍地加速这个过程。

Data Pump 反映了整个导出/导入过程的彻底革新。它不是使用常见的 SQL 命令,而是应用专用 API 来以更快得多的速度加载和卸载数据。在我的测试中,我看到导出性能比在直接模式下提高了 10-15 倍,导入过程性能提高了 5 倍。此外,与使用导出实用工具不同,它还能够只取出特定类型的对象(如过程)。

Data Pump 导出

这个新的实用工具称为 eXPdp,以和原来的导出 exp 区分开。在本例中,我们将用 Data Pump 来导出一个大表 CASES,大小约为 3GB。Data Pump 在服务器端使用文件处理来创建和读取文件;因此,目录作为位置使用。在这种情况下,我们将使用文件系统 /u02/dpdata1 来保存转储文件。

create Directory dpdata1 as '/u02/dpdata1';

grant read, write on directory dpdata1 to ananda;

接下来,我们将导出数据:

expdp ananda/abc123 tables=CASES directory=DPDATA1 dumpfile=expCASES.dmp job_name=CASES_EXPORT

让我们来分析该命令的各个部分。用户 ID/口令组合、表和转储文件参数的意义是显而易见的。与原来的导出不同,文件是在服务器(不是客户端)上创建的。位置由目录参数值 DPDATA1 指定,它指向之前创建的 /u02/dpdata1。这个进程还在目录参数指定的位置上创建一个日志文件(同样在服务器上)。默认地,这个进程使用一个名称为 DPUMP_DIR 的目录;因此可以创建它来代替 DPDATA1。

注意上面的参数 job_name,这是个特殊的参数,在原来的导出中没有。所有的 Data Pump 工作都通过作业来完成。Data Pump 作业 - 与 DBMS 作业不同 - 只是服务器进程,它代表主进程处理数据。主进程(称为主控制进程)通过高级队列 (AQ) 来协调这项工作;它通过在运行期内创建的一个特殊的表(称为主表)来实现这个目的。在我们的例子中,如

果您在 expdp 运行时检查用户 ANANDA 的模式 ,您将注意到一个表 CASES_EXPORT 的存在(对应参数 job_name)。当 expdp 结束时,这个表被丢弃。

导出监控

当 Data Pump Export (DPE) 运行时,按 Control-C;它将阻止消息在屏幕上显示,但不停止导出进程本身。相反,它将显示 DPE 提示符(如下所示)。进程现在被认为处于“交互式”模式:

Export>

这种方法允许在这个 DPE 作业上输入几条命令。要查看概要,在提示符下使用 STATUS 命令:

Export> status

Job:CASES_EXPORT

Operation:EXPORT Mode:TABLE State:EXECUTING Degree: 1

Job Error Count: 0

Dump bytes written = 2048

Worker 1 Status:

State:EXECUTING Object Schema:DWOWNER Object Name:CASES

Object Type:TABLE_EXPORT/TBL_TABLE_DATA/TABLE/TABLE_DATA Completed Objects: 1 Total Objects: 1

Completed Rows: 4687818

记住,这只是状态显示。导出在后台工作。要继续在屏幕上查看消息,从 Export> 提示符下使用命令 CONTINUE_CLIENT。

并行操作

您可以通过 PARALLEL 参数为导出使用一个以上的线程来显著地加速作业。每个线程创建一个单独的转储文件,因此参数 dumpfile 应当拥有和并行度一样多的项目。

您可以指定通配符作为文件名,而不是显式地输入各个文件名,例如:

expdp ananda/abc123 tables=CASES directory=DPDATA1

dumpfile=expCASES_%U.dmp parallel=4 job_name=Cases_Export

注意 dumpfile 参数拥有一个通配符 %U,它指示文件将按需要创建,格式将为 expCASES_nn.dmp,其中 nn 从 01 开始,然后按需要向上增加。

在并行模式下,状态屏幕将显示四个工作进程。(在默认模式下,只有一个进程是可见的。)所有的工作进程同步取出数据,并在状态屏幕上显示它们的进度。

分离访问数据文件和转储目录文件系统的输入/输出通道是很重要的。否则,与维护 Data Pump 作业相关的开销可能超过并行线程的效益,并因此而降低性能。并行方式只有在表的数量多于并行值并且表很大时才是有效的。

数据库监控

您还可以从数据库视图获得关于运行的 Data Pump 作业的更多信息。监控作业的主视图是 DBA_DATAPUMP_JOBS,它将告诉您在作业上有多少个工作进程(列 DEGREE)在工作。另一个重要的视图是 DBA_DATAPUMP_SESSIONS,当它与上述视图和 V$SESSION 结合时将给出主前台进程的会话 SID。

select sid, serial#

from v$session s, dba_datapump_sessions d where s.saddr = d.saddr;

这条指令显示前台进程的会话。更多有用的信息可以从警报日志中获得。当进程启动时,MCP 和工作进程在警报日志中显示如下:

kupprdp:master process DM00 started with pid=23, OS id=20530 to execute - SYS.KUPM$MCP.MAIN('CASES_EXPORT', 'ANANDA');

kupprdp:worker process DW01 started with worker id=1, pid=24, OS id=20532 to execute - SYS.KUPW$WORKER.MAIN('CASES_EXPORT', 'ANANDA');

kupprdp:worker process DW03 started with worker id=2, pid=25, OS id=20534 to execute - SYS.KUPW$WORKER.MAIN('CASES_EXPORT', 'ANANDA');

它显示为数据泵操作启动的会话的 PID。您可以用以下查询找到实际的 SID:

select sid, program from v$session where paddr in (select addr from v$process where pid in (23,24,25));

PROGRAM 列将对应警报日志文件中的名称显示进程 DM (为主进程)或 DW (为工作进程)。如果一个工作进程使用了并行查询,比如说 SID 23,您可以在视图 V$PX_SESSION 中看到它,并把它找出来。它将为您显示从 SID 23 代表的工作进程中运行的所有并行查询会话:

select sid from v$px_session where qcsid = 23;

从视图 V$SESSION_LONGOPS 中可以获得其它的有用信息来预测完成作业将花费的时间。

select sid, serial#, sofar, totalwork from v$session_longops

where opname = 'CASES_EXPORT' and sofar != totalwork;

列 totalwork 显示总工作量,该列的 sofar 数量被加和到当前的时刻 - 因而您可以用它来估计还要花多长时间。

Data Pump 导入

不过,数据导入性能是 Data Pump 真正出色的地方。要导入先前导出的数据,我们将使用

impdp ananda/abc123 directory=dpdata1 dumpfile=expCASES.dmp job_name=cases_import

导入进程的默认行为是创建表和所有相关的对象,然后在表已存在时产生一个错误。如果您想把数据添加到一个现有的表中,您可以在上述命令行中使用 TABLE_EXISTS_ACTION=APPEND。

和使用 Data Pump 导入一样,在进程中按 Control-C 将进入 Date Pump Import (DPI) 的交互模式;同样,提示符是 Import>。

处理特定对象

您是否有过只需要从一个用户导出特定的过程,以在一个不同的数据库或用户中重新创建这些过程的情况?与传统的导出实用工具不同,Data Pump 允许您只导出特定类型的对象。例如,以下命令让您只导出过程,而不导出其它任何东西 - 不导出表、视图、甚至函数:

expdp ananda/iclaim directory=DPDATA1 dumpfile=expprocs.dmp include=PROCEDURE

要只导出一些特定的对象 - 比如说,函数 FUNC1 和过程 PROC1 - 您可以使用

expdp ananda/iclaim directory=DPDATA1 dumpfile=expprocs.dmp include=PROCEDURE:\\\

这个转储文件充当了源对象的一个备份。您甚至可以用它来创建 DDL 脚本,以供之后使用。一个称为 SQLFILE 的特殊参数允许创建 DDL 脚本文件。

impdp ananda/iclaim directory=DPDATA1 dumpfile=expprocs.dmp sqlfile=procs.sql

该指令在 DPDATA1 指定的目录中创建一个名称为 procs.sql 的文件,并将对象的脚本包含在导出转储文件中

种方法帮助您快速地在另一个模式中创建源对象。

利用参数 INCLUDE 允许您从转储文件中定义要包含或排除的对象。您可以使用子句 INCLUDE=TABLE:\'TAB%'\来仅导出那些名称以 TAB 开头的表。类似地,您可以使用结构 INCLUDE=TABLE:\来排除所有名称以 TAB 开头的表。作为另一种选择,您可以使用 EXCLUDE 参数来排除特定的对象。

通过外部表,Data Pump 还可以用来传输表空间;它非常强大,能够即时地重定义并行方式,将更多的表添加到一个现有的进程中等等

SQL*LOADER的速成教程 SQL*LOADER的速成教程

文/范生

SQL*LOADER是ORACLE的数据加载工具,通常用来将操作系统文件迁移到ORACLE数据库中。SQL*LOADER是大型数据

仓库选择使用的加载方法,因为它提供了最快速的途径(DIRECT,PARALLEL)。现在,我们抛开其理论不谈,用实例来使

您快速掌握SQL*LOADER的使用方法。 首先,我们认识一下SQL*LOADER。

在NT下,SQL*LOADER的命令为SQLLDR,在UNIX下一般为sqlldr/sqlload。 如执行:d:\\oracle>sqlldr

SQL*Loader: Release 8.1.6.0.0 - Production on 星期二 1月 8 11:06:42 2002

(c) Copyright 1999 Oracle Corporation. All rights reserved.

用法: SQLLOAD 关键字 = 值 [,keyword=value,...] 有效的关键字:

userid -- ORACLE username/password control -- Control file name log -- Log file name bad -- Bad file name data -- Data file name discard -- Discard file name

discardmax -- Number of discards to allow (全部默认) skip -- Number of logical records to skip (默认0) load -- Number of logical records to load (全部默认) errors -- Number of errors to allow (默认50)

rows -- Number of rows in conventional path bind array or between direct p ath data saves

(默认: 常规路径 64, 所有直接路径)

本文来源:https://www.bwwdw.com/article/kjs.html

Top