“我是卖油翁”通过精心收集,向本站投稿了9篇如何掌握 Oracle 中的时间间隔型数据数据库教程,下面是小编收集整理后的如何掌握 Oracle 中的时间间隔型数据数据库教程,供大家参考借鉴,希望可以帮助到有需要的朋友。
- 目录
篇1:如何掌握 Oracle 中的时间间隔型数据数据库教程
在9i 版本以前,Oracle 没有内置的方式来记录时间的流逝,DATE型数据用来记录单独的时间点;但是要表达一个时间量(也就是一个间隔),数据库的设计者就必须把时间间隔转换成原始单位秒,然后用一个NUMBER列来保存它。
虽然NUMBER这个数据类型可以以秒为单位准确地表示时间,但是它使得时间的计算变得很困难。比如,60秒是1分钟,60分钟是1个小时,24个小时等于1天――这些数字在以十进制为基础的数字系统中都是非常蹩脚的。
在Oracle 9i中,按照SQL 99标准,增加了时间间隔型数据INTERVAL YEAR TO MONTH 和 INTERVAL DAY TO SECOND,它们和其他几种数据类型一起使得对时间的处理更加准确。TIMESTAMP、TIMESTAMP WITH TIME ZONE和TIMESTAMP WITH LOCAL TIME ZONE等数据类型都把时间的表达精确到了若干分之一秒,而且后面两种还解决了地理位置造成的时间变化。
在SQL和PL/SQL中,你都可以用时间间隔型数据,它们都是用同一种方式规定的:
INTERVAL YEAR[(year_precision)] TO MONTH
INTERVAL DAY[(day_precision)] TO SECOND[(fractional_seconds_precision)]
对于精确数值,规定有缺省值:年和日是两位数,若干分之一秒是六位数。
时间间隔的大小由INTERVAL来表示,后面紧接一个放在单引号中的表达式,以及用来解释该表达式的文字。用YEAR TO MONTH表示时间间隔大小时要在年和月之间用一个连字符(-) 连接。而DAY TO SECOND表示时间间隔大小时要在日和时间之间用一个空格连接。举个例子来说,下面是2年6个月的时间间隔的表示方法:
INTERVAL '2-6' YEAR TO MONTH
下面的例子表示3天12个小时30分钟6.7秒:
INTERVAL '3 12:30:06.7' DAY TO SECOND(1)
时间间隔可以为正,也可以为负。它们可以从各种TIMESTAMP数据类型中加上或者减去,从而得到一个新的TIMESTAMP数据类型。它们之间也可以做加减运算得到新的时间间隔。
列表A说明了怎样创建一个表格来记录一个事件的开始时间和持续时间,如实验等。数据被收集以后,SQL中内置的摘要函数不需要与原始单位秒进行相互转换,就可以报告总的持续时间和平均持续时间。
列表A
CREATE TABLE experiment
(experiment_id NUMBER(9),
experiment_desc VARCHAR2(80),
experiment_start TIMESTAMP,
experiment_duration INTERVAL DAY(1) TO SECOND(4)
);
Table created.
INSERT INTO experiment
VALUES (
1, 'Busted urban myth', '01-JUN-2006 02:00:00 PM',
INTERVAL '1 2:31:15.1250' DAY(1) TO SECOND(4)
);
1 row created.
col experiment_desc format a40
col experiment_start format a30
col experiment_duration format a20
SELECT * FROM experiment;
EXPERIMENT_ID EXPERIMENT_DESC ------------- ---------------------------------------- EXPERIMENT_START EXPERIMENT_DURATION ------------------------------ -------------------- 1 Busted urban myth 01-JUN-06 02.00.00.000000 PM +1 02:31:15.1250
-- Now compute the experiment's ending time
SELECT experiment_id, experiment_start,
experiment_start + experiment_durationexperiment_end
FROM experiment;
EXPERIMENT_ID EXPERIMENT_START ------------- ------------------------------ EXPERIMENT_END --------------------------------------------------------------------------- 1 01-JUN-06 02.00.00.000000 PM 02-JUN-06 04.31.15.125000000 PM
但遗憾的是, TO_CHAR函数中没有包括任何能够映射到各个时间间隔数据类型片段的格式模型,
但是,你可以用新的EXTRACT函数来提取和合并这些片段。格式如下:
EXTRACT(timepart FROM interval_expression)
列表B给出了一个运用这种方法的例子。
列表B
SELECT EXTRACT(DAY FROM experiment_duration) ||
' days, ' || EXTRACT (HOUR FROM experiment_duration) ||
' hours, ' || EXTRACT (MINUTE FROM experiment_duration) ||
' minutes' Duration
FROM experiment;
DURATION
--------------------------------------------------------------------------------
1 days, 2 hours, 31 minutes
首先,从experiment_duration列中将天数提取出来,文字“Days”是与之相联的。对于实验持续时间中的小时和分钟部分,操作与上述方法一样。
篇2:优化Oracle停机时间及数据库恢复数据库教程
oracle|恢复|数据|数据库|优化
这里会讨论令Oracle停机时间最小化的步骤,优化Oracle停机时间及数据库恢复数据库教程
。各种形式的停机--计划的或者是非计划的--总是不断地发生,一个DBA应该有正确的备份策略,这样在数据库出现问题时就可以更快地恢复。以下是假定的备份策略和数据库的运作条件
控制文件是镜像的
数据库运行在archivelog模式
每个星期都进行冷备份
每日都进行热备份
每日都进行一次全数据库导出
事件1:完整的数据库重构
在这种情形下,你可以使用全数据库导出或者冷热备份结合的方式来重构数据库。要注意的是无论你选择哪种方式,在线redo log中的事务都会丢失。
事件2:恢复部分的表空间
可以使用以下的步骤来恢复:
1、以restrict模式启动数据库
2、重新创建表空间
3、使用最新的全数据库导出来导入,并且使用ignore=y的选项;
4.关闭并且重新以normal的模式启动数据库实例
事件3:丢失一般的数据文件
丢失一般数据文件的恢复步骤根据所丢失的数据文件包含的表空间类型而定;例如:回滚段,用户表空间,索引表空间或者是只读的表空间、你可能会遇到以下的错误:
. 尝试启动数据库并且碰到错误的信息ORA-1157, ORA-1110,可能还有一个操作系统的错误
. 尝试以normal或者immediate的模式关闭数据库,可能会碰到ORA-1116, ORA-1110的错误信息,还有一个系统错误
以下的步骤可以用作恢复:
1、关闭数据库
2、由热备份中恢复丢失的数据文件
3、Startup mount数据库
4、执行以下的查询来得到所有你的在线redo log文件和它们相应的次序和首次修改号:
SELECT X.GROUP#, MEMBER, SEQUENCE#, FIRST_CHANGE#
FROM V$LOG X, V$LOGILE Y
WHERE X.GROUP# = Y.GROUP#;
5、如果得到的CHANGE#比在线redo log最小的FIRST_CHANGE# 还小,那么该文件不能被完全恢复,你可以有两个选择:
. 如果可以接受丢失最近一次冷备份以来的数据库修改,装入备份并且继续恢复
. 如果不能接受丢失数据库的修改,那么必须重新创建表空间
6、通过使用存档和在线的redo log来恢复数据文件
7、打开数据库
事件4:恢复一个特别的表
可以采用以下的步骤恢复:
1、使用最近的一次全数据库导出来导入表,并且使用owner=和tables=的选项
2、考虑到性能的原因,可能需要重建表索引
事件5:丢失控制文件
在数据库起来并且运行时,通常都不能检测到控制文件的问题、如果控制文件丢失或者损坏了,Oracle将不会了解,下次数据库的启动时将会导致ORA-205错误(标识控制文件“%s的错误),还有一个系统级的错误、
如果只是丢失了其中的一个控制文件,可以采用下面的步骤来恢复:
1、如果它正在运行的话,先关闭它
2、查找丢失控制文件的原因、是由于硬件的问题吗(磁盘还是控制器)?
3、如果不是硬件的问题,将控制文件的一个好的拷贝复制到丢失的位置,并且跳到步骤5、
4、如果是硬件的问题,复制一个好的控制文件拷贝到一个可靠的位置
5、编辑initsid.ora 或者 configsid.ora,更新CONTROL_FILES以反映最新的控制文件位置
6、启动数据库
事件6:丢失全部的控制文件
可以采用以下的步骤恢复:
1、关闭数据库
2、进行一次全数据库备份,包括全部的数据文件和redo log文件
3、以NOMOUNT的状态启动数据库
4、使用CREATE CONTROLFILE重新创建控制文件、你也可以备份控制文件到一个trace文件,然后执行该文件
5、在数据库上进行媒体恢复
6、打开数据库
7、使用shutdown normal关闭数据库
8、对数据库进行一次冷备份
事件7:丢失一个索引
最简单的方法就是重新创建丢失的索引
事件8:丢失一个非活动的redo log
如果丢失redo数据,恢复将是不完全的,必须重新创建涉及的表空间。要重新创建表空间,可以使用全的数据库导出,这样就可以很容易的导入数据并且重新创建该表空间的对象。可以使用以下的步骤来恢复:
1、通过Alter system来切换redo log文件
2、关闭数据库
3、startup mount数据库
4、离线删除涉及的数据文件
5、打开数据库
6、删除用户的表空间,包括其中的内容、
7、通过全数据库备份重新创建表空间和其中的对象
事件9:丢失活动的Redo log
如事件8讨论的一样,如果丢失了redo数据,恢复将是不完全的,必须重新创建涉及的表空间、可以采用以下的步骤恢复:
1、关闭数据库
2、startup mount数据库
3、离线删除涉及的数据文件
4、打开数据库
5、删除用户的表空间,包括其中的内容、
6、通过全数据库备份重新创建表空间和其中的对象
要注意的是活动的事务将会丢失
事件10:丢失存档的Redo log文件
如果存档的redo log文件丢失,应该马上进行一次冷备份、最好也进行一次全数据库导出、没有丢失的存档redo log文件的任何恢复都将是不完全的、
事件11:丢失活动的回滚段
这里指的是丢失一个回滚段的一个数据文件、这是一个危急的恢复过程,它主要是在于保存活动的事务,
这里假定数据库已经起来,而你想保存当前运行的事务。要使用以下的恢复过程,数据库必须运行在archivelog模式下。
可以使用以下步骤恢复:
1、不要关闭数据库、对于这种事件,数据库启动比关闭更容易解决问题、
2、令属于该数据文件中的全部回滚段离线
3、删除全部离线的回滚段
4、在上面的第2步中,如果回滚段中有活动的事务,你将不能令它离线、可运行以下的查询来查看哪些事物是活动的:
SELECT SEGMENT_NAME, XACTS ACTIVE_TX, V.STATUS
FROM V$ROLLSTAT V, DBA_ROLLBACK_SEGS
WHERE TABLESPACE_NAME = 'tablespace_name' AND
SEGMENT_ID = USN;
如果上面的查询没有结果,那么所有的回滚段都是离线的,但是,如果上面的查询返回一行或者多行,并且其状态为PENDING OFFLINE,那么可检查这些回滚段的ACTIVE_TX列、带有0值的回滚段将很快会离线;但是,非0的值表示上面有活动的事务,它们需要被提交或者回滚、
5、处理活动的事务、执行以下的查询来查看哪些用户的事务被指派到该回滚段:
SELECT S.SID, S.SERIAL#, S.USERNAME, R.NAME ”ROLLBACK“
FROM V$SESSION S, V$TRANSACTION T, V$ROLLNAME R
WHERE R.NAME IN ('pending_rollback1','pending_rollback2', .... 'pending_rollbackN') AND
S.TADDR = T.ADDR AND
T.XIDUSN = R.USN;
在知道哪些用户在”pending offline“的回滚段上有活动的事务后,可以要求他们提交或者回滚他们的事务,或者可以使用以下的命令杀掉它们的进程:
ALTER SYSTEM KILL SESSION 'sid, serial#';
6、在你处理完所有活动的事务后,执行以下的步骤:
丢弃表空间及其中的全部内容
重新创建回滚表空间
重新创建回滚段,并且令它们在线
事件12:丢失全部的回滚段
在这种事件下,将丢失全部活动的事务,并且需要重新创建回滚段。这样大的问题可能是由于一个硬件问题造成的,可以采用以下的步骤恢复:
1、关闭数据库
2、使用DBVERIFY验证全部的数据文件
3、解决其它的硬件问题或者数据文件损坏
4、以startup mount的方式启动数据库实例
5、在数据库上执行媒体恢复
6、打开数据库
7、按需要创建新的回滚段
事件13:导出文件损坏
如果导出文件不能用了,那么应该冷备份数据库并且进行一个全的数据库导出、这是假定数据库自身没有问题、如果数据库也损坏了,那么应该执行以下的步骤:
1、ORA-1157错误信息通常都表示一个或者多个的数据文件损坏了。查明哪些表受到影响,它们应该是错误信息中指明的数据文件中的表格
2、跳过坏的数据块,将数据由表格中选择到临时表格中、
3、丢弃损坏的表
4、将临时表重命名为丢弃的表
5、重新建立受影响表上的全部索引
6、使用VALIDATE STRUCTURE CASCADE的选项来分析全部损坏的表
要注意的是损坏块中数据将会丢失并且不能恢复
事件14:在热备份时关机
如果在热备份正在进行的时候突然关机,其中的一些表空间将可能处在备份模式、当你尝试打开数据库时,它将只能mount,并且指示某些表空间处于热备份模式、由于数据库不能打开,你将不能让表空间脱离热备份模式、你可以使用以下的步骤恢复:
1、startup mount数据库
2、查询v$backup以查看哪些数据文件处于ACTIVE状态、
3、通过使用命令ALTER DATABASE DATAFILE END BACKUP.来将这些数据文件脱离备份模式
4、打开数据库
事件15:恢复到某个特别的时间点
以下的步骤可用来执行point-in-time恢复
1、关闭数据库实例
2、以NOMOUNT的状态启动数据库实例
3、使用UNTIL的选项来恢复数据库
4、打开数据库
5、Shutdown NORMAL
6、启动数据库实例
事件16:恢复到一个特别的事件或者活动
可以使用以下的步骤来恢复:
1、关闭数据库实例
2、以NOMOUNT状态启动数据库实例;
3、使用UNTIL CANCEL来恢复数据库,提供存档的redo log文件请求直到该活动/事件为止
4、输入CANCEL来取消恢复
5、打开数据库;
6、使用NORMAL的模式来关闭数据库
7、启动数据库实例
结论
高可用性对于任何的商业都是很重要的,ORACLE DBA可以通过一些计划以确保停机时间最小化、这篇文章讨论了不同的策略可以达到这个目的。
篇3:Oracle 9i 约束条件数据库教程
约束条件就是Oracle数据库系统提供的对数据的完整性进行制约的机制,
Oracle 9i 约束条件数据库教程
。Oracle 9i允许创建5种约束条件。参见表7.8。创建检查约束条件
(1)在【管理目标导航器】中按照7.6节修改数据表结构的步骤进行操作。
(2)切换到图7.61所示的编辑表的【约束条件】选项卡。
(3)上述创建检查约束条件的SQL码如下?br> DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
ALTER TABLE ”SCOTT“.”STUDENT“
ADD (CONSTRAINT ”研究生编号检查约束条件“
CHECK(student_id>=20020101 and student_id<=20030909))
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
【参见光盘文件】:第7章 createcheck.sql。
(4)读者也可以直接在【SQLPlus Worksheet】中执行createcheck.sql 文件完成检查约束条件的创建,如图7.62所示,
测试检查约束条件
(1)在7.63所示的【表数据编辑器】界面中按照图示内容输入,单击“应用(P)”按钮。
(2)上述输入数据的SQL代码如下。
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
INSERT INTO ”SCOTT“.”STUDENT“
(”STUDENT_ID“ ,”NAME“ ,”PROFESSIONAL“ ,”BIRTHDAY“ ,”DIRECTOR_ID“ )
VALUES (20010101 ,'纪晓芙' ,'软件工程' ,TO_DATE('15-7月 -1971', 'dd-Mon-yyyy HH:MI:SS AM') ,200201)
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
【参见光盘文件】:第7章 testcheck.sql。
(3)出现如图7.64所示界面。
(4)读者也可以直接在【SQLPlus Worksheet】中执行testcheck.sql 文件完成检查约束条件的测试,结果如图7.65所示。
篇4:删除Oracle 9i数据库数据库教程
(1)启动【数据库配置助手】,一直到出现如图6.44所示的【操作】界面,
删除Oracle 9i数据库数据库教程
。(2)出现如图6.45所示的【数据库】界面,
(3)出现如图6.46所示的【概要】界面。
(4)出现如图6.47所示的【删除确认】界面。
(5)成功删除数据库后出现如图6.48所示的【成功境】界面。单击“否”按钮?br>
篇5:网络关系型数据库的代表Oracle 9i数据库教程
1.3.1 Oracle 9i数据库
1. 企业版(Enterprise Edition)
2. 标准版(Standard Edition)
3. 个人版(Personal Edition)
1.3.2 Oracle 9i应用服务器
Oracle 9i应用服务器有两种版本,
网络关系型数据库的代表Oracle 9i数据库教程
,
1. 企业版(Enterprise Edition)
企业版主要用于构建互联网应用,面向企业级应用。
2. 标准版(Standard Edition)
标准版用于建立面向部门级的Web应用。
1.3.3 Oracle 9i开发工具套件
Oracle 9i开发工具套件是一整套的Oracle 9i应用程序开发工具。
篇6:Oracle 10g(10.1.0.2)中的OPTIMIZERINDEXCOSTADJ数据库教程
oracle
Oracle 10g(10.1.0.2)中的OPTIMIZER_INDEX_COST_ADJ
Tom Kyte的新书Effective Oracle by Design的第6章 Getting the Most Out of the Cost-Based Optimizer中介绍了参数OPTIMIZER_INDEX_COST_ADJ,并认为可以理解为Oracle执行多块(MultiBlock)I/O(比如全表扫描)的代价与执行单块(Single-block)I/O代价的相对比例,Tom指出,9i下该参数缺省值为100,意即二者拥有相同的代价,若减小,则CBO倾向于使用索引(即单块I/O),反之则倾向于全表扫描(多块I/O)。Tom同样给出了一个不错的例子。
在自己的手提上试验了一下,硬盘大小原因,只装了一个Oracle 10g(10.1.0.2),谁知就发现该参数在10g下取值发生了改变。我们先来看一下参照Tom的实验:
A. 创建数据表。
SQL>drop table t1;
表已删除。
SQL>drop table t2;
表已删除。
SQL>create table t1
2 as
3 select mod(rownum,1000) id,rpad('x',300,'x') data
4 from all_objects
5 where rownum<=5000;
表已创建。
SQL>ed
已写入 file afiedt.buf
1 create table t2
2 as
3 select rownum id,rpad('x',300,'x') data
4 from all_objects
5* where rownum<=1000
SQL>/
表已创建。
B.创建索引并分析。
SQL>create index idx_t1 on t1(id);
索引已创建。
SQL>create index idx_t2 on t2(id);
索引已创建。
SQL>ed
已写入 file afiedt.buf
1 begin
2 dbms_stats.gather_table_stats
3 (user,'T1',method_opt=>'for all indexed columns',cascade=>true);
4 dbms_stats.gather_table_stats
5 (user,'T2',method_opt=>'for all indexed columns',cascade=>true);
6* end;
SQL>/
PL/SQL 过程已成功完成。
C.查询缺省值,并设置好环境。
SQL>set autot off
SQL>show parameters optimizer_index_cost_adj;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
optimizer_index_cost_adj integer 100
SQL>set autot traceonly exp stat;
D.在缺省值下查询的结果。
SQL>ed
已写入 file afiedt.buf
1 select * from t1,t2
2 where t1.id=t2.id
3* and t2.id between 50 and 55
SQL>/
已选择30行。
执行计划
----------------------------------------------------------
0 SELECT STATEMENT ptimizer=CHOOSE (Cost=13 Card=5 Bytes=1000
)
1 0 TABLE ACCESS (BY INDEX ROWID) OF 'T1' (TABLE) (Cost=2 Card
=1 Bytes=100)
2 1 NESTED LOOPS (Cost=13 Card=5 Bytes=1000)
3 2 TABLE ACCESS (BY INDEX ROWID) OF 'T2' (TABLE) (Cost=3
Card=5 Bytes=500)
4 3 INDEX (RANGE SCAN) OF 'IDX_T2' (INDEX) (Cost=2 Card=
5)
5 2 INDEX (RANGE SCAN) OF 'IDX_T1' (INDEX) (Cost=1 Card=1)
统计信息
----------------------------------------------------------
367 recursive calls
0 db block gets
101 consistent gets
0 physical reads
0 redo size
1507 bytes sent via SQL*Net to client
523 bytes received via SQL*Net from client
3 SQL*Net roundtrips to/from client
12 sorts (memory)
0 sorts (disk)
30 rows processed
E.修改参数值,注意,引用Tom的结论,9i中这个值在0-100之间,而10g呢?
SQL>alter session set optimizer_index_cost_adj=0;
ERROR:
ORA-00068: 值 0 对参数 optimizer_index_cost_adj 无效, 必须在 1 和 10000 之间
SQL>alter session set optimizer_index_cost_adj=1;
会话已更改。
SQL>ed
已写入 file afiedt.buf
1 select * from t1,t2
2 where t1.id=t2.id
3* and t2.id between 50 and 55
SQL>/
已选择30行。
执行计划
----------------------------------------------------------
0 SELECT STATEMENT ptimizer=CHOOSE (Cost=2 Card=5 Bytes=1000)
1 0 TABLE ACCESS (BY INDEX ROWID) OF 'T1' (TABLE) (Cost=1 Card
=1 Bytes=100)
2 1 NESTED LOOPS (Cost=2 Card=5 Bytes=1000)
3 2 TABLE ACCESS (BY INDEX ROWID) OF 'T2' (TABLE) (Cost=1
Card=5 Bytes=500)
4 3 INDEX (RANGE SCAN) OF 'IDX_T2' (INDEX) (Cost=2 Card=
5)
5 2 INDEX (RANGE SCAN) OF 'IDX_T1' (INDEX) (Cost=1 Card=1)
统计信息
----------------------------------------------------------
1 recursive calls
0 db block gets
48 consistent gets
0 physical reads
0 redo size
1507 bytes sent via SQL*Net to client
523 bytes received via SQL*Net from client
3 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
30 rows processed
SQL>alter session set optimizer_index_cost_adj=50;
会话已更改。
SQL>ed
已写入 file afiedt.buf
1 select * from t1,t2
2 where t1.id=t2.id
3* and t2.id between 50 and 55
SQL>/
已选择30行。
执行计划
----------------------------------------------------------
0 SELECT STATEMENT ptimizer=CHOOSE (Cost=7 Card=5 Bytes=1000)
1 0 TABLE ACCESS (BY INDEX ROWID) OF 'T1' (TABLE) (Cost=1 Card
=1 Bytes=100)
2 1 NESTED LOOPS (Cost=7 Card=5 Bytes=1000)
3 2 TABLE ACCESS (BY INDEX ROWID) OF 'T2' (TABLE) (Cost=2
Card=5 Bytes=500)
4 3 INDEX (RANGE SCAN) OF 'IDX_T2' (INDEX) (Cost=2 Card=
5)
5 2 INDEX (RANGE SCAN) OF 'IDX_T1' (INDEX) (Cost=1 Card=1)
统计信息
----------------------------------------------------------
1 recursive calls
0 db block gets
48 consistent gets
0 physical reads
0 redo size
1507 bytes sent via SQL*Net to client
523 bytes received via SQL*Net from client
3 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
30 rows processed
F.继续修改参数值,改大。
SQL>alter session set optimizer_index_cost_adj=200;
会话已更改。
SQL>ed
已写入 file afiedt.buf
1 select * from t1,t2
2 where t1.id=t2.id
3* and t2.id between 50 and 55
SQL>/
已选择30行。
执行计划
----------------------------------------------------------
0 SELECT STATEMENT ptimizer=CHOOSE (Cost=26 Card=5 Bytes=1000
)
1 0 TABLE ACCESS (BY INDEX ROWID) OF 'T1' (TABLE) (Cost=4 Card
=1 Bytes=100)
2 1 NESTED LOOPS (Cost=26 Card=5 Bytes=1000)
3 2 TABLE ACCESS (BY INDEX ROWID) OF 'T2' (TABLE) (Cost=6
Card=5 Bytes=500)
4 3 INDEX (RANGE SCAN) OF 'IDX_T2' (INDEX) (Cost=2 Card=
5)
5 2 INDEX (RANGE SCAN) OF 'IDX_T1' (INDEX) (Cost=1 Card=1)
统计信息
----------------------------------------------------------
1 recursive calls
0 db block gets
48 consistent gets
0 physical reads
0 redo size
1507 bytes sent via SQL*Net to client
523 bytes received via SQL*Net from client
3 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
30 rows processed
SQL>alter session set optimizer_index_cost_adj=500;
会话已更改。
SQL>ed
已写入 file afiedt.buf
1 select * from t1,t2
2 where t1.id=t2.id
3* and t2.id between 50 and 55
SQL>/
已选择30行。
执行计划
----------------------------------------------------------
0 SELECT STATEMENT ptimizer=CHOOSE (Cost=63 Card=5 Bytes=1000
)
1 0 TABLE ACCESS (BY INDEX ROWID) OF 'T1' (TABLE) (Cost=10 Car
d=1 Bytes=100)
2 1 NESTED LOOPS (Cost=63 Card=5 Bytes=1000)
3 2 TABLE ACCESS (FULL) OF 'T2' (TABLE) (Cost=13 Card=5 By
tes=500)
4 2 INDEX (RANGE SCAN) OF 'IDX_T1' (INDEX) (Cost=1 Card=1)
统计信息
----------------------------------------------------------
1 recursive calls
0 db block gets
90 consistent gets
0 physical reads
0 redo size
1507 bytes sent via SQL*Net to client
523 bytes received via SQL*Net from client
3 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
30 rows processed
SQL>alter session set optimizer_index_cost_adj=1000;
会话已更改,
SQL>ed
已写入 file afiedt.buf
1 select * from t1,t2
2 where t1.id=t2.id
3* and t2.id between 50 and 55
SQL>/
已选择30行。
执行计划
----------------------------------------------------------
0 SELECT STATEMENT ptimizer=CHOOSE (Cost=66 Card=5 Bytes=1000
)
1 0 HASH JOIN (Cost=66 Card=5 Bytes=1000)
2 1 TABLE ACCESS (FULL) OF 'T2' (TABLE) (Cost=13 Card=5 Byte
s=500)
3 1 TABLE ACCESS (FULL) OF 'T1' (TABLE) (Cost=52 Card=26 Byt
es=2600)
统计信息
----------------------------------------------------------
1 recursive calls
0 db block gets
271 consistent gets
213 physical reads
0 redo size
1651 bytes sent via SQL*Net to client
523 bytes received via SQL*Net from client
3 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
30 rows processed
SQL>alter session set optimizer_index_cost_adj=10000;
会话已更改。
SQL>ed
已写入 file afiedt.buf
1 select * from t1,t2
2 where t1.id=t2.id
3* and t2.id between 50 and 55
SQL>/
已选择30行。
执行计划
----------------------------------------------------------
0 SELECT STATEMENT ptimizer=CHOOSE (Cost=66 Card=5 Bytes=1000
)
1 0 HASH JOIN (Cost=66 Card=5 Bytes=1000)
2 1 TABLE ACCESS (FULL) OF 'T2' (TABLE) (Cost=13 Card=5 Byte
s=500)
3 1 TABLE ACCESS (FULL) OF 'T1' (TABLE) (Cost=52 Card=26 Byt
es=2600)
统计信息
----------------------------------------------------------
1 recursive calls
0 db block gets
271 consistent gets
0 physical reads
0 redo size
1651 bytes sent via SQL*Net to client
523 bytes received via SQL*Net from client
3 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
30 rows processed
G.现在看看对性能的影响。
SQL>set timing on
SQL>alter session set optimizer_index_cost_adj=100;
会话已更改。
已用时间: 00: 00: 00.00
SQL>ed
已写入 file afiedt.buf
1 select * from t1,t2
2 where t1.id=t2.id
3* and t2.id between 50 and 55
SQL>/
已选择30行。
已用时间: 00: 00: 00.02
执行计划
----------------------------------------------------------
0 SELECT STATEMENT ptimizer=CHOOSE (Cost=13 Card=5 Bytes=1000
)
1 0 TABLE ACCESS (BY INDEX ROWID) OF 'T1' (TABLE) (Cost=2 Card
=1 Bytes=100)
2 1 NESTED LOOPS (Cost=13 Card=5 Bytes=1000)
3 2 TABLE ACCESS (BY INDEX ROWID) OF 'T2' (TABLE) (Cost=3
Card=5 Bytes=500)
4 3 INDEX (RANGE SCAN) OF 'IDX_T2' (INDEX) (Cost=2 Card=
5)
5 2 INDEX (RANGE SCAN) OF 'IDX_T1' (INDEX) (Cost=1 Card=1)
统计信息
----------------------------------------------------------
0 recursive calls
0 db block gets
48 consistent gets
0 physical reads
0 redo size
1507 bytes sent via SQL*Net to client
523 bytes received via SQL*Net from client
3 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
30 rows processed
SQL>alter session set optimizer_index_cost_adj=1;
会话已更改。
已用时间: 00: 00: 00.00
SQL>ed
已写入 file afiedt.buf
1 select * from t1,t2
2 where t1.id=t2.id
3* and t2.id between 50 and 55
SQL>/
已选择30行。
已用时间: 00: 00: 00.02
执行计划
----------------------------------------------------------
0 SELECT STATEMENT ptimizer=CHOOSE (Cost=2 Card=5 Bytes=1000)
1 0 TABLE ACCESS (BY INDEX ROWID) OF 'T1' (TABLE) (Cost=1 Card
=1 Bytes=100)
2 1 NESTED LOOPS (Cost=2 Card=5 Bytes=1000)
3 2 TABLE ACCESS (BY INDEX ROWID) OF 'T2' (TABLE) (Cost=1
Card=5 Bytes=500)
4 3 INDEX (RANGE SCAN) OF 'IDX_T2' (INDEX) (Cost=2 Card=
5)
5 2 INDEX (RANGE SCAN) OF 'IDX_T1' (INDEX) (Cost=1 Card=1)
统计信息
----------------------------------------------------------
0 recursive calls
0 db block gets
48 consistent gets
0 physical reads
0 redo size
1507 bytes sent via SQL*Net to client
523 bytes received via SQL*Net from client
3 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
30 rows processed
SQL>alter session set optimizer_index_cost_adj=10000;
会话已更改。
已用时间: 00: 00: 00.00
SQL>ed
已写入 file afiedt.buf
1 select * from t1,t2
2 where t1.id=t2.id
3* and t2.id between 50 and 55
SQL>/
已选择30行。
已用时间: 00: 00: 00.03
执行计划
----------------------------------------------------------
0 SELECT STATEMENT ptimizer=CHOOSE (Cost=66 Card=5 Bytes=1000
)
1 0 HASH JOIN (Cost=66 Card=5 Bytes=1000)
2 1 TABLE ACCESS (FULL) OF 'T2' (TABLE) (Cost=13 Card=5 Byte
s=500)
3 1 TABLE ACCESS (FULL) OF 'T1' (TABLE) (Cost=52 Card=26 Byt
es=2600)
统计信息
----------------------------------------------------------
0 recursive calls
0 db block gets
271 consistent gets
0 physical reads
0 redo size
1651 bytes sent via SQL*Net to client
523 bytes received via SQL*Net from client
3 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
30 rows processed
来详细分析一下。
首先,10g中OPTIMIZER_INDEX_COST_ADJ的取值范围发生了改变。9i中为0-100,而10g中为1-10000。
其次,由于测试环境的不同,Tom的测试结果是在缺省值(100)的环境下,就已经和上面取值500时一样了,即对T2全表扫描而T1使用索引。Tom试验中,减小取值直至0,访问路径就变成使用两个索引,而并不会出现均不使用索引的情况。除去系统的不同(可能导致取缺省值时访问路径是否一致),只看变化趋势,显然10g中灵活性更高,1-10000的取值使得CBO可以覆盖所有的访问路径。另一方面,正如Tom的结论所说,OPTIMIZER_INDEX_COST_ADJ的取值越大,优化器越倾向于使用全表扫描,取值越小,优化器越倾向于使用索引。
再次,我们对比相同访问路径下的不同点。在取值从1变化到200(1-50-100-200)的过程中,优化器计算出的代价是持续增长的,而从1000到10000则是不变的。这说明这个参数与索引I/O的代价有关,而和全表扫描并无关系,这与Tom所说的并不矛盾,不过显然更精确一点。
最后我们其实应该看到,虽然有如上所说的代价变化问题,同一访问路径下实际的运行性能并无区别,由于数据量比较小,上面的例子也许不能很好的说明这一点,不过想想Oracle用相同的路径去执行,也没有理由不同性能吧。
好,来看看官方文档吧。10G的官方文档(Reference)中对这个参数描述如下:
OPTIMIZER_INDEX_COST_ADJ
Parameter type Integer 参数类型为整数
Default value 100 缺省值为100
Modifiable ALTER SESSION, ALTER SYSTEM 可通过ALTER SESSION, ALTER SYSTEM来修改
Range of values 1 to 10000 取值范围是1-10000
OPTIMIZER_INDEX_COST_ADJ lets you tune optimizer behavior. for access path selection to be more or less index friendly—that is, TO MAKE THE OPTIMIZER MORE OR LESS PRONE TO SELECTING AN INDEX ACCESS PATH OVER A FULL TABLE SCAN.
The default for this parameter is 100 percent, at which the optimizer evaluates index access paths at the regular cost. Any other value makes the optimizer evaluate the access path at that percentage of the regular cost. For example, a setting of 50 makes the index access path look half as expensive as normal.
Note:
The adjustment does not apply to user-defined cost functions for domain indexes.
注意:调整对用户为域索引自定义的代价函数无效。
描述的第一段正证实了参数的作用。第二段值得注意,正如Tom所说(我觉得如果他把原文versus前后颠倒一下会更好,即单块I/O代价比之多块I/O),参数表达了索引访问代价对比
普通(表扫描)代价的比值。不过还有一个疑问我暂时还没办法想通,什么条件下索引I/O居然比扫描慢100倍(取值10000)?
结论:
OPTIMIZER_INDEX_COST_ADJ通过指明索引I/O代价与扫描全表I/O代价的相对比值来影响CBO的行为,取值越小,CBO越倾向于使用索引,取值越大,越倾向于全表扫描。而缺省值100,指明缺省下,二者的代价是相等。与9i不同的是,10g中OPTIMIZER_INDEX_COST_ADJ的取值范围从0-100改为1-10000,相信是更合理的取值(至少按照文档的说明,作为代价的比值,取0是不合适的,除非说索引I/O的代价相对于全表扫描I/O代价是无穷小的)。
篇7:Oracle大批量删除数据方法数据库
批量删除海量数据通常都是很复杂及缓慢的,方法也很多,但是通常的概念是:分批删除,逐次提交, 下面是删除过程,数据表可以通过主键删除, 测试 过Delete和For all两种方法,for all在这里并没有带来 性能 提高,所以仍然选择了批量直接删除。 首先创建一下
批量删除海量数据通常都是很复杂及缓慢的,方法也很多,但是通常的概念是:分批删除,逐次提交。
下面是删除过程,数据表可以通过主键删除,测试过Delete和For all两种方法,for all在这里并没有带来性能提高,所以仍然选择了批量直接删除。
首先创建一下过程,使用自制事务进行处理:
create or replace procedure delBigTab
(
p_TableName in varchar2,
p_Condition in varchar2,
p_Count in varchar2
)
as
pragma autonomous_transaction;
n_delete number:=0;
begin
while 1=1 loop
EXECUTE IMMEDIATE
'delete from '||p_TableName||' where '||p_Condition||' and rownum <= :rn'
USING p_Count;
if SQL%NOTFOUND then
exit;
else
n_delete:=n_delete + SQL%ROWCOUNT;
end if;
commit;
end loop;
commit;
DBMS_OUTPUT.PUT_LINE('Finished!');
DBMS_OUTPUT.PUT_LINE('Totally '||to_char(n_delete)||' records deleted!');
end;
以下是删除过程及时间:
SQL>create or replace procedure delBigTab
2 (
3 p_TableName in varchar2,
4 p_Condition in varchar2,
5 p_Count in varchar2
6 )
7 as
8 pragma autonomous_transaction;
9 n_delete number:=0;
10 begin
11 while 1=1 loop
12 EXECUTE IMMEDIATE
13 'delete from '||p_TableName||' where '||p_Condition||' and rownum <= :rn'
14 USING p_Count;
15 if SQL%NOTFOUND then
16 exit;
17 else
18 n_delete:=n_delete + SQL%ROWCOUNT;
19 end if;
20 commit;
21 end loop;
22 commit;
23 DBMS_OUTPUT.PUT_LINE('Finished!');
24 DBMS_OUTPUT.PUT_LINE('Totally '||to_char(n_delete)||' records deleted!');
25 end;
26 /
Procedure created.
SQL>set timing on
SQL>select min(NUMDLFLOGGUID) from HS_DLF_DOWNLOG_HISTORY;
MIN(NUMDLFLOGGUID)
------------------
11000000
Elapsed: 00:00:00.23
SQL>exec delBigTab('HS_DLF_DOWNLOG_HISTORY','NUMDLFLOGGUID < 11100000','10000');
PL/SQL procedure suclearcase/” target=“_blank” >ccessfully completed.
Elapsed: 00:00:18.54
SQL>select min(NUMDLFLOGGUID) from HS_DLF_DOWNLOG_HISTORY;
MIN(NUMDLFLOGGUID)
------------------
11100000
Elapsed: 00:00:00.18
SQL>set serveroutput on
SQL>exec delBigTab('HS_DLF_DOWNLOG_HISTORY','NUMDLFLOGGUID < 11200000','10000');
Finished!
Totally 96936 records deleted!
PL/SQL procedure successfully completed.
Elapsed: 00:00:18.61
10万记录大约19s
SQL>exec delBigTab('HS_DLF_DOWNLOG_HISTORY','NUMDLFLOGGUID < 11300000','10000');
Finished!
Totally 100000 records deleted!
PL/SQL procedure successfully completed.
Elapsed: 00:00:18.62
SQL>exec delBigTab('HS_DLF_DOWNLOG_HISTORY','NUMDLFLOGGUID < 11400000','10000');
Finished!
Totally 100000 records deleted!
PL/SQL procedure successfully completed.
Elapsed: 00:00:18.85
SQL>
SQL>exec delBigTab('HS_DLF_DOWNLOG_HISTORY','NUMDLFLOGGUID < 13000000','10000');
Finished!
Totally 1000000 records deleted!
PL/SQL procedure successfully completed.
Elapsed: 00:03:13.87
100万记录大约3分钟
SQL>exec delBigTab('HS_DLF_DOWNLOG_HISTORY','NUMDLFLOGGUID < 20000000','10000');
Finished!
Totally 6999977 records deleted!
PL/SQL procedure successfully completed.
Elapsed: 00:27:24.69
700万大约27分钟
以上过程仅供参考.
原文转自:www.ltesting.net
篇8:oracle里的常用命令数据库教程
oracle
第一章:日志管理1.forcing log switches
sql>alter system switch logfile;
2.forcing checkpoints
sql>alter system checkpoint;
3.adding online redo log groups
sql>alter database add logfile [group 4]
sql>('/disk3/log4a.rdo','/disk4/log4b.rdo') size 1m;
4.adding online redo log members
sql>alter database add logfile member
sql>'/disk3/log1b.rdo' to group 1,
sql>'/disk4/log2b.rdo' to group 2;
5.changes the name of the online redo logfile
sql>alter database rename file 'c:/oracle/oradata/oradb/redo01.log'
sql>to 'c:/oracle/oradata/redo01.log';
6.drop online redo log groups
sql>alter database drop logfile group 3;
7.drop online redo log members
sql>alter database drop logfile member 'c:/oracle/oradata/redo01.log';
8.clearing online redo log files
sql>alter database clear [unarchived] logfile 'c:/oracle/log2a.rdo';
9.using logminer analyzing redo logfiles
a. in the init.ora specify utl_file_dir = ' '
b. sql>execute dbms_logmnr_d.build('oradb.ora','c:oracleoradblog');
c. sql>execute dbms_logmnr_add_logfile('c:oracleoradataoradbredo01.log',
sql>dbms_logmnr.new);
d. sql>execute dbms_logmnr.add_logfile('c:oracleoradataoradbredo02.log',
sql>dbms_logmnr.addfile);
e. sql>execute dbms_logmnr.start_logmnr(dictfilename=>'c:oracleoradblogoradb.ora');
f. sql>select * from v$logmnr_contents(v$logmnr_dictionary,v$logmnr_parameters
sql>v$logmnr_logs);
g. sql>execute dbms_logmnr.end_logmnr;
第二章:表空间管理
1.create tablespaces
sql>create tablespace tablespace_name datafile 'c:oracleoradatafile1.dbf' size 100m,
sql>'c:oracleoradatafile2.dbf' size 100m minimum extent 550k [logging/nologging]
sql>default storage (initial 500k next 500k maxextents 500 pctinccease 0)
sql>[online/offline] [permanent/temporary] [extent_management_clause]
2.locally managed tablespace
sql>create tablespace user_data datafile 'c:oracleoradatauser_data01.dbf'
sql>size 500m extent management local uniform. size 10m;
3.temporary tablespace
sql>create temporary tablespace temp tempfile 'c:oracleoradatatemp01.dbf'
sql>size 500m extent management local uniform. size 10m;
4.change the storage setting
sql>alter tablespace app_data minimum extent 2m;
sql>alter tablespace app_data default storage(initial 2m next 2m maxextents 999);
5.taking tablespace offline or online
sql>alter tablespace app_data offline;
sql>alter tablespace app_data online;
6.read_only tablespace
sql>alter tablespace app_data read only|write;
7.droping tablespace
sql>drop tablespace app_data including contents;
8.enableing automatic extension of data files
sql>alter tablespace app_data add datafile 'c:oracleoradataapp_data01.dbf' size 200m
sql>autoextend on next 10m maxsize 500m;
9.change the size fo data files manually
sql>alter database datafile 'c:oracleoradataapp_data.dbf' resize 200m;
10.Moving data files: alter tablespace
sql>alter tablespace app_data rename datafile 'c:oracleoradataapp_data.dbf'
sql>to 'c:oracleapp_data.dbf';
11.moving data files:alter database
sql>alter database rename file 'c:oracleoradataapp_data.dbf'
sql>to 'c:oracleapp_data.dbf';
第三章:表
1.create a table
sql>create table table_name (column datatype,column datatype]....)
sql>tablespace tablespace_name [pctfree integer] [pctused integer]
sql>[initrans integer] [maxtrans integer]
sql>storage(initial 200k next 200k pctincrease 0 maxextents 50)
sql>[logging|nologging] [cache|nocache]
2.copy an existing table
sql>create table table_name [logging|nologging] as subquery
3.create temporary table
sql>create global temporary table xay_temp as select * from xay;
on commit preserve rows/on commit delete rows
4.pctfree = (average row size - initial row size) *100 /average row size
pctused = 100-pctfree- (average row size*100/available data space)
5.change storage and block utilization parameter
sql>alter table table_name pctfree=30 pctused=50 storage(next 500k
sql>minextents 2 maxextents 100);
6.manually allocating extents
sql>alter table table_name allocate extent(size 500k datafile 'c:/oracle/data.dbf');
7.move tablespace
sql>alter table employee move tablespace users;
8.deallocate of unused space
sql>alter table table_name deallocate unused [keep integer]
9.truncate a table
sql>truncate table table_name;
10.drop a table
sql>drop table table_name [cascade constraints];
11.drop a column
sql>alter table table_name drop column comments cascade constraints checkpoint 1000;
alter table table_name drop columns continue;
12.mark a column as unused
sql>alter table table_name set unused column comments cascade constraints;
alter table table_name drop unused columns checkpoint 1000;
alter table orders drop columns continue checkpoint 1000
data_dictionary : dba_unused_col_tabs
第四章:索引
1.creating function-based indexes
sql>create index summit.item_quantity on summit.item(quantity-quantity_shipped);
2.create a B-tree index
sql>create [unique] index index_name on table_name(column,.. asc/desc) tablespace
sql>tablespace_name [pctfree integer] [initrans integer] [maxtrans integer]
sql>[logging | nologging] [nosort] storage(initial 200k next 200k pctincrease 0
sql>maxextents 50);
3.pctfree(index)=(maximum number of rows-initial number of rows)*100/maximum number of rows
4.creating reverse key indexes
sql>create unique index xay_id on xay(a) reverse pctfree 30 storage(initial 200k
sql>next 200k pctincrease 0 maxextents 50) tablespace indx;
5.create bitmap index
sql>create bitmap index xay_id on xay(a) pctfree 30 storage( initial 200k next 200k
sql>pctincrease 0 maxextents 50) tablespace indx;
6.change storage parameter of index
sql>alter index xay_id storage (next 400k maxextents 100);
7.allocating index space
sql>alter index xay_id allocate extent(size 200k datafile 'c:/oracle/index.dbf');
8.alter index xay_id deallocate unused;
第五章:约束
1.define constraints as immediate or deferred
sql>alter session set constraint[s] = immediate/deferred/default;
set constraint[s] constraint_name/all immediate/deferred;
2. sql>drop table table_name cascade constraints
sql>drop tablespace tablespace_name including contents cascade constraints
3. define constraints while create a table
sql>create table xay(id number(7) constraint xay_id primary key deferrable
sql>using index storage(initial 100k next 100k) tablespace indx);
primary key/unique/references table(column)/check
4.enable constraints
sql>alter table xay enable novalidate constraint xay_id;
5.enable constraints
sql>alter table xay enable validate constraint xay_id;
第六章:LOAD数据
1.loading data using direct_load insert
sql>insert /*+append */ into emp nologging
sql>select * from emp_old;
2.parallel direct-load insert
sql>alter session enable parallel dml;
sql>insert /*+parallel(emp,2) */ into emp nologging
sql>select * from emp_old;
3.using sql*loader
sql>sqlldr scott/tiger
sql>control = ulcase6.ctl
sql>log = ulcase6.log direct=true
第七章:reorganizing data
1.using expoty
$exp scott/tiger tables(dept,emp) file=c:emp.dmp log=exp.log compress=n direct=y
2.using import
$imp scott/tiger tables(dept,emp) file=emp.dmp log=imp.log ignore=y
3.transporting a tablespace
sql>alter tablespace sales_ts read only;
$exp sys/.. file=xay.dmp transport_tablespace=y tablespace=sales_ts
triggers=n constraints=n
$copy datafile
$imp sys/.. file=xay.dmp transport_tablespace=y datafiles=(/disk1/sles01.dbf,/disk2
/sles02.dbf)
sql>alter tablespace sales_ts read write;
4.checking transport set
sql>DBMS_tts.transport_set_check(ts_list =>'sales_ts' ..,incl_constraints=>true);
在表transport_set_violations 中查看
sql>dbms_tts.isselfcontained 为true 是, 表示自包含
第八章: managing password security and resources
1.controlling account lock and password
sql>alter user juncky identified by oracle account unlock;
2.user_provided password function
sql>function_name(userid in varchar2(30),password in varchar2(30),
old_password in varchar2(30)) return boolean
3.create a profile : password setting
sql>create profile grace_5 limit failed_login_attempts 3
sql>password_lock_time unlimited password_life_time 30
sql>password_reuse_time 30 password_verify_function verify_function
sql>password_grace_time 5;
4.altering a profile
sql>alter profile default failed_login_attempts 3
sql>password_life_time 60 password_grace_time 10;
5.drop a profile
sql>drop profile grace_5 [cascade];
6.create a profile : resource limit
sql>create profile developer_prof limit sessions_per_user 2
sql>cpu_per_session 10000 idle_time 60 connect_time 480;
7. view =>resource_cost : alter resource cost
dba_Users,dba_profiles
8. enable resource limits
sql>alter system set resource_limit=true;
第九章:Managing users
1.create a user: database authentication
sql>create user juncky identified by oracle default tablespace users
sql>temporary tablespace temp quota 10m on data password expire
sql>[account lock|unlock] [profile profilename|default];
2.change user quota on tablespace
sql>alter user juncky quota 0 on users;
3.drop a user
sql>drop user juncky [cascade];
4. monitor user
view: dba_users , dba_ts_quotas
第十章:managing privileges
1.system privileges: view =>system_privilege_map ,dba_sys_privs,session_privs
2.grant system privilege
sql>grant create session,create table to managers;
sql>grant create session to scott with admin option;
with admin option can grant or revoke privilege from any user or role;
3.sysdba and sysoper privileges:
sysoper: startup,shutdown,alter database open|mount,alter database backup controlfile,
alter tablespace begin/end backup,recover database
alter database archivelog,restricted session
sysdba: sysoper privileges with admin option,create database,recover database until
4.password file members: view:=>v$pwfile_users
5.O7_dictionary_accessibility =true restriction access to view or tables in other schema
6.revoke system privilege
sql>revoke create table from karen;
sql>revoke create session from scott;
7.grant object privilege
sql>grant execute on dbms_pipe to public;
sql>grant update(first_name,salary) on employee to karen with grant option;
8.display object privilege : view =>dba_tab_privs, dba_col_privs
9.revoke object privilege
sql>revoke execute on dbms_pipe from scott [cascade constraints];
10.audit record view :=>sys.aud$
11. protecting the audit trail
sql>audit delete on sys.aud$ by access;
12.statement auditing
sql>audit user;
13.privilege auditing
sql>audit select any table by summit by access;
14.schema object auditing
sql>audit lock on summit.employee by access whenever successful;
15.view audit option : view=>all_def_audit_opts,dba_stmt_audit_opts,dba_priv_audit_opts,dba_obj_audit_opts
16.view audit result: view=>dba_audit_trail,dba_audit_exists,dba_audit_object,dba_audit_session,dba_audit_statement
第十一章: manager role
1.create roles
sql>create role sales_clerk;
sql>create role hr_clerk identified by bonus;
sql>create role hr_manager identified externally;
2.modify role
sql>alter role sales_clerk identified by commission;
sql>alter role hr_clerk identified externally;
sql>alter role hr_manager not identified;
3.assigning roles
sql>grant sales_clerk to scott;
sql>grant hr_clerk to hr_manager;
sql>grant hr_manager to scott with admin option;
4.establish default role
sql>alter user scott default role hr_clerk,sales_clerk;
sql>alter user scott default role all;
sql>alter user scott default role all except hr_clerk;
sql>alter user scott default role none;
5.enable and disable roles
sql>set role hr_clerk;
sql>set role sales_clerk identified by commission;
sql>set role all except sales_clerk;
sql>set role none;
6.remove role from user
sql>revoke sales_clerk from scott;
sql>revoke hr_manager from public;
7.remove role
sql>drop role hr_manager;
8.display role information
view: =>dba_roles,dba_role_privs,role_role_privs,dba_sys_privs,role_sys_privs,role_tab_privs,session_roles
第十二章: BACKUP and RECOVERY
1. v$sga,v$instance,v$process,v$bgprocess,v$database,v$datafile,v$sgastat
2. Rman need set dbwr_IO_slaves or backup_tape_IO_slaves and large_pool_size
3. Monitoring Parallel Rollback
>v$fast_start_servers , v$fast_start_transactions
4.perform. a closed database backup (noarchivelog)
>shutdown immediate
>cp files /backup/
>startup
5.restore to a different location
>connect system/manager as sysdba
>startup mount
>alter database rename file '/disk1/../user.dbf' to '/disk2/../user.dbf';
>alter database open;
6.recover syntax
--recover a mounted database
>recover database;
>recover datafile '/disk1/data/df2.dbf';
>alter database recover database;
--recover an opened database
>recover tablespace user_data;
>recover datafile 2;
>alter database recover datafile 2;
7.how to apply redo log files automatically
>set autorecovery on
>recover automatic datafile 4;
8.complete recovery:
--method 1(mounted databae)
>copy c:backupuser.dbf c:oradatauser.dbf
>startup mount
>recover datafile 'c:oradatauser.dbf;
>alter database open;
--method 2(opened database,initially opened,not system or rollback datafile)
>copy c:backupuser.dbf c:oradatauser.dbf (alter tablespace offline)
>recover datafile 'c:oradatauser.dbf' or
>recover tablespace user_data;
>alter database datafile 'c:oradatauser.dbf' online or
>alter tablespace user_data online;
--method 3(opened database,initially closed not system or rollback datafile)
>startup mount
>alter database datafile 'c:oradatauser.dbf' offline;
>alter database open
>copy c:backupuser.dbf d:oradatauser.dbf
>alter database rename file 'c:oradatauser.dbf' to 'd:oradatauser.dbf'
>recover datafile 'e:oradatauser.dbf' or recover tablespace user_data;
>alter tablespace user_data online;
--method 4(loss of data file with no backup and have all archive log)
>alter tablespace user_data offline immediate;
>alter database create datafile 'd:oradatauser.dbf' as 'c:oradatauser.dbf''
>recover tablespace user_data;
>alter tablespace user_data online
5.perform. an open database backup
>alter tablespace user_data begin backup;
>copy files /backup/
>alter database datafile '/c:/../data.dbf' end backup;
>alter system switch logfile;
6.backup a control file
>alter database backup controlfile to 'control1.bkp';
>alter database backup controlfile to trace;
7.recovery (noarchivelog mode)
>shutdown abort
>cp files
>startup
8.recovery of file in backup mode
>alter database datafile 2 end backup;
9.clearing redo log file
>alter database clear unarchived logfile group 1;
>alter database clear unarchived logfile group 1 unrecoverable datafile;
10.redo log recovery
>alter database add logfile group 3 'c:oradataredo03.log' size 1000k;
>alter database drop logfile group 1;
>alter database open;
or >cp c:oradataredo02.log' c:oradataredo01.log
>alter database clear logfile 'c:oradatalog01.log';
篇9:ORACLE NUMBER类型详解数据库教程
1>.NUMBER类型细讲:
Oracle number datatype 语法:NUMBER[(precision [, scale])]
简称:precision -->p
scale -->s
NUMBER(p, s)
范围: 1 <= p <=38, -84 <= s <= 127
保存数据范围:-1.0e-130 <= number value < 1.0e+126
保存在机器内部的范围: 1 ~ 22 bytes
有效为:从左边第一个不为0的数算起的位数,
s的情况:
s >0
精确到小数点右边s位,并四舍五入。然后检验有效位是否 <= p。
s < 0
精确到小数点左边s位,并四舍五入。然后检验有效位是否 <= p + s。
s = 0
此时NUMBER表示整数。
eg:
Actual Data Specified As Stored As
----------------------------------------
123.89 NUMBER 123.89
123.89 NUMBER(3) 124
123.89 NUMBER(6,2) 123.89
123.89 NUMBER(6,1) 123.9
123.89 NUMBER(4,2) exceeds precision (有效位为5, 5 >4)
123.89 NUMBER(6,-2) 100
.01234 NUMBER(4,5) .01234 (有效位为4)
.00012 NUMBER(4,5) .00012
.000127 NUMBER(4,5) .00013
.0000012 NUMBER(2,7) .0000012
.00000123 NUMBER(2,7) .0000012
1.2e-4 NUMBER(2,5) 0.00012
1.2e-5 NUMBER(2,5) 0.00001
123.2564 NUMBER 123.2564
1234.9876 NUMBER(6,2) 1234.99
12345.12345 NUMBER(6,2) Error (有效位为5+2 >6)
1234.9876 NUMBER(6) 1235 (s没有表示s=0)
12345.345 NUMBER(5,-2) 12300
1234567 NUMBER(5,-2) 1234600
12345678 NUMBER(5,-2) Error (有效位为8 >7)
123456789 NUMBER(5,-4) 123460000
1234567890 NUMBER(5,-4) Error (有效位为10 >9)
12345.58 NUMBER(*, 1) 12345.6
0.1 NUMBER(4,5) Error (0.10000, 有效位为5 >4)
0.01234567 NUMBER(4,5) 0.01235
0.09999 NUMBER(4,5) 0.09999
如何掌握 Oracle 中的时间间隔型数据数据库教程(共9篇)




