【oracle】配置恢复管理器Configuring Recovery Manager

第1章 配置恢复管理器Configuring Recovery Manager

组成:GUI或者命令行、可选的恢复目录、RMAN命令和脚本,以及磁带媒介连接

考虑事项:RMAN是一种物理备份方法。其他的备份恢复方法:用户管理和Oracle EXPORT工具(逻辑备份,一般不做为独立得备份方法,而是对RMAN或者用户管理的备份提供附加的备份护,exp,expdp)

 

可以使用控制文件或者恢复目录作为资料档案库。Oracle建议,中等规模的企业环境,使用恢复目录,这样可以充分发挥RMAN工具的全部功能。如果使用控制文件作为资料档案库,设置参数:CONTROL_FILE_RECORD_KEEP_TIME.

恢复目录必须存储在自己的数据库服务器中,而不是目标数据库所在的服务器中。为安全恢复数据库也备份。为了使目录能够工作,必须建立具有connect,resource和RECOVERY_CATALOG_OWNER权限的账户。新数据库参数如下:

1)SYSTEM 90M;UNDO 5M;TEMP 5M

2)三个日志文件组每组两个成员 1M

3)RECOVERY CATALOG表空间 CATTBS 15M

DBCA建立恢复目录数据库以及,然后实践第3步,创建恢复目录

书中数据库环境:目标数据库ORA101T,恢复目录数据库ORA101RC,恢复目录表空间DATA

(本机测试环境:目标数据库为prod,恢复目录数据库prodrman,恢复目录为CATTBS.

rman target /@prod catalog rman/rman@prodrman )

以下command>表示windows环境命令行。

command> SET ORACLE_SID = ora101rc

command>sqlplus /nolog

sql>connect / as sysdba

sql>create user rman_user identified by rman_user default tablespace data temporary tablespace temp;

sql>grant connect,resource,recovery_catalog_owner to rman_user;

command>rman

rman>connect catalog rman/rman

rman>create catalog tablespace data;

注册数据库

command> SET ORACLE_SID = ora101t

command>rman target /

rman>connect catalog "rman_user/rman_user@ora101rc";

rman>register database;

 

 

for example:备份整个数据库

command>set ORACLE_SID = ora101t

command>sqlplus /nolog

sql>connect / as sysdba

sql>startup mount

command>rman

rman>connect target

rman>connect catalog rman_user/rman_user@ora101rc;

rman>run

{

allocate channel c1 type disk;

backup database format 'G:\RMAN_BAKCUP3\db_%u_%d_%s';

backup format 'G:\RMAN_BAKCUP3\log_t%t_s%s_p%p' (archivelog all);

}

 

 

 

 

 

备份完成以后,就可以恢复数据库。数据库必须已安装,但没有打开。选择多个磁盘通道以利用并行恢复进程,这不是必须的,但可以改进重建和恢复时间。

RMAN>run

{

allocate channel c1 type disk;

allocate channel c2 type disk;

allocate channel c3 type disk;

restore database;

recover database;

alter database open;

}

 

 

启动和连接到RMAN

从命令行连接:

command>set ORACLE_SID=ora101rc

command>rman target / catalog rman_user/rman_user@ora101rc

从rman工具连接到目标数据库。

command>set ORCLE_SID=ora101t;

command>rman

rman>connect target

rman>connect catalog rman_user/rman_user@ora101rc;

 

 

媒介管理层(MML)界面使应用编程界面(API),它是RMAN与不同的硬件硬件供应商的磁带设备接口。这些磁带设备,是自动化磁带库(ATL),所有希望与ORACLE RMAN 一起工作的硬件供应商都做自己的MNL,因为大部分磁带硬件设备是有专利的,要求不同的程序调用。

 

 

通道分配

自动分配:

_________________________________________________________

CONFIGURE DEVICE TYPE DISK BACKUP TYPE TO [COPY |[ COMPRESSED ]BACKUPSET] |clear|parallelism n

CONFIGURE DEFAULT DEVICE TYPE to deviceSpecifier|clear

CONFIGURE CHANNEL DEVICE TYPE disk|equal??

CONFIGURE CHANNEL n DEVICE TYPE disk|equal

-----------------------线内有些奇怪,略,看 example----------------------------

 

 

RMAN的参数和永久设置

RMAN>configure default device type to disk;

rman>configure default device type to sbt;

rman>configure device type disk backup type to copy;

rman>configure device type disk backup type to backupset;

rman>configure device type disk backup type to compressed backupset;

rman>configure device type sbt backup type to compressed backupset;

rman>configure channel device type disk format 'c:\backup\ora101rc\ora_dev_t%t_s%s_p%p;

rman>configure channel device type sbt PARMS='ENV=mnl_env_settings';

rman>configure device type sbt parallelism 3;

 

 

使用ENTERPRISE MANAGER 配置 RMAN 设置值

HTTP://hostname.domain:5500/em---->login-->Maintenance-->Backup/Recovery

 

 

保留策略

rman>configure retention policy to recovery window of 30 days;

run

{

allocate channel c1 type disk;

backup database format 'db_%u_%d_%s' tag monthly_backup;

backup format 'log_t%t_s%s_p%p' (archivelog all);

}

rman>change backupset tag monthly_backup nokeep;

rman>change backupset tag monthly_backup keep until time '01-DEC-04' logs;

rman>configure controlfile autobackup on;

rman>configure controlfile autobackup format for device type disk to 'c:\oracle\ora101rc\cf%F';

 

 

 

第2章 Using Recovery Manager

run

{

allocate channel c1 type disk;

backup database format 'db_%u_%d_%s' tag monthly_backup;

backup format 'log_t%t_s%s_p%p'

(archivelog all);

}

 

 

command>rman

rman>connect target

rman>run{

allocate channel c1 type disk;

backup database format 'db_%u_%d_%s';

backup format 'log_t%t_s%s_p%p'

(archivelog all);

}

 

 

 

rman>run

{

allocate channel ch1 tyep disk;

copy

datafile 1 to 'c:\oracle\staging\ora101t\system01.dbf',

current controlfile to 'c:\oracle\staging\ora101t\control01.ctl';

}

 

 

RMAN> delete datafilecopy 28;

 

 

 

command>rman

rman>connect target

rman>backup as copy tag "062504_backup" database;

 

 

 

rman>backup as compressed backupset database;

 

 

rman>configure device type disk backup type to compressed backupset;

 

 

dir *.bkp

 

 

Full and Incremental Backups

Full backups do not mean the complete database was backed up. In other words, a full backup can back up only part of the database and not all datafiles, control files, and logs.

a differential incremental and a cumulative incremental backup.

Performing a Differential Incremental Backup

rman>backup incremental level 0 database;

rman> backup incremental level 1 database;

Performing a Cumulative Incremental Backup

rman>backup incremental level 1 cumulative database;

 

 

备份集得并行化

command>set ORACLE_SID=ora101rc

command>rman

rman>run

{

allocate channel c1 type disk;

allocate channel c2 type disk;

backup

(datafile 1,2,3 channel c1)

(archivelog all channel c2);

}

 

 

rman>show all;

rman>configure device type disk parallelism 3;

rman>backup

(datafile 1,2)

(datafile 3,4)

(archivelog all);

 

 

 

rman>backup tablespace users format ='user_bs_%d%p%s';

rman>backup as copy tablespace users format='c:\oracle\backups\ora101rc\users_%d%p%s';

rman>backup database tag weekly_backup;

rman>configure channel device type disk rate 5m;

rman>configure channel device type disk maxsetsize=10g;

rman>backup database maxsetsize=10g;

rman>configure channel device type disk maxpiecesize=2G;

 

 

启动和关闭块变化跟踪

command>sqlplus /nolog

sql>connect / as sysdba

sql>select * from v$block_change_tracking;

sql>alter database enable block change tracking using file 'c:\oracle\block_track\ora101rc_block_track.log' reuse;

sql>alter database enable block change tracking using file '/backup/block_track.log';

 

 

sql>select filename,status,bytes from v$block_change_tracking;

sql>alter database disable block change tracking;

 

 

用EM管理备份

监视RMAN备份

sql>connect system/manager@ora101t

sql>select dbid from v$database;

sql>connect rman_user/rman_user@ora101rc

sql>select db_key from rc_database where dbid=1736563848;

sql>select bs_key,backup_type,completion_time

from rc_database_incarnation a,rc_backup_set b

where a.db_key = b.db_key

and a.current_incarnation = 'YES';

 

 

 

使用list命令。

rman>list backupset by backup summary;

rman>list backupset by file;

 

 

使用report命令

rman>REPORT OBSOLETE;

rman>REPORT SCHEMA;

 

 

使用RMAN作业示例

启用ARCHIVELOG模式

sql>alter system set log_archive_start=true scope=spfile;

 

 

sql>connect / as sysdba

sql>startup mount

sql>alter database archivelog;

sql>alter database open;

 

 

使用RMAN备份归档重执行日志

RUN

{

allocate channel c1 type disk;

allocate channel c2 type disk;

backup database;

backup (archivelog all);

}

 

 

 

制定备份工作计划表

 

 

 

第3章 Recovering From Non-Critical Losses

sql>create temporary tablespace temp2 tempfile 'c:\xxxxxxxx\xx.dbf' size 100m extent management local uniform size 128k;

sql>create temporary tablespace temp2 tempfile '/u02/oradata/orcl/temp02.dbf' size 100m extent management local uniform size 128k;

启动丢失临时文件得数据库

COMMAND>SQLPLUS /NOLOG

sql>connect / as sysdba

sql>startup mount

sql>drop tablespace temp including contents;

sql>create temporary tablespace temp2 tempfile 'c:\xxxxxxxx\xx.dbf' size 100m extent management local uniform size 128k;

 

 

改变数据库得默认临时表空间

sql>alter database default temporary tablespace temp2;

 

 

重建重执行日志文件

 

 

sql>alter database drop logfile member 'c:\oracle\oradata\ora101t\redo01.log';

sql>alter database add logfile member 'c:\oracle\oradata\ora101t\redo01.log' to group 1;

 

 

恢复索引表空间

SQLPLUS /NOLOG

sql>connect / as sysdba

sql>startup

sql>drop tablespace indexes including contents;

sql>create tablespace indexes datafile 'c:\oracle\oradata\ora1010t\index01.dbf' size 20m;

 

 

重建索引

CREATE UNIQUE INDEX example_index_pk

ON EXAMPLE_table

(column_one,

column_two,

column_three,

column_four)

PCTFREE 10

INITRANS 2

MAXTRANX 255

TABLESPACE indexes

STORAGE(

initial 1m

next 1m

PCTINCREASE 0

MINEXTENTS 1

MAXEXTENTS 8192

)

NOLOGGING

PARALLEL (degree 4)

/

sql>@create_example_index_pk

 

 

恢复只读表空军

SQL>ALTER tablespace users read only;

sql>alter system switch logfile;

sql>alter system switch logfile;

sql>alter system switch logfile;

sql>alter system switch logfile;

 

 

sql>shutdown immediate

sql>host

command> cd c:\oracle\oradata\backup\ora101t

command>copy c:\oracle\oradata\ora101t\*

 

 

command cd ..\..\ora101t

command>delete users01.dbf

 

 

sql>startup

 

 

sql>shutdown immediate

sql>host

command>cd c:\oracle\oradata\ora101t

command>copy c:\oracle\oradata\backup\ora101t\users01.dbf users01.dbf

command>exit

 

 

sql>startup

 

 

重建密码文件(远程登陆用) an example of rebuilding a password file:

1. First, shut down the database:

SQL> shutdown immediate

SQL> startup

2. Run the ORAPWD utility to build the password file in the $ORACLE_HOME/dbs directory

in name convention orapw$ORACLE_SID. The entries option determines how many users

can be stored in the password file:

orapwd file=orapworcl password=syspass entries=20

To see what users are utilizing the password file, keep a copy of the following query:

SQL>SELECT * FROM V$PWFILE_USERS;

我的RHEL: $ORACLE_HOME/dbs orapworcl

 

 

 

第4章 数据库恢复 Database Recovery

Restore 和 Recovery

sql>connect / as sysdba

sql>startup mount

 

 

rman>run

{

allocate channel c1 type disk;

restore database;

recover database;

alter database open;

}

 

 

用户管理恢复

SQL>CONNECT / AS SYSDBA

SQL>STARTUP

command>copy ..\backup\ora101t\users01.dbf

sql>startup mount

sql>recover database;

sql>alter database open;

 

 

恢复控制文件

1. First, you must configure RMAN to perform a control file autobackup:

rman>connect target

SQL> select dbid from v$database; 1125643918

rman>configure controlfile autobackup on;

rman>show all;

2. Next, perform a backup with the control file autobackup enabled:

rman>run

{

backup database;

backup (archivelog all);

}

3. Next, you simulate the missing control files by deleting all the control files.

(The database will need to be shut down to perform this simulated failure.)

command>delete *.ctl

4. Next, start the database in NOMOUNT mode,

command>sqlplus /nolog

sql>connect / as sysdba

sql>startup nomount

5. Next, connect to RMAN and the target database. You will also need to specify the DBID to identify the database you are connecting to, because the control file contains this information and failure causes the control file to be unavailable. The DBID was obtained in step 1 from connecting to the target database before the failure was introduced:

rman>connect target /

rman>set dbid 1125643918; (没有设置dbid,也搞定,不过是在本地运行dbid,如果恢复数据库有多个数据库的备份,可能需要设置dbid,控制文件里存储了dbid信息)

6. Next, restore the control file from backup:

rman>restore controlfile from autobackup;

7. Next, mount the database and begin to recover the database:

rman>alter database mount;

rman>recover database;

8. Finally, open the database with RESETLOGS option for normal operations:

rman>alter database open resetlogs;

 

 

重建控制文件 Re-creating a Control File

SQL>sqlplus /nolog

sql>connec / as sysdba

sql>alter database backup controlfile to trace;

command>edit ora101t_ora_3428.trc ---->存储为 backup_controlfile_noreset.txt

command>delete *.ctl

command>sqlplus /nolog

sql>connect / as sysdba

@backup_controlfile_noreset.txt

command>dir *.ctl

 

 

进行不完全恢复 Performing an Incomplete Recovery

RMAN Incomplete Recovery

SQL>STARTUP MOUNT

command:set NLS_DATE_FORMAT=DD-MON-YYYY HH24:MI:SS

rman>

run

{

set until time '06-SEP-2004 11:25:00';

restore database;

recover database;

}

 

 

rman>alter database open resetlogs;

 

 

sql>select * from v$log_history;

sql>startup mount

rman>

run

{

set until sequence 3 thread 1;

restore database;

recover database;

}

 

 

rman>alter database open resetlogs;

 

 

完成用户管理得不完全恢复

command>set NLS_DATE_FORMAT=DD-MON-YYYY HH24:MI:SS

command>delete USERS01.DBF

command>copy c:\oracle\backup\ora101t\users01.dbf

sql>startup mount

sql>recover database until time '06-SEP-2004 15:15:00';

SQL>ALTER database open resetlogs;

 

 

 

1 . c:\oradata\oracle\ora101t\>copy c:\oracle\backup\ora101t\*.dbf

2 . 查看 控制文件创建脚本

3 . SQL>CONNECT / AS SYSDBA;

SQL>backup_control_reset.txt

4 .sql>recover database until cancel using backup controlfile;

sql>alter database open resetlogs;

 

 

使用EM得数据恢复

 

 

在RESETLOGS操作之后完成恢复

Performing a Recovery after a RESETLOGS Operation

1. 1. Perform a backup if you do not have a good whole database backup:

RMAN>CONNECT target

rman>run

{

allocate channel c1 type disk;

backup database;

backup (archivelog all);

}

 

 

2. Force all the redo log information to archive logs by executing ALTER SYSTEM SWITCH LOGFILE:

sql>alter system switch logfile;

sql>alter system switch logfile;

sql>alter system switch logfile;

sql>alter system switch logfile;

 

 

3. Verify the redo log sequence and thread number in the V$LOG_HISTORY table so that you

can perform incomplete recovery to a redo log sequence:

SQL> select * from v$log_history;

 

 

4. Simulate a failure by shutting down the database and deleting the USERS01.DBF:

command>sqlplus /nolog

sql>connect / as sysdba

sql>shutdown immediate

sql>host

command>del users01.dbf

5. Begin the recovery process by starting the database in MOUNT mode:

sql>startup mount

6. Perform an incomplete recovery using the SET UNTIL SEQUENCE clause:

rman>connect target

rman>

run

{

set until sequence 5 thread 1; (恢复到sequence 4)

restore database;

recover database;

}

RMAN> alter database open resetlogs;

 

 

7. Simulate database activity by creating a table T1 and forcing this activity to the archived redo logs:

sql>connect test/test

sql>create table t1(c1 char(20));

sql>connect / as sysdba

sql>alter system switch logfile;

sql>alter system switch logfile;

sql>alter system switch logfile;

sql>alter system switch logfile;

 

 

8. Shut down the database and simulate a database failure by deleting the USERS01.DBF file:

sql>shutdown immediate

C:\oracle\oradata\ora101t\> del USERS01.DBF

 

 

9. Start the database in MOUNT mode and then perform a complete recovery in RMAN:

sql>startup mount

command>rman

rman>connect target

rman>

run

{

restore database;

recover database;

}

 

 

10. Validate that you have recovered through the last RESETLOGS by verifying that the current V$LOG_HISTORY table shows the log sequence 6 and thread 1 followed by new redo logs files:

sql>select * from v$log_history;

 

 

第5章 闪回数据库Understanding the Flashback Database

配置闪回恢复区

sql>alter system set db_recovery_file_dest_size = 6g scope=both;

sql>alter system set db_recovery_file_dest='c:\oracle\flash_recovery_area\ora101t';

sql>alter system set db_recovery_file_dest_size=2000m;

aql>alter system set db_recovery_file_dest='';

 

 

使用闪回恢复区Using the Flash Recovery Area

Let's walk through performing an automated disk-based backup and recovery:

1.First, connect to the target database:

command>set ORACLE_SID=ora101rc

command>rman

rman>connect target

2.Next, perform a backup of the target database:

rman>backup as copy database;

3. Finally, query the V$RECOVERY_FILE_DEST to determine if the SPACE_USED column value has increased.

sql>select * from v$recovery_file_dest;

 

 

备份闪回恢复区

rman>backup recovery area;

rman>backup recovery files;

 

 

配置闪回恢复区

1. Start the database in MOUNT mode:

sql>connect / as sysdba

sql>startup mount

2. Set the DB_FLASHBACK_RETENTION_TARGET parameter to the desired value. This value can be set as an initialization parameter if you're not using the SPFILE. This value is in minutes, which equates to three days:

SQL> alter system set db_flashback_retention_target=4320;

3. Enable the flashback capability:

sql>alter database flashback on;

4. Now the database can be opened for normal use:

sql>alter database open;

 

 

在RMAN中使用闪回数据库

(example演示了闪回某个时刻(能闪回的最旧scn),但我在这中间曾经resetlogs也几次,也更改了控制文件,能成吗,以后测试,估计要先恢复控制文件)

1. First, query the V$FLASHBACK_DATABASE_LOG view to retrieve the OLDEST_FLASHBACK_SCN:

command>sqlplus /nolog

sql>connect / as sysdba

sql>select oldest_flashback_scn,oldest_flashback_time from v$flashback_database_log;

2. Next, shut down and start the database in MOUNT mode:

sql>shutdown

sql>startup mount

3. Next, issue the Flashback Database recovery from RMAN:

command>rman

rman>connect target

rman>flashback database to scn=689316;

4. Finally, open the database with the RESETLOGS option,

sql>alter database open resetlogs;

 

 

监视闪回数据库

sql>select flashback_on from v$database;

sql>select oldest_flashback_scn,oldest_flashback_time,retention_target,estimated_flashback_size from v$flashback_database_log;

sql>select * from v$flashback_database_stat;

 

 

EM使用闪回数据库(略)

 

 

第6章 从用户错误恢复Recovering from User Errors

使用闪回丢弃

sql>flashback table t1 to before drop;

了解回收站

sql>select * from t1;

sql>drop table t1;

sql>show recyclebin;

sql>select object_name as recycle_name ,original_name,object_name from recyclebin;

BIN$HbesBq6flungQAB/AQBm7A==$0 TB01

sql>select * from "BIN$0ZVR8xxxxxxxxxxxxxxx"

sql>flashback table "BIN$0Zxxxxxxxxxxxxxxx" to before drop rename to t2;

sql>select * from t2;

sql>show recyclebin;

回收站和空间利用

sql>purge table "BIN$0ZVR8eDEQbK4sxxxxxxxxxxx==$0"

sql>purge tablespace users user test;

The PURGE RECYCLEBIN command is used to purge your own Recycle Bin.

The PURGE DBA_RECYCLEBIN command removes all objects from all users' Recycle Bins.

sql>purge recyclebin;

sql>connect / as sysdba;

sql>purge dba_recyclebin;

闪回丢弃和回收站的局限性(略)

通过EM实现闪回丢弃表

 

 

使用闪回版本查询Using Flashback Versions Query

1.

sql>update t1 set salary=18000 where employee='JONES';

sql>commit;

sql>update t1 set salary=21000 where employee='JONES';

sql>commit;

sql>update t1 set salary=25000 where employee='JONES';

sql>commit;

2.显示不同时刻的value

sql>select salary from t1 versions between scn minvalue and maxvalue where employee = 'JONES';

sql>select salary from t1

versions between timestamp

to_timestamp('2004-10-26 11:37:01','YYYY-MM-DD HH:MI:SS') and

to_timestamp('2004-10-26 11:43:01','YYYY-MM-DD HH:MI:SS')

where employee = 'JONES';

sql>select current_scn,scn_to_timestamp(current_scn) from v$database;

There are several new pseudocolumns that help you work with the Flashback Versions

Query:

VERSIONS_STARTTIME

VERSIONS_STARTSCN

VERSIONS_ENDTIME

VERSIONS_ENDSCN

VERSIONS_XID

VERSIONS_OPERATION

 

 

SQL>select to_char(versions_starttime,'DD-MON HH:MI') "START DATE",

to_char (versions_endtime, 'DD-MON HH:MI') "END DATE",

versions_xid,

versions_operation,

employee,

salary

from test.t1

versions between scn

minvalue and maxvalue

where employee = 'JONES'

 

 

select to_char(versions_starttime,'DD-MON HH:MI:SS') "START DATE",

to_char (versions_endtime, 'DD-MON HH:MI:SS') "END DATE",

versions_xid,

versions_operation,

salary

from t1

versions between scn

minvalue and maxvalue

where employee_id =197;

 

 

使用闪回事务查询 Using Flashback Transaction Query

The Flashback Transaction Query is designed to be a diagnostic tool to help identify changes made to the database at the transaction level.

The Flashback Transaction Query is based on undo data 。

Using the FLASHBACK_TRANSACTION_QUERY view can help identify the table and operation that is performed against the table. This view can be large, so it is helpful to use a filter like the transaction identifier, which is in the column XID. The XID value was identified in the previous

The privilege required to use the Flashback Transaction Query is the system privilege FLASHBACK ANY TABLE. (用sysdba管理吧?)

 

 

Flashback Versions Query example.

SQL>SELECT table_name,operation,undo_sql from flashback_transaction_query

where xid='020018001F030000';

sql>select table_name,operation,undo_sql from flashback_transaction_query

where start_timestamp >= to_timestamp('2004-10-26 06:45:00','YYYY-MM-DD HH:MI:SS')

and table_owner='TEST';

 

 

使用闪回表Using Flashback Table

Flashback Table is a Flashback Technology that allows you to recover a table or set tables to a specific point-in-time without performing an incomplete recovery.

There are two main clauses that are used with the Flashback Table:

The TO SCN clause can recover the Flashback Table to a certain SCN.

The TO TIMESTAMP clause can recover the Flashback Table to a certain point-in-time.

Let's walk through performing a Flashback Table with SCN:

1.Enable ROW MOVEMENT on table T1:

sql>alter table t1 enable row movement;

2.Retrieve the current SCN before you modify the table:

sql>select current_scn from v$database; 771511

3.

sql>update t1 set salary=50000 where employee = 'JONES';

sql>commit;

4.

sql>flashback table t1 to scn 771511;

5.

sql>select * from t1 where employee='JONES';

OK已恢复

 

 

Let's walk through performing a Flashback Table with SCN: 测试时间点闪回表

FLASHBACK TABLE employee TO TIMESTAMP TO_TIMESTAMP('2003-04-04 09:30:00', `YYYY-MM-DD HH24:MI:SS');

 

 

Triggers are disabled by default during the Flashback Table process.

sql>flashback table table_name to scn 771551 enable triggers;

 

 

第7章 处理块损坏Handling BlockCorruption

The detection of block corruption involves using multiple diagnostic logs to identify that corruption has occurred.These methods include monitoring and reading the log files from theoperating system, application, and database level. If audit functions are enabled at the operating system level, these audit logs can be reviewed as well.

 

In a Windows environment, the Event Viewer shows the contents of the system log.

In a Unix environment, the SYSLOG file contains the system log events. This is a file located in /var/adm/syslog

in many Unix environments.

Application logs can vary for each application that is installed.

Database logs and trace file references are located in the ALERT.LOG file and the associated trace files in the UDUMP

or BDUMP directories.

 

 

The following is an example of a trace file created in the UDUMP directory:

Dump file c:\oracle\admin\ora101\udump\ora101_ora_2236.trc

...........

data_block_dump

===============

tsiz: 0x6b8

hsiz: 0x18

pbl: 0x38088044

bdba: 0x01800008

flag=-----------

ntab=1

nrow=5

哪个块怀了 ?5

---------------------

 

 

Using Various Methods to Detect and Resolve Corruption

There are four methods for detecting corruption:

The ANALYZE TABLE table_name VALIDATE STRUCTURE command

The Oracle DBVERIFY utility used against the offline data files

The init.ora parameter DB_BLOCK_CHECKING, which checks data and index blocks each time they are created or modified

The DBMS_REPAIR package used against a table, index, or partition

 

 

使用ANALYZE命令Using the ANALYZE Utility

The ANALYZE TABLE table_name VALIDATE STRUCTURE command validates the integrity of the structure of the object being analyzed.

sql>analyze table test.t3 validate structure;

ERROR at line 1:

ORA-01498: block check failure - see trace file

This is a good starting point for identifying a database object that is corrupt.

 

 

使用DBVERIFY命令

DBVERIFY is an Oracle utility that is used to see whether corruption exists in a particular datafile. This utility is most often used on a backup of the database or when the database is not running

参数:FILE START END BLOCKSIZE LOGFILE FEEDBACK PARAFILE USERID SEGMENT_ID

C:\oracle\product\10.1.0\db_1\database>dbv help=y

command>dbv blocksize=8192 file=users01.dbf

command>dbv blocksize=8192 file=users01.dbf logfile=c:\temp\users01.log

 

 

使用DB_BLOCK_CHECKING Using DB_BLOCK_CHECKING

The default is set to FALSE for all non-system tablespaces. The SYSTEM tablespace is enabled by default.

This parameter forces checks for corrupt blocks each time blocks are modified at the tablespace level.

sql>show parameter db_block_checking

 

 

 

使用DBMS_REPAIR程序包

用bbed模拟一个坏块

sql>create table cxy.t3 as select * from tb01;

sql>select segment_name,file_id,block_id,blocks from dba_extents where segment_name = 'T3'; 表T3占用的块

bbed>modify 1000 file 4 block 1941; 书中是5

 

 

The general process for resolving physical corruption is to verify that you have corrupt data blocks and to determine their extent. Next, you need to put the list of corrupt data blocks in a holding table so the corrupt blocks can be identified. These blocks are then marked as corrupt

so that they can be skipped over in a query or during normal usage of the table. We will also demonstrate how to fix an index and freelists that could be impacted by physical corruption in a table.

 

 

Let's walk through an example of how to detect and mark corrupt blocks:

1. Generate a trace file of the corrupt block, which is automatically created by the ANALYZE command.

sql>connect / as sysdba

sql>analyze table test.t3 validate structure;

ERROR at line 1:

ORA-01498: block check failure - see trace file

 

 

2.View the trace file to determine bad block information.

In this example, the bad block is 5. This is indicated by the output line nrow=5, highlighted at the end of this code listing.

_________________________________________________________________________________

Dump file c:\oracle\admin\ora101\udump\ora101_ora_2236.trc

……

flag=-----------

ntab=1

nrow=5

--------------------------------------------------------------------------------

 

 

3.Create the repair tables to store and retrieve information from running the DBMS_REPAIR package

sql>host repair_tab.sql

-- Create DBMS Repair Table

declare

begin

dbms_repair.admin_tables

(table_name => 'REPAIR_TABLE',

table_type => dbms_repair.repair_table,

action => dbms_repair.create_action,

tablespace => 'USERS');

end;

SQL>

SQL> @repair_tab

PL/SQL procedure successfully completed.

SQL> select owner, object_name, object_type from dba_objects

where object_name like '%REPAIR_TABLE';

-------------- ---------------- -------------------

SYS DBA_REPAIR_TABLE VIEW

SYS REPAIR_TABLE TABLE

 

 

4.Check the object, or table T3, to determine whether there is a corrupt block in the table. Even though you know this from the ANALYZE TABLE table_name VALIDATE STRUCTURE command

sql>host edit check_obj.sql

--determine what block is corrupt in a table

set serveroutput on size 100000;

declare

rpr_count int;

begin

rpr_count := 0;

dbms_repair.check_object(

schema_name => 'CXY',

object_name => 'T3',

repair_table_name => 'REPAIR_TABLE',

corrupt_count => rpr_count);

dbms_output.put_line('repair block count: '

||to_char(rpr_count));

end;

SQL> @check_obj.sql

Server Output ON

PL/SQL procedure successfully completed.

repair block count: 1

 

 

5.Verify that REPAIR_TABLE contains information about table T3 and the bad block. This query has been broken into three queries for display purposes:

SQL> select object_name, block_id, corrupt_type, marked_corrupt,

corrupt_description, repair_description

from repair_table;

OBJECT_NAME BLOCK_ID CORRUPT_TYPE MARKED_COR

----------- -------- ------------ ----------

T3 3 1 FALSE(我的是true)

SQL> select object_name, corrupt_description

from repair_table;

OBJECT_NAME CORRUPT_DESCRIPTION

----------- -------------------------------------------

T3 kdbchk: row locked by non-existent transaction

table=0 slot=0

lockid=44 ktbbhitc=1

SQL> select object_name, repair_description from repair_table;

OBJECT_NAME REPAIR_DESCRIPTION

----------- ---------------------------

T3 mark block software corrupt

 

 

6. A backup of the table should be created before any attempts are made to fix the block or mark the block as corrupt. Therefore, you should attempt to salvage any good data from the corrupted block before marking it as corrupt.

sql>connect test/test

sql>create table cxy.t3_bak as select * from cxy.t3 where dbms_rowid.rowid_block_number(rowid) <> 1941 and dbms_rowid.rowid_to_absolute_fno (rowid,'CXY','T3') = 4;

读取不了,是否因为已经标记为坏块了,为什么我用 bbed修改的块,默认就标记为坏块了

sql>select c1 from t3_bak;

 

 

7.Mark block 5 as corrupt, but note that full table scans will still generate an ORA-1578 error.

sql>host edit fixblocks.sql

 

 

declare

fix_block_count int;

begin

fix_block_count := 0;

dbms_repair.fix_corrupt_blocks (

schema_name => 'CXY',

object_name => 'T3',

object_type => dbms_repair.table_object,

repair_table_name => 'REPAIR_TABLE',

fix_count => fix_block_count);

dbms_output.put_line('fix blocks count: ' ||

to_char(fix_block_count));

end;

 

 

 

sql>@fix_blocks

sql>select object_name,block_id,marked_corrupt from repair_table;

sql>select * from test.t3;

 

 

8.Use the DUMP_ORPHAN_KEYS procedure to dump the index entries that point to the corrupt

rows in the corrupt data blocks.

sql>host more orphan.sql

-- Create the orphan_table

declare

begin

dbms_repair.admin_tables

(table_name => 'ORPHAN_KEY_TABLE',

table_type => dbms_repair.orphan_table,

action => dbms_repair.create_action,

tablespace => 'USERS');

end;

SQL> @orphan_tab

 

 

9 Once the ORPHAN_KEY_TABLE is created, you can then dump the orphaned keys into this

table. The following example dumps the data into the ORPHAN_KEY_TABLE:

sql>host more orphan_dump.sql

sql>@orphan_dump

-- Create DBMS Dump orphan/Index entries

declare

orph_count int;

begin

orph_count:= 0;

dbms_repair.dump_orphan_keys (

schema_name => 'CXY',

object_name => 'INDEX1',

object_type => dbms_repair.index_object,

repair_table_name => 'REPAIR_TABLE',

orphan_table_name => 'ORPHAN_KEY_TABLE',

key_count => orph_count);

dbms_output.put_line('orphan-index entries: ' || to_char(orph_count));

end;

SQL>

SQL> @orphan_dump

orphan-index entries: 3

PL/SQL procedure successfully completed

sql>select index_name,count(*) from orphan_key_table group by index_name;

 

 

10.Mark the corrupt block as skip enabled.

sql>host more corrupt_block_skip.sql

-- Skips the corrupt blocks in the tables.

declare

begin

dbms_repair.skip_corrupt_blocks (

schema_name => 'CXY',

object_name => 'T3',

object_type => dbms_repair.table_object,

flags => dbms_repair.skip_flag);

end;

/

SQL> @corrupt_block_skip

PL/SQL procedure successfully completed.

 

 

11.Rebuild the freelists so that the corrupt block is never added to freelists of blocks.

sql>host more rebuild_freelists.sql

-- Removes the bad block from the freelist of blocks

declare

begin

dbms_repair.rebuild_freelists (

schema_name => 'CXY',

object_name => 'T3',

object_type => dbms_repair.table_object);

end;

/

SQL> @rebuild_freelists

PL/SQL procedure successfully completed.

我的出错:ORA-10614: Operation not allowed on this segment ,查文档,要自动段空间管理,可我已经=是自动段空间管理。

 

 

sql>@rebuild_freelists

 

 

12.

sql>drop index t3_pk;

sql>create index t3_pk on t3(c1);

 

 

块媒介恢复Block Media Recovery

command>rman

rman>connect target

rman>blockrecover datafile 5 block 6;

OK!

 

 

 

第8章Understanding Automatic Database Management

Composed of the Automatic Workload Repository (AWR), server-generated alerts, automated routine maintenance features, and the advisory framework, the components of the CMI simplify database administration through automation and intelligent design.

The AWR collects and processes performance statistics and metrics to be used for problem detection and self-tuning purposes. It also acts as the central storage repository for all elements of the CMI.

 

 

Using the Automatic Workload Repository (AWR)

AWR的两个组件:统计信息收集程序和工作负载储存库

The AWR consists of both the statistics collection facility and the workload repository. For simplicity, the general term AWR will be used when referring to the workload repository element.

统计信息收集程序:

The statistics collection facility of AWR resides in memory and is responsible for the collection of dynamic performance statistics.

Don't confuse AWR's statistics collection facility with Oracle's automatic statistics collection feature. AWR collects dynamic performance statistics. The automatic statistics collection feature collects optimizer statistics.

Unlike optimizer statistics, database performance statistics are not utilized by the query optimizer.Instead, they are used to measure the performance of the database over time.

数据库性能统计信息

Database performance statistics fall into one of three categories:

Cumulative values are statistics that accumulate over a period of time through continuous updating.

Metrics Metrics are statistics that represent the rate of change in a cumulative statistics category.

Sampled data Sampled data represents a sampling of the current state of all active sessions. These statistics are collected by the ASH sampler,

Oracle 10g中新的统计信息

Time model statistics, V$SYS_TIME_MODEL view:

Wait statistics, V$SERVICE_STATS view:

Operating system statistics, V$OSSTAT view:

 

 

工作负载储存库:

sql>select table_name from dba_tables

where tablespace_name='SYSAUX' and substr(table_name,1,2)='WR' and rownum<=20 order by 1;

启用AWR To enable AWR, the STATISTICS_LEVEL initialization parameter must be set to TYPICAL or ALL.

AWR空间考虑 略

活动会话历史 Active Session History

确定ASH的大小

ASH is actually a first-in, first-out (FIFO) buffer in memory that collects statistics on current session activity

ASH resides in the System Global Area (SGA) and its size is fixed for the lifetime of the instance.

Its size is calculated using the following calculation:The lesser of:

Total number of CPUs × 2MB of memory

5 percent of the Shared Pool size

ASH统计信息 略

ASH视图 V$ACTIVE_SESSION_HISTORY

ASH和AWR Oracle captures some of the ASH statistics to the workload repository for persistent storage

使用AWR

CREATE_SNAPSHOT Creates manual snapshots

DROP_SNAPSHOT_RANGE Drops a range of snapshots at once

CREATE_BASELINE Creates a single baseline

DROP_BASELINE Drops a single baseline

MODIFY_SNAPSHOT_SETTINGS Changes the RETENTION and INTERVAL settings

AWR快照

查看当前AWR设置

sql>select snap_interval,retention from dba_hist_wr_control;

创建快照

begin

DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT();

end;

修改快照频率

BEGIN

DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS(

RETENTION => 14400, INTERVAL => 45);

END;

丢弃快照

Exec DBMS_WORKLOAD_REPOSITORY.DROP_SNAPSHOT_RANGE(LOW_SNAP_ID =>157,HIGH_SNAP_ID =>170);

 

 

AWR基线

A baseline is the definition of a pair of snapshots that denote a significant workload period.

使用基线,只能人工进行基线丢弃,并同时删除相关的快照。

AWR baselines also make an excellent tool for application performance and scalability testing.

For example, a payroll application may be baselined with a small amount of test data to begin with. Then, as the test bed is increased, comparisons can be made to determine how well the application is scaling.

查询基线

sql>select * from dba_hist_snapshot;

建立基线

BEGIN

DBMS_WORKLOAD_REPOSITORY.CREATE_BASELINE(START_SNAP_ID =>180,

END_SNAP_ID =>181,

BASELINE_NAME =>'REPORTS1');

END;

/

丢弃基线

Exec DBMS_WORKLOAD_REPOSITORY.DROP_BASELINE('REPORTS1',FALSE);

 

 

使用AWR视图

DBA_HIST_ACTIVE_SESS_HISTORY Displays session statistics gathered from ASH.

DBA_HIST_BASELINE Displays information on baselines in the repository.

DBA_HIST_DATABASE_INSTANCE Displays database environment data.

DBA_HIST_SQL_PLAN Displays SQL execution path data.

DBA_HIST_WR_CONTROL Displays current AWR settings.

DBA_HIST_SNAPSHOT Displays information regarding snapshots stored in the AWR.

当需要为给定的时间段建立基线时,可以查询DBA_HIST_SNAPSHOT视图

sql>select snap_id,begin_interval_time,end_interval_time from dba_hist_snapshot order by 1;

使用AWR报告

The report is run through one of two SQL*Plus scripts:

awrrpt.sql, which generates a text file report

awrrpti.sql, which generates an HTML version of the report

These scripts reside in $ORACLE_HOME/rdbms/admin (on Unix systems) or %ORACLE_HOME%\rdbms\admin (on Windows systems).

The scripts will prompt for several options:

SQL> @$ORACLE_HOME/rdbms/admin/awrrpti.sql

 

 

Managing Server-Generated Alerts

Threshold alerts leverage the metrics computed by the MMON process to determine potential

performance problems. This is accomplished by comparing the current metrics to preset

threshold levels. If the threshold is exceeded, an alarm is generated.

阀值与非阀值报警

Non-threshold alerts are generated based on specific database events, rather than on threshold settings.

默认报警 oracle提供一组预定义报警

报警过程概述

The MMON process automatically computes metric values from in-memory performance statistics once every minute.

 

 

Using Enterprise Manager to Configure Thresholds

查看度量阀值 EM DATABASE CONTROL--MAMAGE METRICS 编辑度量阀值,设置多阀值

通过PL/SQL设置阀值

http://www.stanford.edu/dept/itss/docs/oracle/10g/appdev.101/b10802/d_salt.htm#1000747

TABLE 8 . 7 Comparison Operator Constants

Comparison Operator Description

OPERATOR_CONTAINS Metrics value is contained in the list of threshold values.

OPERATOR_DO_NOT_CHECK Will not apply default threshold to a specified object type.

OPERATOR_EQ Metrics value is equal to the threshold value.

OPERATOR_GE Metrics value is greater than or equal to the threshold value.

OPERATOR_GT Metrics value is greater than the threshold value.

OPERATOR_LE Metrics value is less than or equal to the threshold value.

OPERATOR_LT Metrics value is less than the threshold value.

OPERATOR_NE Metrics value is not equal to the threshold value.

 

 

exec DBMS_SERVER_ALERT.SET_THRESHOLD

(9000, --Metric Identifier, METRIC_ID in V$METRICNAME

DBMS_SERVER_ALERT.OPERATOR_GE, --Operator for Warning Threshold

'60', --Warning Threshold

DBMS_SERVER_ALERT.OPERATOR_GE, --Operator for Critical Threshold

'80', --Critical Threshold

1, --Observation Period in Minutes

1, --Occurrences

NULL, --Instance Name (NULL implies ORACLE_SID value)

DBMS_SERVER_ALERT.OBJECT_TYPE_TABLESPACE, ??Object Type

'KITCHEN' --Name of the Object);

 

 

BEGIN

DBMS_SERVER_ALERT.SET_THRESHOLD(

METRICS_ID => DBMS_SERVER_ALERT.CPU_TIME_PER_CALL,

WARNING_OPERATOR => DBMS_SERVER_ALERT.OPERATOR_GT,

WARNING_VALUE => '15000',

CRITICAL_OPERATOR => DBMS_SERVER_ALERT.OPERATOR_GT,

CRITICAL_VALUE => '30000',

OBSERVATION_PERIOD => 10,

CONSECUTIVE_OCCURRENCES => 3,

instance_name=>'ORCL',

object_type=>DBMS_SERVER_ALERT.OBJECT_TYPE_SERVICE,

object_name=>'ORCL.COM'

);

END;

 

 

 

 

catalrt.sql和dbmsslrt.sql在{ORACLE_HOME}/rdbms/admin下 安装缺少的包

 

 

查看服务器报警

TABLE 8 . 9 Server Alert Views

View Description

DBA_OUTSTANDING_ALERTS Current alerts awaiting resolution

DBA_ALERT_HISTORY Alerts that have been cleared

DBA_THRESHOLDS Threshold settings defined for the instance

V$ALERT_TYPES Alert type and group information

V$METRIC System-level metric values in memory

V$METRIC_NAME Names, identifiers, and other information about system metrics

V$METRIC_HISTORY Historical system-level metric values in memory

 

 

Using Automatic Routine Administration Tasks

使用自动例行管理程序

自动统计信息收集

Though optimizer statistics can be generated manually using the DBMS_STATS package, Oracle can do the job for you automatically through the use of its automatic statistics collection functionality. This is Oracle's recommended method for optimizer statistics collection.

The different types of optimizer statistics include the following:

Dictionary statistics,System statistics,Operating system statistics,User-defined statistics

 

 

优化器统计信息Optimizer Statistics

The availability of accurate and up-to-date optimizer statistics significantly increases the chances that the query optimizer will generate an efficient execution plan.

Let's look at a simple example of this.

sql>create table sales as select * from sh.sales where rownum <6;

sql>exec dbms_stats.gather_table_stats(null,'SALES');

sql>insert into sales select * from sh.sales where rownum <= 40000;

sql>commit;

sql>create index sales_idx on sales(cust_id) tablespace index;

sql>explain plan for select * from sales where cust_id = 123;

sql>@utlxpls 或 SQL> @$ORACLE_HOME/rdbms/admin/utlxpls.sql 是full扫描

(我的电脑上需完整路径,是path要修改吗?),

sql>exec dbms_stats.gather_table_stats(null,'SALES');

sql>delete from plan_table;

sql>commit;

sql>explain plan for select * from sales where cust_id = 123; 利用index 访问

sql>@utlxpls 或者 @$ORACLE_HOME/rdbms/admin/utlxpls.sql

字典统计信息

系统统计信息

It also needs to know something about the hardware on which it is running (in other words, CPU and I/O performance).

System statistics can be viewed using either the V$SYSSTAT or V$SESSTAT views, as shown here:

sql>select statistic#,name,value from v$sysstat where rownum <=20;

操作系统统计信息

sql>select * from V$OSSTAT ;

用户定义统计信息

 

 

收集优化器统计信息Collecting Optimizer Statistics

When a database is created in Oracle 10g, Oracle creates a job called GATHER_STATS_JOB in the scheduler. This job runs whenever the Maintenance window (defined in the

scheduler) is opened.

If the job is still running when the Maintenance window closes, it will continue to run until completion. By default, the Maintenance window is open weeknights from 10:00 P.M. until

6:00 A.M., and all day long on the weekends.

DBMS_STATS classifies statistics as “stale” when the number of rows in the object

has been modified by more than 10 percent since the last statistics were gathered.

sql>SELECT * FROM DBA_SCHEDULER_JOBS WHERE JOB_NAME='GATHER_STATS_JOB';

 

 

BEGIN

DBMS_SCHEDULER.DISABLE('GATHER_STATS_JOB');

END;

 

 

管理易变对象统计信息Managing Volatile Object Statistics

Oracle 10g offers several options for dealing with volatile objects. The first, and most obvious, is to simply gather the statistics manually using DBMS_STATS. Beyond that however, there

are two other options.

The first option is to set statistics to NULL.

sql>exec DBMS_STATS.DELETE_TABLE_STATS('BUTERTB','VALATILE_TABLE'); ------ schema ,table_name

sql>exec DBMS_STATS.LOCK_TABLE_STATS('BUTERTB','VOLATILE_TABLE');

The second option is to set statistics to values that are typical for the table and lock them.

To achieve this, gather statistics when the table is at a typical size. When complete, lock the table's statistics, as shown in the preceding example.

 

 

监视DML表变化Monitoring DML Table Changes

The DML monitoring feature keeps track of all DML activity (INSERT, UPDATE, DELETE) against a table since statistics were last gathered.

*_TAB_MODIFICATIONS

改变STATISTICS_LEVEL参数

BASIC(不建议)

TYPICAL This setting ensures collection of all major statistics that the database needs for selfmanagement.

ALL This setting results in the gathering of all of the TYPICAL statistics, as well as the operating system and plan execution statistics.

 

 

 

Understanding the Advisory Framework

顾问概况

The Advisory Framework offers a consistent, uniform interface across all advisors allowing them to interact with each other as needed.

自动数据库诊断监视器(ADDM)

ADDM represents the pinnacle of automatic database performance tuning. Without any human interaction, it proactively identifies performance issues and bottlenecks within the database.

段顾问The Segment Advisor

The Segment Advisor analyzes space fragmentation within segments and identifies the segments that are good candidates for the new online shrink operation.

撤销顾问The Undo Advisor

he Undo Advisor helps determine appropriate sizing for Undo tablespaces and helps determine optimal UNDO_RETENTION settings.

sql调整顾问The SQL Tuning Advisor

The SQL Tuning Advisor is used to analyze individual SQL statements and provides recommendations to increase performance.

sql访问顾问The SQL Access Advisor

The SQL Access Advisor is used to analyze a SQL workload (which can consist of one or more SQL statements) and recommend appropriate access structures to improve the performance of the workload. These access structures include, but are not limited to, materialized views and indexes

内存顾问The Memory Advisor

The Memory Advisor helps you to tune the size of the different Oracle memory structures.

SGA Advisor PGA Advisor Buffer Cache Advisor Library Cache Advisor

Oracle strongly encourages the use of ASMM over the use of the Memory Advisor.

 

 

调用顾问Invoking Advisors

DBMS_ADVISORY程序包DBMS_ADVISOR Package

To highlight the usage of the DBMS_ADVISOR package, let's look at the high-level steps that would occur during a typical tuning session:

1. CREATE_TASK:

2. SET_TASK_PARAMETER:

3. EXECUTE_TASK:

4. CREATE_TASK_REPORT:

5. MARK_RECOMMENDATION:

6. CREATE_TASK_SCRIPT:

 

 

顾问视图Advisor Views

TABLE 8 . 1 5 Advisor Views

View Description

DBA_ADVISOR_DEFINITIONS Advisor properties

DBA_ADVISOR_TASKS Global information about tasks

DBA_ADVISOR_LOG Current status tasks

DBA_ADVISOR_PARAMETERS Task parameters

DBA_ADVISOR_COMMANDS Advisor commands and associated actions

DBA_ADVISOR_OBJECTS Objects referenced by tasks

DBA_ADVISOR_FINDINGS Advisor findings

DBA_ADVISOR_RECOMMENDATIONS Advisor recommendations

DBA_ADVISOR_ACTIONS Actions associated to the recommendations

DBA_ADVISOR_RATIONALE Reasons for the recommendations

DBA_ADVISOR_USAGE Usage for each advisor

 

 

 

 

自动数据库诊断监视器Automatic Database Diagnostic Monitor (ADDM)

ADDM分析

ADDM is automatically invoked by the MMON process after each AWR snapshot is performed.

DB_TIME

The DB_TIME statistic is the most important of the time model statistics. DB_TIME captures total time spent in database calls for all components. DB_TIME represents an aggregation of CPU and non-idle wait event time.

Because DB_TIME is common across database components, the goal of tuning can be simplified to “reducing DB_TIME.”

Time model statistics at the session level can be viewed using the V$SESS_TIME_MODEL view.

For time model statistics at the system level, use the V$SYS_TIME_MODEL view.

等待事件的变化Wait Event Changes

ADDM also benefits greatly from the changes made in the Wait Event model in Oracle 10g. The first of these changes is the enhanced granularity of the statistics.

The second change to the Wait Event model is the classification of wait events into highlevel classes for ease of identification.

通过EM访问ADDM

SQL调整顾问

自动调整优化器 Automatic Tuning Optimizer (ATO)

In its normal mode, the optimizer accepts a SQL statement and generates a reasonable execution plan based on the available statistics.

When placed in tuning mode, the query optimizer is referred to as the Automatic Tuning Optimizer (ATO), and its emphasis is on generating a superior execution plan

自动SQL调整 Automatic SQL Tuning

The Automatic SQL Tuning functionality analyzes SQL using four distinct methods:

Statistics Analysis

SQL Profiling

Access Path Analysis Access Path Analysis examines whether the addition of one or more new indexes would significantly increase performance for the query.

SQL Structure Analysis SQL Structure Analysis looks at the syntax, semantics, and design of a query and identifies common problems associated with each.

使用SQL调整顾问Using the SQL Tuning Advisor

 

 

DBMS_SQLTUNE程序包 DBMS_SQLTUNE Package

Utilizing the DBMS_SQLTUNE package requires the ADVISOR privilege.

The DBMS_SQLTUNE package exposes the API to directly access the SQL Tuning Advisor.

 

 

 

创建任务

DECLARE

task_name varchar2(30);

sql_stmt clob;

BEGIN

sql_stmt := 'select /*+ full(a) use_hash(a) ' ||

' parallel(a,8) full(b) use_hash(b) parallel(b,8) ' ||

' */ a.type, sum(a.amt_paid) ' ||

' from large_table a, large_table2 b ' ||

' where a.key = b.key ' ||

' and state_id = :bnd';

task_name := DBMS_SQLTUNE.CREATE_TUNING_TASK(

sql_text => sql_stmt,

bind_list => sql_binds (anydata.ConvertNumber(32));

user_name => 'BUTERTB',

scope => 'COMPREHENSIVE',

time_limit => 45,

task_name => 'large_table_task',

description => 'Tune state totals query');

dbms_output.put_line('Task ' || task_name ||

' has been created.');

END;

/

执行任务

BEGIN

DBMS_SQLTUNE.EXECUTE_TUNING_TASK( task_name => 'large_table_task');

END;

The status of the executing task can be monitored by querying the DBA_ADVISOR_LOG view or V$SESSION_LONGOPS:

select status from dba_advisor_log where task_name = 'large_table_task';

BEGIN

DBMS_SQLTUNE.INTERRUPT_TUNING_TASK( task_name => 'large_table_task');

END;

If you want to interrupt a tuning task that is currently executing, use the INTERRUPT_

TUNING_TASK procedure:

BEGIN

DBMS_SQLTUNE.INTERRUPT_TUNING_TASK( task_name => 'large_table_task');

END;

 

 

Task Results

set long 1000

set longchunksize 1000

set linesize 132

select dbms_sqltune.report_tuning_task('large_table_task') from dual;

 

 

管理SQL_Profile

Accepting a SQL Profile

DECLARE

sqlprofile_name varchar2(30);

BEGIN

sqlprofile_name := DBMS_SQLTUNE.ACCEPT_SQL_PROFILE(

task_name => 'large_table_task',

profile_name => 'large_table_profile');

END;

改变SQL PROFILE

begin

DBMS_SQLTUNE.ALTER_SQL_PROFILE(

name => 'large_table_profile',

Atribute_name =>'STATUS',

Value => 'ENABLES');

END;

 

 

丢弃SQL PROFILE

BEGIN

DBMS_SQLTUNE.DROP_SQL_PROFILE(

Name => 'large_table_profile');

END;

 

 

管理SQL调整集

创建SQL调整集

BEGIN

DBMS_SQLTUNE.CREATE_SQLSET(

Sqlset_name => 'load_proc_set',

Description => 'SQL used in load procedure');

END;

加载SQL调整集

DECLARE

sql_cursor DBMS_SQLTUNE.SQLSET_CURSOR;

begin_snap number := 1; /* beginning snapshot id

end_snap number := 5; /* end snapshot id */

BEGIN

open sql_cursor for

select value(p)

from table (DBMS_SQLTUNE.SELECT_WORKLOAD_REPOSITORY(begin_snap, end_snap) p;

DBMS_SQLTUNE.LOAD_SQLSET(

sqlset_name => 'load_proc_set',

populate_cursor => sql_cursor);

END;

/

SQL调整视图 (略)

通过EM DatabaseControl 使用SQL调整顾问(略)

 第9章 理解自动存储管理

Understanding Automatic Storage Management

ASM is a cluster file system that can be used either with stand-alone Oracle instances or with Oracle Real Application Clusters (RAC) to provide a vertically integrated

subsystem encapsulating a file system,

ASM takes the ease of use of OMF and combines it with mirroring and striping features to provide a robust file system and logical volume manager that can even support multiple nodes in an Oracle RAC.

ASM体系介绍

ASM also eases the administrative burden of managing potentially thousands of database files by creating disk groups , which are comprised of disk devices and the files that reside on the disk devices managed as a logical unit.

ASM requires a special type of Oracle instance to provide the interface between a traditional Oracle instance and the file system.

Two new background processes support ASM instances:RBAL and ORBn . RBAL coordinates the disk activity for disk groups on an ASM instance, and ORBn, where n can be from 0

to 9, performs the actual extent movement between disks in the disk groups.

理解ASM实例

创建一个ASM实例

An ASM instance generally has a smaller memory footprint in the range of 60MB to 100MB and is automatically configured when ASM is specified as the database's file storage option when installing the Oracle software and an existing ASM instance does not already exist

While it does have an initialization parameter file and a password file, it has no data dictionary or control file. Therefore, all connections to an ASM instance are via SYS and SYSTEM

using operating system authentication only.

连接到一个ASM实例

Starting Up and Shutting Down an ASM Instance

the STARTUP command defaults to STARTUP MOUNT.

If an ASM instance is already started, you can use this command in an ASM instance to prevent other database instances from connecting to the ASM instance:

SQL> alter system enable restricted session;

Similarly, you can re-enable connections as in this example:

SQL> alter system disable restricted session

Performing a SHUTDOWN command on an ASM instance performs the same SHUTDOWN command on any database instances using the ASM instance;

if you use the SHUTDOWN ABORT command on the ASM instance,all dependent databases immediately perform a SHUTDOWN ABORT because there is no longer an ASM instance available to manage the database's storage.

 

 

模拟asm 见blog

 

 

If an ASM instance is already started, you can use this command in an ASM instance to prevent other database instances from connecting to the ASM instance:

SQL> alter system enable restricted session; (但我测试了还能数据库关闭了再打开还是能用)

SQL>alter system enable restricted session;

Similarly, you can re-enable connections as in this example:

sql>alter system disable restricted session;

定义ASM初始化参数,INSTANCE_TYPE,DB_UNIQUE_NAME,ASM_POWER_LIMIT,ASM_DISKSTRING,ASM_DISKGROUPS,LARGE_POOL_SIZE

>$ export ORACLE_SID=+ASM

>sqlplus / as sysdba

sql> show parameter INSTANCE_TYPE asm

sql> show parameter DB_UNIQUE_NAME +ASM

sql> show parameter ASM_POWER_LIMIT 1 (controls how fast rebalance operations occur)

SQL>show parameter asm_diskstring

SQL>show parameter ASM_DISKGROUPS

SQL> show parameter LARGE_POOL_SIZE 12m,和常规instance中的大池不同,所有内部的asm包都是从这个区域开始执行。

 

 

 

对ASM动态性能视图进行分类,分别在asm实例和rdbms实例中查看以下视图,其代表不同的含义,有些视图只在asm实例中启用。

V$ASM_DISK select group_number,disk_number,state,name,path from v$asm_disk;

V$ASM_DISKGROUP select group_number,name,state from V$ASM_DISKGROUP;

V$ASM_FILE

V$ASM_OPERATION

V$ASM_TEMPLATE

V$ASM_CLIENT

V$ASM_ALIAS

 

 

使用ASM文件名

sql> select file#,name,blocks from v$datafile;

ASM filenames can be one of six different formats.

we'll give an overview of the different formats and the context where they can be used:

As a reference to an existing file

During a single-file creation operation

During a multiple-file creation operation

 

 

完整路径的ASM文件名Fully Qualified Names

Fully qualified ASM filenames are used only when referencing an existing file.

+group/dbname/file type/tag.file.incarnation

where

group is the disk group name.

dbname is the database to which the file belongs.

file type is the Oracle file type.

tag is the type-specific information about the specific file type.

The file.incarnation pair ensures uniqueness.

 

 

+group/dbname/file type/tag.file.incarnation

 

 

数字化的名称Numeric Names Numeric names are used only when referencing an existing ASM file.

+DATA2.256.1

 

 

别名

You can use an alias either when referencing an existing object or when creating a single ASM file.

sql> alter diskgroup data2 add directory '+data2/redempt';

sql> alter diskgroup data2 add alias '+data2/redempt/users.dbf' for '+data2/rac0/datafile/users3.256.1';

sql> alter diskgroup data1 add alias '+data1/redempt/users.dbf' for '+DATA1/prod/datafile/users.259.602868565'; 我的电脑

使用模版的别名

You can use an alias with a template only when creating a new ASM file.

sql> create tablespace users4 datafile '+data2/uspare(datafile)';

不完全名称

You can use an incomplete filename format either for single-file or for multiple-file creation operations.

sql>create tablespace users5 datafile '+data1';

使用模板的不完全名

As with incomplete ASM filenames, you can use an incomplete filename with a template for singlefile or multiple-file creation operations.

sql> create tablespace users6 datafile '+data1(tempfile)';

 

 

理解ASM类型和模板

Understanding ASM File Types and Templates

individual template characteristics can be changed and apply only to the disk group where they reside.

管理ASM磁盘组

理解磁盘组体系结构

Files in a disk group are striped on the disks using either coarse striping or fine striping. Coarse striping spreads files in units of 1MB each across all disks. Coarse striping is appropriate

for a system with a high degree of concurrent small I/O requests such as an online transaction processing (OLTP) environment. Alternatively, fine striping spreads files in units of 128KB and is appropriate for traditional data warehouse environments or OLTP systems with low concurrency and improves response time for individual I/O requests.

有点费解,以后看看切割的具体原理和好处。。。。。。。。

理解故障组和磁盘组镜像Understanding Failure Groups and Disk Group Mirroring

A failure group is one or more disks within a disk group that share a common resource,unless you specifically assign a disk to a failure group, each disk in a disk group is assigned to its own failure group.

Once the failure groups have been defined, you can define the mirroring for the disk group;the number of failure groups available within a disk group can restrict the type of mirroring

available for the disk group. The following three types of mirroring are available:

External redundancy

Normal redundancy

High redundancy

理解磁盘组动态重平衡

Whenever the configuration of a disk group changes, whether it is adding or removing a failure group or a disk within a failure group, dynamic rebalancing occurs automatically to proportionally reallocate data from other members of the disk group to the new member of the disk group.

 

 

—————————————————————————————————————————————————————————————

我是使用裸分区的形式用DBCA设置的ASM磁盘组,和书中很有些不同,路径的表现形式这样的。

sql> select group_number,disk_number,name,failgroup,create_date,path from v$asm_disk

GROUP_NUMBER DISK_NUMBER NAME FAILGROUP CREATE_DATE PATH

------------ ----------- ---------- ---------- ------------ --------------------

1 0 VOL1 VOL1 03-OCT-06 ORCL:VOL1

1 1 VOL2 VOL2 03-OCT-06 ORCL:VOL2

2 0 VOL3 VOL3 03-OCT-06 ORCL:VOL3

2 1 VOL4 VOL4 03-OCT-06 ORCL:VOL4

SQL> select group_number,name,type,total_mb,free_mb from v$asm_diskgroup;

 

 

GROUP_NUMBER NAME TYPE TOTAL_MB FREE_MB

------------ ---------- ------------ ---------- ----------

1 DATA1 NORMAL 12284 9878

2 DATA2 NORMAL 12284 12182

SQL> drop diskgroup data2;

SQL> select group_number,disk_number,name,failgroup,create_date,path from v$asm_disk;

GROUP_NUMBER DISK_NUMBER NAME FAILGROUP CREATE_DATE PATH

------------ ----------- ---------- ---------- ------------ --------------------

0 0 03-OCT-06 ORCL:VOL3

0 1 03-OCT-06 ORCL:VOL4

1 0 VOL1 VOL1 03-OCT-06 ORCL:VOL1

1 1 VOL2 VOL2 03-OCT-06 ORCL:VOL2

————————————————————————————————————————————————————————

 

 

创建和删除磁盘组

sql> select group_number,disk_number,name,failgroup,create_date,path from v$asm_disk;

sql> select group_number,name,type,total_mb,free_mb from v$asm_diskgroup;

sql> create diskgroup data2 high redundancy

failgroup fg1 disk '/dev/raw/raw3' name d2a

failgroup fg2 disk '/dev/raw/raw4' name d2b

failgroup fg3 disk '/dev/raw/raw5' name d2c

failgroup fg4 disk '/dev/raw/raw6' name d2d;

 

 

sql> create diskgroup data2 normal redundancy

failgroup fg1 disk 'ORCL:VOL3' name d2a

failgroup fg2 disk 'ORCL:VOL4' name d2b;

 

 

Looking at the dynamic performance views, you see the new disk group available in V$ASM_DISKGROUP and the failure groups in V$ASM_DISK:

SQL> select group_number, name, type, total_mb, free_mb from v$asm_diskgroup;

SQL> select group_number, disk_number, name, failgroup, create_date, path from v$asm_disk;

 

 

in the following example, the disk /dev/raw/raw4 was previously used as part of a disk group, so you must specify FORCE:

sql>create diskgroup data2 high redundancy

failgroup fg1 disk '/dev/raw/raw3' name d2a

failgroup fg2 disk '/dev/raw/raw4' name d2b force

failgroup fg3 disk '/dev/raw/raw5' name d2c

failgroup fg4 disk '/dev/raw/raw6' name d2d;

 

 

sql>drop diskgroup data2;

sql>create diskgroup data2 high redundancy

failgroup fg1 disk '/dev/raw/raw3' name d2a

failgroup fg2 disk '/dev/raw/raw4' name d2b

failgroup fg3 disk '/dev/raw/raw5' name d2c;

 

 

sql> select group_number,disk_number,name,failgroup,create_date,path from v$asm_disk;

If the disk group had any database objects other than disk group metadata, you would have to specify INCLUDING CONTENTS in the DROP DISKGROUP command.

 

 

修改磁盘组

SQL> alter diskgroup data1 add failgroup d1fg3 disk '/dev/raw/raw6' name d1c;

检查重平衡操作的状态

SQL> select group_number, operation, state, power, actual,sofar, est_work, est_rate, est_minutes from v$asm_operation;

默认power=1,该参数控制重平衡的速度,决定为重平衡操作分配更多的资源,改变power限制 power可以为1-11

SQL> alter diskgroup data1 rebalance power 8;

检查重平衡操作的状态

SQL> select group_number, operation, state, power, actual,sofar, est_work, est_rate, est_minutes from v$asm_operation;

过几分钟再检查

sql>/

SQL> select group_number, disk_number, name,failgroup, create_date, path from v$asm_disk;

sql> select group_number,name,type,total_mb,free_mb from v$asm_diskgroup;

SQL> alter diskgroup data1 add failgroup d1fg3 disk '/dev/raw/*' name d1c;(忽略已经属于磁盘组的磁盘)

 

 

使用ALTER DISKGROUP DROP DISK,

 

 

SQL> select group_number, operation, state, power, actual,sofar, est_work, est_rate, est_minutes from v$asm_operation;

sql> alter diskgroup data2 drop disk d2d;

 

 

-------------------------------------------------------------------------------------------------------------------------------------------------------

我的机器执行了删除磁盘,但并没有生效,why

SQL> alter diskgroup data2 drop disk d2a;

SQL> select group_number, disk_number, name,failgroup, create_date, path from v$asm_disk;

 

 

GROUP_NUMBER DISK_NUMBER NAME FAILGROUP CREATE_DATE PATH

------------ ----------- ---------- ---------- ------------ --------------------

1 0 VOL1 VOL1 03-OCT-06 ORCL:VOL1

1 1 VOL2 VOL2 03-OCT-06 ORCL:VOL2

2 0 D2A FG1 05-OCT-06 ORCL:VOL3

2 1 D2B FG2 05-OCT-06 ORCL:VOL4

---------------------------------------------------------------------------------------------------------------------------------------------------------

 

 

使用ALTER DISKGROUP UNDROP DISKS

The UNDROP DISKS clause cancels any pending drops of a disk from a disk group. If the drop

operation has completed, you must re-add the disk to the disk group manually and incur the

rebalancing costs associated with adding the disk back to the disk group.

sql>alter diskgroup data2 add failgroup fg4 disk '/dev/raw/raw6' name d2d;

sql>select adg.name DG_NAME,ad.name FG_NAME,path from v$asm_disk ad right outer join v$asm_diskgroup adg

on ad.group_number = adg.group_number

where adg.name = 'DATA2';

sql>alter diskgroup data2 drop disk d2d;

sql>alter diskgroup data2 undrop disks;

sql>select adg.name DG_NAME,ad.name FG_NAME,path from v$asm_disk ad right outer join v$asm_diskgroup adg on ad.group_number = adg.group_number

where adg.name = 'DATA2';

 

 

使用ALTER DISKGROUP REBALANCE POWER n 调整重平衡速度

使用ALTER DISKGROUP DROP ADD 只发生一次重平衡操作,而不会发生两次

sql>select adg.name DG_NAME, ad.name FG_NAME, path from v$asm_disk ad right outer join v$asm_diskgroup adg

on ad.group_number = adg.group_number where adg.name = 'DATA2';

SQL> alter diskgroup data2 add failgroup fg4 disk '/dev/raw/raw6' name d2d

drop disk d2c;

SQL> select adg.name DG_NAME, ad.name FG_NAME, path from v$asm_disk ad right outer join v$asm_diskgroup adg

on ad.group_number = adg.group_number where adg.name = 'DATA2';

 

 

使用ALTER DISKGROUP DISMOUNT

sql>alter diskgroup data2 dismount;

 

 

使用ALTER DISKGROUP MOUNT

SQL>ALTER DISKGROUP data2 MOUNT;

 

 

使用ALTER DISKGROUP CHECK ALL

SQL>alter diskgroup data2 check all;

 

 

将EM DATABASE CONTROL用于ASM磁盘组

使用RMAN是实现将数据库迁移到ASM,以后测试下

1. Note the filenames of the control files and the online redo log files.

2. Shut down the database using the NORMAL, IMMEDIATE, or TRANSACTIONAL keywords.

3. Back up the database.

4. Edit the SPFILE to use OMF for all file destinations.

5. Edit the SPFILE to remove the CONTROL_FILES parameter.

6. Run the following RMAN script, substituting your specific filenames as needed:

STARTUP NOMOUNT;

RESTORE CONTROLFILE FROM '';

ALTER DATABASE MOUNT;

BACKUP AS COPY DATABASE FORMAT

'+';

SWITCH DATABASE TO COPY;

SQL "ALTER DATABASE RENAME

TO '+' ";

# repeat for all log file members

ALTER DATABASE OPEN RESETLOGS;

7. Delete or archive the old database files.

 

 

 

第10章 Understanding Globalization Support

 

 

全球化支持概述

Globalization Support Features

Language support

Territory support

Linguistic sorting and searching

Character sets and semantics

Locale and calendar customization

全球化支持结构 略

支持多语言应用程序 略

When a database is created, two session-independent NLS parameters are specified: the database character set and the national character set

the database character set is a strict superset of the client character set.

解析客户/服务器设置

Any application that connects to the server is considered to be a client, in terms of globalization.

When a client application is run, the client NLS environment is initialized from the environment variable settings.

When the application completes a connection to the database server, the resulting session is initialized with the NLS environment settings of the server.

However, immediately after the session is established, the client implicitly issues an ALTER SESSION statement to synchronize the session NLS environment to match the client's NLS environment.

 

 

sql>select sysdate from dual;

sql>alter session set NLS_LANGUAGE=Italian;

sql>select sysdate from dual;

 

 

在多语言数据库中使用

Unicode is a universal character set that encompasses all known written languages in the world.

 

 

使用NLS参数

Ultimately, Oracle globalization support options are defined by NLS parameter settings. By assigning values to specific NLS parameters, you can control when, where, and how Oracle will

utilize globalization support functionality.

 

 

Setting NLS Parameters

NLS parameters can be classified into the following categories:

Language and territory parameters

Date and time parameters

Calendar parameters

Numeric, list, and monetary parameters

Length semantics

Using the NLS_LANG Parameter

NLS_LANG is a client-side environment variable that defines the language, territory, and character set for the client. It is functionally equivalent to setting the NLS_LANGUAGE, NLS_TERRITORY, and NLS_CHARACTERSET parameters individually.

some example:

SQL> ALTER SESSION SET NLS_DATE_FORMAT = MM/DD/YY;

SQL> alter session set NLS_DATE_FORMAT ='"Today''s date is "MM/DD/YYYY';

SQL> alter session set nls_date_language=Italian;

SQL> select to_char(sysdate,'Day:Dd Month YYYY') from dual;

 

 

SQL> alter session set nls_timestamp_format='MM/DD/YYYY HH24:MI:SS.FF';

SQL> select startup_time from sys.dba_hist_snapshot where rownum < 3;

 

 

SQL> alter session set nls_timestamp_tz_format = 'YYYY/MM/DD HH:MI TZH:TZM';

SQL> select startup_time from sys.dba_hist_snapshot where rownum < 3;

SQL> select next_run_date from sys.dba_scheduler_jobs;

SQL> alter session set NLS_CALENDAR = 'Persian';

SQL> select sysdate from dual;

 

 

SQL> alter session set NLS_NUMERIC_CHARACTERS=",.";

SQL> select cust_id, to_char(sum(amount_sold), '9G999G999D99') big_sales from sales

group by cust_id

having sum(amount_sold) > 30000;

 

 

SQL> alter session set NLS_CURRENCY = "£";

SQL> select to_char(123.45,'L9G999G999D99') amount

from dual;

 

 

SQL> alter session set NLS_CURRENCY = " USD";

SQL> select to_char(123.45,'9G999G999D99L') amount

from dual;

 

 

Prioritizing NLS Parameters

NLS parameters can be defined using any of the following methods:

Server initialization parameters

Client environment variables

Using the ALTER SESSION statement

In SQL functions

Default values

Setting Server Initialization Parameters

Environment variables on the client side will govern local client-side NLS operations (operations that don't involve the database). They will also override server-side NLS settings for sessions created from the client.

$ export NLS_LANGUAGE=French

$ sqlplus "/ as sysdba"

 

 

Using the ALTER SESSION Statement

Setting NLS parameters using the ALTER SESSION statement also overrides the server-side NLS settings for the current session, as in this example:

SQL> ALTER SESSION set NLS_SORT = FRENCH;

 

Setting NLS Parameters in SQL Functions

NLS parameters can also be set inside certain SQL functions. Inline NLS parameter settings have the highest priority and will override any other NLS settings.

SQL> select to_char(sysdate, 'DD/MON/YYYY','nls_date_language=Italian') from dual;

SQL> select to_char(sysdate, 'DD/MON/YYYY') from dual;

Prioritization Summary

TABLE 1 0 . 3 NLS Parameter Setting Precedence

Method Priority Scope

Set in SQL functions 1 Current SQL function

Explicit ALTER SESSION statement 2 Current session

Client environment variable (implicit ALTER SESSION statement) 3 Current session

Set by server initialization parameter 4 Instance

Default 5 Instance

 

 

Using NLS Views

NLS_SESSION_PARAMETERS

NLS_INSTANCE_PARAMETERS

NLS_DATABASE_PARAMETERS

V$NLS_VALID_VALUES

 

 

Using Datetime Datatypes

The data stored using these datatypes are often called datetimes, and you'll learn about the following:

DATE

TIMESTAMP

TIMESTAMP WITH TIME ZONE

TIMESTAMP WITH LOCAL TIME ZONE

Oracle dates consist of seven parts: century, year, month, day, hours, minutes, and seconds (elapsed since midnight). In fact, they are stored internally in the database as seven separate elements.

SQL> create table birthdates (client_id NUMBER,birthdate DATE);

SQL> insert into birthdates values(1, sysdate);

SQL> select to_char(birthdate,'YYYY-MM-DD:HH24:MI:SS') from birthdates;

SQL> select dump(birthdate) from birthdates;

DUMP(BIRTHDATE)

------------------------------------------------------

Typ=12 Len=7: 120,104,10,22,12,30,45

Oracle stores the century and the year elements using excess 100 notation, which means that it adds 100 to the number before storing it. Also, the hours, minutes, and seconds elements are stored using excess 1 notation.

把上面的结果转换成标准的10进制表示法

DUMP(BIRTHDATE)

------------------------------------------------------

Typ=12 Len=7: 20,04,10,22,11,29,44

SQL> select to_char(birthdate,'YYYY-MM-DD:HH24:MI:SS') from birthdates;

TO_CHAR(BIRTHDATE,'

-------------------

2004-10-22:11:29:44

 

 

 

DATE datatypes always store both a date and a time. If no time is specified when storing a date,Oracle will use a default time of midnight. This can be problematic if you're not careful,

To resolve this problem, you can use the TRUNC function, as shown here:

SQL> select * from conv_dates where trunc(converted_date) = trunc(sysdate); 除去时间元素

 

 

When entering date information into a DATE datatype, you can specify it in several ways:

Literal

SQL> alter session set NLS_DATE_FORMAT = "MM-DD-YYYY";

SQL> insert into birthdates values(2, '12-30-1972');

ANSI date literal

It must be formatted exactly as shown here:DATE 'YYYY-MM-DD'

SQL> insert into birthdates values(3, DATE '1966-08-25');

TO_DATE function (对于转换以字符型存储的日期是很方便的)

SQL> insert into birthdates values(4,to_date('09-29-1993 13:45', 'MM-DD-YYYY HH24:MI');

 

 

TIMESTAMP Datatype

By default, the TIMESTAMP datatype stores fractional seconds to six digits of precision. This can be changed, however, by specifying a number between 0 and 9 in parentheses after the

TIMESTAMP keyword.

SQL> create table test_stamp (stamp timestamp(2));

SQL> insert into test_stamp select to_timestamp('09-SEP-2004 17:54.38.92','DD-MON-YYYY HH24:MI:SS:FF') from dual;

SQL> commit;

SQL> select * from test_stamp;

 

 

TIMESTAMP WITH TIME ZONE Datatype

SQL> create table stamp_tz (stamp_tz TIMESTAMP(4) WITH TIME ZONE);

TIMESTAMP WITH LOCAL TIME ZONE Datatype

The TIMESTAMP WITH TIME ZONE doesn't actually store time zone information at all.

转换为当地时间再存储

 

 

Using Linguistic Sorts and Searches

Binary Sorts

Binary sorts perform a numeric sort based on the encoded value (in the character set) for each character.

Linguistic Sorts

Oracle provides a rich set of linguistic sort definitions that cover most of the languages of the world. However, it also provides the ability to define new definitions or to modify existing definitions. The Oracle Locale Builder, a graphical tool that ships with Oracle 10g, can be used to view, create, and modify sort definitions and other locale definitions.

Using Linguistic Sort Parameters

NLS_SORT

The NLS_SORT parameter defines which type of sorting—binary or linguistic—should be performed for SQL sort operations.

By default, the value for NLS_SORT is the default sort method defined for the language identified in the NLS_LANGUAGE parameter.

SQL> alter session set NLS_SORT = German;

By using the NLS_SORT parameter, you can make the following changes to Oracle's default functionality:

Set the default sort method for all ORDER BY operations.

Set the default sort value for the NLSSORT function.

SQL> show parameters NLS_LANGUAGE

SQL> show parameters NLS_SORT

 

Remember, the NLS_SORT parameter overrides the default sorting method for ORDER BY operations and for the NLSSORT function, but has no effect on other sort operations, such as

WHERE conditions

To perform a linguistic sort, you call the NLSSORT function. Normally, the function would

be called like this:

SQL> select * from sort_test where nlssort(name, 'NLS_SORT=German_din') > nlssort('einschlie遧ich','NLS_SORT=German_din');

However, because the NLS_SORT parameter defines the default sort for the NLSSORT function,specifying the sort inside the function is unnecessary. The following method works as well:

SQL> select * from sort_test where nlssort(name) > nlssort('einschlie遧ich');

 

 

NLS_COMP

The NLS_COMP parameter works in conjunction with the NLS_SORT parameter to make linguistic

sorts easier to use. When the NLS_COMP parameter is set to a value of ANSI, all of the following SQL

operations will default to linguistic sorting (using the language specified in NLS_SORT parameter):

ORDER BY

BETWEEN

CASE WHEN

HAVING

IN/OUT

START WITH

WHERE

 

 

 

11 Managing Resources

Putting the Pieces Together 把最后一部分笔记放在前面了。

In this section, you will be provided step-by-step instructions for the creation of the plans shown in Figures 11.2 and 11.3. First, the pending area will be created. Next, the consumer resource groups will be created. After that, the resource plans will be created. And, finally, the resource plan directives will be created to tie them all together.

OFF_HOURS_PLAN Ratio 10:5:2:1

|

----------------------------------------------------------------------------------------

| | | |

SYS_GROUP 10 NIGHTLY_PROCESSING_GROUP 5 OLAP_REPORTS_GROUP 2 OTHER_GROUPS 1

 

 

word复制这个图 11.3

Creating the Pending Area

SQL> exec dbms_resource_manager.create_pending_area();

 

 

Creating the Consumer Resource Groups

SQL> begin

dbms_resource_manager.create_consumer_group(

'OLTP_GROUP','Incoming orders');

end;

SQL>/

 

SQL> begin

dbms_resource_manager.create_consumer_group(

'DAY_REPORTS_GROUP','DAYTIME REPORTS');

end;

SQL>/

 

 

SQL> begin

dbms_resource_manager.create_consumer_group(

'NIGHTLY_PROCESSING_GROUP','BULK LOADS, ETL, ETC.');

end;

SQL>/

 

 

SQL> begin

dbms_resource_manager.create_consumer_group(

'OLAP_REPORTS_GROUP','OFF HOURS REPORTS');

end;

SQL>/

 

 

Creating the Resource Plans

SQL> begin

dbms_resource_manager.create_plan(

PLAN => 'DAY_PLAN',

COMMENT => 'GOVERNS NORMAL WORKING HOURS ');

end;

SQL> /

 

 

SQL> begin

dbms_resource_manager.create_plan(

PLAN => 'OLTP_PLAN',

COMMENT => 'ORDER ENTRY SUB-PLAN');

end;

SQL> /

 

 

SQL> begin

dbms_resource_manager.create_plan(

PLAN => 'OFF_HOURS_PLAN',

COMMENT => 'GOVERNS NON-WORKING HOURS',

CPU_MTH => 'RATIO');

end;

SQL> /

 

 

 

Creating the Resource Plan Directives

Creating the OFF_HOURS_PLAN Plan Directives

SQL> begin

dbms_resource_manager.create_plan_directive(

PLAN => 'OFF_HOURS_PLAN',

GROUP_OR_SUBPLAN => 'SYS_GROUP',

COMMENT => 'CPU ALLOCATION FOR SYS_GROUP',

CPU_P1 => 10);

end;

SQL>/

 

 

SQL> begin

dbms_resource_manager.create_plan_directive(

PLAN => 'OFF_HOURS_PLAN',

GROUP_OR_SUBPLAN => 'NIGHTLY_PROCESSING_GROUP',

COMMENT => 'CPU ALLOCATION FOR NIGHTLY JOBS',

CPU_P1 => 5);

end;

SQL>/

 

 

SQL> begin

dbms_resource_manager.create_plan_directive(

PLAN => 'OFF_HOURS_PLAN',

GROUP_OR_SUBPLAN => 'OLAP_REPORTS_GROUP',

COMMENT => 'CPU ALLOCATION FOR NIGHTLY REPORTS',

CPU_P1 => 2);

end;

SQL>/

 

 

SQL> begin

dbms_resource_manager.create_plan_directive(

PLAN => 'OFF_HOURS_PLAN',

GROUP_OR_SUBPLAN => 'OTHER_GROUPS',

COMMENT => 'CPU ALLOCATION FOR OTHER_GROUPS',

CPU_P1 => 1);

end;

SQL>/

 

 

Creating the OLTP_PLAN Plan Directives

SQL> begin

dbms_resource_manager.create_plan_directive(

PLAN => 'OLTP_PLAN',

GROUP_OR_SUBPLAN => 'OLTP_GROUP',

COMMENT => 'CPU ALLOCATION FOR OLTP USERS',

CPU_P1 => 90);

end;

SQL>/

 

 

SQL> begin

dbms_resource_manager.create_plan_directive(

PLAN => 'OLTP_PLAN',

GROUP_OR_SUBPLAN => 'DAY_REPORTS_GROUP',

COMMENT => 'CPU ALLOCATION FOR DAYTIME REPORTING',

CPU_P1 => 10);

end;

SQL>/

 

 

SQL> begin

dbms_resource_manager.create_plan_directive(

PLAN => 'OLTP_PLAN',

GROUP_OR_SUBPLAN => 'OTHER_GROUPS',

COMMENT => 'CPU ALLOCATION FOR OTHER_GROUPS',

CPU_P2 => 100);

end;

SQL>/

 

 

Creating the DAY_PLAN Plan Directives

SQL> begin

dbms_resource_manager.create_plan_directive(

PLAN => 'DAY_PLAN',

GROUP_OR_SUBPLAN => 'SYS_GROUP',

COMMENT => 'CPU ALLOCATION FOR SYS_GROUP',

CPU_P1 => 100);

end;

SQL>/

 

 

SQL> begin

dbms_resource_manager.create_plan_directive(

PLAN => 'DAY_PLAN',

GROUP_OR_SUBPLAN => 'OLTP_PLAN',

COMMENT => 'CPU ALLOCATION FOR OLTP_PLAN SUB-PLAN',

CPU_P2 => 100);

end;

SQL>/

 

 

SQL> begin

dbms_resource_manager.create_plan_directive(

PLAN => 'DAY_PLAN',

GROUP_OR_SUBPLAN => 'OTHER_GROUPS',

COMMENT => 'CPU ALLOCATION FOR OTHER_GROUPS',

CPU_P3 => 100);

end;

SQL>/

 

 

Validating the Pending Area

SQL> exec dbms_resource_manager.validate_pending_area; 出错,以后修正

Submitting the Pending Area

SQL> exec dbms_resource_manager.submit_pending_area;

Enabling the Resource Plans

Only one resource plan may be enabled at any given time, and the enabled plan can be switched at any time.

There are two methods in which resource plans can be enabled:

Initialization parameter (at instance startup time)

ALTER SYSTEM statement

Initialization Parameter Method

the following code can be added to the init.ora file:

RESOURCE_MANAGER_PLAN = DAY_PLAN;

ALTER SYSTEM Statement Method

ALTER SYSTEM SET RESOURCE_MANAGER_PLAN = ‘DAY_PLAN’ [SCOPE = BOTH];

 

 

Switching the Enabled Resource Plan

SQL> ALTER SYSTEM SET RESOURCE_MANAGER_PLAN = ‘FORCE:OFF_HOURS_PLAN’;

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------

 

 

 

Oracle's Database Resource Manager (DRM) circumvents the inefficient operating system management process by giving the Oracle database server more control over resource management decisions.

 

 

An Overview of the Database Resource Manager

There are three main elements that comprise the DRM:

 

Resource consumer groups

 

Resource plans

 

Resource plan directives

DRM allocates resources among resource consumer groups based on a resource plan.A resource plan consists of resource plan directives that specify how resources should be distributed among the groups. Resource consumer groups are categories to which user sessions can be assigned. These groups can then be allocated resources through plan directives.

 

 

Working with the Pending Area

Before defining or updating any DRM objects, you must first establish a pending area

Creating a Pending Area

SQL> exec dbms_resource_manager.create_pending_area();

Validating Changes

SQL> exec dbms_resource_manager.validate_pending_area;

Submitting the Pending Area

SQL> exec dbms_resource_manager.submit_pending_area;

Clearing the Pending Area

SQL> exec dbms_resource_manager.clear_pending_area;

 

 

Resource Consumer Groups

In either situation, users can be assigned to one or more resource consumer groups, although each active session can be assigned to only one resource consumer group at a time.

Managing Resource Consumer Groups

Creating Resource Consumer Groups

TABLE 1 1 . 1 CREATE_CONSUMER_GROUP Parameters

Parameter Description

CONSUMER_GROUP Consumer group name.

COMMENT Any comment (usually a description of the group).

CPU_MTH Method used to schedule CPU resources between sessions in the group. Valid values are:ROUND_ROBIN (the default) ensures fair distribution by using a roundrobin

schedule. RUN_TO_COMPLETION schedules the most active sessions ahead of other sessions.

SQL> begin

dbms_resource_manager.create_consumer_group('developers',

'application developers');

end;

SQL>/

SQL> select consumer_group, cpu_method, comments from dba_rsrc_consumer_groups

where consumer_group = 'DEVELOPERS';

By default, there are four resource consumer groups predefined in the database. They are defined in Table 11.2.

 

 

TABLE 1 1 . 2 Predefined Resource Consumer Groups

Group Name Description

DEFAULT_CONSUMER_GROUP Default group for all users/sessions not assigned to an initial consumer

group.

OTHER_GROUPS Catch-all group for users assigned to groups that are not part of the currently active plan. This group cannot be explicitly assigned to users.

SYS_GROUP Used by the Oracle-provided SYSTEM_PLAN plan.

LOW_GROUP Used by the Oracle-provided SYSTEM_PLAN plan.

 

 

Updating Resource Consumer Groups

SQL> begin

dbms_resource_manager.update_consumer_group(

CONSUMER_GROUP => 'DEVELOPERS',

NEW_CPU_MTH => 'RUN-TO-COMPLETION');

end;

SQL> /

 

 

Deleting a Resource Consumer Group

SQL> begin

dbms_resource_manager.delete_consumer_group('DEVELOPERS');

end;

SQL>/

 

 

Assigning User Sessions to Consumer

You still need a method of assigning consumer groups to user sessions. DRM can be configured to automatically assign consumer groups to sessions based on specific session attributes. This process is called consumer group mapping

Creating Consumer Group Mappings

SQL> begin

dbms_resource_manager.set_consumer_group_mapping(ATTRIBUTE => dbms_resource_manager.CLIENT_OS_USER,

VALUE => 'a',CONSUMER_GROUP => 'developers');

end;

SQL>/

 

 

Establishing Mapping Priorities

SQL> begin

dbms_resource_manager.SET_CONSUMER_GROUP_MAPPING_PRI(

EXPLICIT => 1,

CLIENT_OS_USER => 2,

CLIENT_MACHINE => 3,

CLIENT_PROGRAM => 4,

ORACLE_USER => 5,

MODULE_NAME => 6,

MODULE_NAME_ACTION => 7,

SERVICE_NAME => 8,

SERVICE_MODULE => 9,

SERVICE_MODULE_ACTION => 10);

end;

SQL>/

 

 

Changing Resource Consumer Groups

When a user is granted the switch privilege, they can use the DBMS_SESSION.SWITCH_CURRENT_CONSUMER_GROUP procedure to change the consumer group for their current session.

Switching Groups using DBMS_RESOURCE_MANAGER Procedures

The first procedure, SWITCH_CONSUMER_GROUP_FOR_SESS, explicitly assigns an active session to a new consumer group.

SQL> begin

dbms_resource_manager.switch_consumer_group_for_sess (

SESSION_ID => '56',

SESSION_SERIAL=> '106',

CONSUMER_GROUP => 'LOW_GROUP');

end;

SQL>

 

 

The second method of changing the consumer group for an active session is the SWITCH_CONSUMER_GROUP_FOR_USER procedure. This procedure changes all active sessions for a given Oracle username. Here's an example:

SQL> begin

dbms_resource_manager.switch_consumer_group_for_user (

USER => 'test01',

CONSUMER_GROUP => 'LOW_GROUP');

end;

SQL>/

 

 

Switching Groups Using DBMS_SESSION

 

 

Managing the Switch Privilege

--GRANTEE_NAME,CONSUMER_GROUP,GRANT_OPTION

SQL> begin

dbms_resource_manager_privs.grant_switch_consumer_group(

'PROG_ROLE', 'developers',FALSE);

end;

SQL>/

In this example, the switch privilege is granted to the PROG_ROLE role. Any user granted that role will be able to switch to the DEVELOPERS group, but they cannot grant the privilege to any other users.

SQL>

begin

dbms_resource_manager_privs.revoke_switch_consumer_group('PROG_ROLE', 'developers');

end;

SQL>/

 

 

 

Resource Plans

DRM allocates resources among resource consumer groups based on a resource plan.

Resource plans prioritize resource allocation through the use of levels, with level 1 being the highest priority and level 8 being the lowest.

Resource Plan CPU Allocation Methods

EMPHASIS The allocated amount is treated as a percentage

RATIO The allocated amount is treated as a ratio of the total CPU resources

Creating Simple Resource Plans

They are distinct from complex plans in that they create a resource plan, resource plan directives, and resource consumer groups in one simple procedure

SQL> begin

DBMS_RESOURCE_MANAGER.CREATE_SIMPLE_PLAN(

SIMPLE_PLAN => 'DEPARTMENTS',

CONSUMER_GROUP1 => 'PAYROLL',

GROUP1_CPU => 50,

CONSUMER_GROUP2 => 'SALES',

GROUP2_CPU => 25,

CONSUMER_GROUP3 => 'MARKETING',

GROUP3_CPU => 25);

end;

SQL> /

Final DEPARTMENTS Plan

Level Sys_Group Payroll Sales Marketing Other_Groups

1 100%

2 50% 25% 25%

3 100%

 

 

 

Creating Complex Resource Plans

For complex plans, each of these elements is defined and stored separately.

Creating a plan involves defining the name of the plan, a comment or description regarding the plan, and the methods that the plan will follow when allocating specific resources. Notice

that the plan does not determine which resources it will manage. Those are predefined by Oracle

DBMS_RESOURCE_MANAGER.CREATE_PLAN procedure, whose parameters are described in Table 11.15.

PLAN COMMENT CPU_MTH ......

SQL> begin

dbms_resource_manager.create_plan(

PLAN => 'DAY',

COMMENT => 'CREATED BY TBB');

end;

SQL>/

SQL> select plan, num_plan_directives, cpu_method from dba_rsrc_plans;

 

 

Creating Resource Sub-Plans

A sub-plan is a plan. It only becomes a sub-plan if a higher level plan allocates resources to it (through a resource plan directive).

Modifying Resource Plans

exec不能换行?

SQL> exec dbms_resource_manager.update_plan(PLAN => 'DAY',NEW_COMMENT => 'Plan for scheduled work hours');

Deleting Resource Plans

SQL> exec dbms_resource_manager.delete_plan(‘DAY');

 

 

Resource Plan Directives

Resource plan directives assign consumer groups to resource plans and define the resource allocations for each. In addition to consumer groups, plan directives can

allocate resources to sub-plans.

Resource allocation methods are predefined by Oracle and, as such, are not modifiable.These represent the various methods available to DRM to allocate resources.

CPU

Active session pool with queuing

Degree of parallelism limit

Automatic consumer group switching

Canceling SQL and terminating sessions

Execution time limit

Undo pool

Idle time limit

 

 

Creating Resource Plan Directives

DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE

The following example creates a resource plan directive for the DAY plan, which limits the

parallel degree settings for the DEVELOPERS group:

SQL> begin

dbms_resource_manager.create_plan_directive(

PLAN => 'DAY',

COMMENT => 'DEVELOPERS DAY PLAN',

GROUP_OR_SUBPLAN => 'DEVELOPERS',

PARALLEL_DEGREE_LIMIT_P1 => '4');

end;

SQL> /

Creating Sub-Plan Directives

For example, to define a sub-plan under the DAY plan, you would set the GROUP_OR_SUBPLAN parameter to the name of the target plan, as follows:

SQL> begin

dbms_resource_manager.create_plan_directive(

PLAN => 'DAY',

COMMENT => 'DEPARTMENTS SUB-PLAN',

GROUP_OR_SUBPLAN => 'DEPARTMENTS',

CPU_P2=> 50);

end;

SQL> /

 

 

Creating Multi-Level Plan Directives

Multi-level plan directives are used to prioritize CPU allocation for consumer groups and subplans.

SQL> begin

dbms_resource_manager.create_plan_directive(

PLAN => 'DAY',

COMMENT => 'SYSTEM USERS',

GROUP_OR_SUBPLAN => 'SYS_GROUP',

CPU_P1=> 100);

end;

SQL> /

 

 

SQL> begin

dbms_resource_manager.create_plan_directive(

PLAN => 'DAY',

COMMENT => 'DEPARTMENTS SUB-PLAN',

GROUP_OR_SUBPLAN => 'DEPARTMENTS',

CPU_P2=> 50);

end;

SQL> /

 

 

SQL> begin

dbms_resource_manager.create_plan_directive(

PLAN => 'DAY',

COMMENT => 'DEVELOPERS GROUP CPU ALLOCATION',

GROUP_OR_SUBPLAN => 'DEVELOPERS',

CPU_P2=> 50);

end;

SQL> /

 

 

SQL> begin

dbms_resource_manager.create_plan_directive(

PLAN => 'DAY',

COMMENT => 'OTHER_GROUPS CPU ALLOCATION',

GROUP_OR_SUBPLAN => 'OTHER_GROUPS',

CPU_P3=> 100);

end;

SQL> /

 

 

Creating Automatic Consumer Group Switching Directives

SWITCH_TIME The SWITCH_TIME parameter sets the maximum execution time (in seconds) allowed for any operation.转换后不会回到原来的群

SWITCH_TIME_IN_CALL 类似SWITCH_TIME ,但违规的会话在转换群中停留的时间至操作结束为止,会话将返回他原来的群

SWITCH_ESTIMATE 预测执行时间,如果超过,就进行消费群转换

the switch group can also be set to the Oracle constants KILL_SESSION or CANCEL_SQL

To create a plan directive that automatically cancels operations that execute for more than

one hour, see the following example:

SQL> begin

dbms_resource_manager.create_plan_directive(

PLAN => 'DAY',

COMMENT => 'LIMIT DEVELOPERS EXECUTION TIME',

GROUP_OR_SUBPLAN => 'DEVELOPERS',

SWITCH_GROUP => 'CANCEL_SQL',

SWITCH_TIME => 3600);

end;

SQL> /

 

 

To create a plan directive that temporarily moves DEVELOPERS sessions to a lower priority group whenever Oracle estimates that an operation will execute for more than 15 minutes, see

this example:

SQL> begin

dbms_resource_manager.create_plan_directive(

PLAN => 'DAY',

COMMENT => 'SWITCH DEVELOPERS TEMPORARILY',

GROUP_OR_SUBPLAN => 'DEVELOPERS',

SWITCH_TIME_IN_CALL => 900,

SWITCH_GROUP => 'LOW_GROUP',

SWITCH_ESTIMATE => TRUE);

end;

SQL> /

 

 

Updating Resource Plan Directives

SQL> begin

dbms_resource_manager.update_plan_directive(

PLAN => ‘DAY’,

GROUP_OR_SUBPLAN => ‘DEVELOPERS’,

NEW_SWITCH_ESTIMATE => FALSE);

end;

SQL>/

加前缀NEW_到科修改的参数……

 

 

Deleting Resource Plan Directives

SQL> begin

dbms_resource_manager.delete_plan_directive(

PLAN => ‘DAY’,

GROUP_OR_SUBPLAN => ‘DEVELOPERS’);

end;

SQL>/

 

 

 

 

 

12 Using the Scheduler to Automate Tasks

Scheduler Overview

Jobs A job instructs the Scheduler to run a specific program at a specific time on a specific date.

Programs A program contains the code (or a reference to the code) that needs to be run to accomplish a task.

Schedules A schedule contains a start date, an optional end date, and a repeat interval.

Windows A window identifies a recurring block of time during which a specific resource plan should be enabled to govern resource allocation for the database.

Job groups A job group is a logical method of classifying jobs with similar characteristics.

Window groups A window group is a logical method of grouping windows.

 

 

Scheduler Architecture

The job table, which houses all the active jobs within the database

SQL>select owner, job_name, state,NEXT_RUN_DATE from dba_scheduler_jobs;

The job coordinator, a key Oracle process that ensures that jobs are being run on schedule

Job slaves, processes that carry out the execution of jobs under the guidance of the job coordinator

The architecture in Real Application Cluster (RAC) environments and how it differs only slightly from a stand-alone database environment

Each instance in the cluster will have its own job coordinator.The job coordinators can communicate with one another to share formation.

. Jobs can be defined with a service affinity (they should run on a specific service) as opposed to an instance affinity (they should run on a pecific instance).

 

 

Common Administration Tools

The Oracle Scheduler is implemented through a PL/SQL package named DBMS_SCHEDULER

Using the ENABLE Procedure

With the exception of schedules, all Scheduler objects have a common attribute named ENABLED

SQL> begin

dbms_scheduler.enable('BACKUP_JOB');

end;

SQL> begin

dbms_scheduler.enable( 'BACKUP_PROGRAM, BACKUP_JOB, STATS_JOB');

end;

SQL> begin

dbms_scheduler.enable('BACKUP_JOB_GROUP, STATS_JOB, SYS.WINDOW_GROUP_1');

end;

/

When a job group is enabled, all members of that job group will be enabled.

When a window group is enabled, only the window group object is enabled. Windows that are members of the group are not enabled.

When a window or window group is referenced in the ENABLE procedure, it must always be prefixed with the SYS schema name as shown in the preceding example (SYS.WINDOW_GROUP_1).

Using the DISABLE Procedure

DBMS_SCHEDULER.DISABLE

This procedure accepts two parameters: NAME and FORCE.

The FORCE parameter is a Boolean (TRUE or FALSE) value that tells the procedure how to handle the request if dependencies exist. The default value is FALSE.

There are two situations that could be classified as dependencies:

A job object that references a program object is considered to be dependent on that object.

If an instance of an object is currently running (for example, a window is open or a job is running), there may be a dependency issue.

SQL>

begin

dbms_scheduler.disable('BACKUP_JOB');

end;

SQL> begin

dbms_scheduler.disable(

'BACKUP_PROGRAM, BACKUP_JOB, STATS_JOB',TRUE);

end;

 

 

SQL> begin

dbms_scheduler.disable(

'BACKUP_JOB_GROUP, STATS_JOB, SYS.WINDOW_GROUP_1');

end;

/

 

 

Setting Attributes

Scheduler objects are collections of attributes. To make a change to an object requires setting its attributes

SQL> begin

dbms_scheduler.set_attribute (

name => 'TEST_JOB',

attribute => 'ENABLED',

value => TRUE);

end;

/

SQL> begin

dbms_scheduler.set_attribute_null (

name => 'TEST_SCHEDULE',

attribute => 'END_DATE');

end;

 

 

Using Scheduler Jobs

A Scheduler job defines a specific program to be executed, the arguments (or parameters) to be passed to the program, and the schedule defining when the program should be executed.

Creating Jobs

a job combines a program and a schedule for execution of that program.

Jobs are created by using the DBMS_SCHEDULER.CREATE_JOB procedure. The CREATE_JOB procedure is an overloaded procedure.

调度器允许用四种不同的方法创建任务。

The following example creates a job that will run once every year to enact cost of living adjustments for all employees:

SQL> begin

dbms_scheduler.create_job (

job_name => 'cola_job',

job_type => 'PLSQL_BLOCK',

job_action => 'update employee set salary = salary*1.05;',

start_date => '10-OCT-2004 06:00:00 AM',

repeat_interval => 'FREQ=YEARLY',

comments => 'Cost of living adjustment');

end;

/

To verify that the job was created, the DBA|ALL|USER_SCHEDULER_JOBS view can be queried,as shown here:

SQL> select job_name, enabled, run_count from user_scheduler_jobs;

 

 

Copying Jobs(默认停用)

SQL> begin

dbms_scheduler.copy_job('COLA_JOB','RAISE_JOB');

end;

/

SQL> select job_name, enabled from user_scheduler_jobs;

 

 

Running Jobs

SQL> begin

dbms_scheduler.run_job('COLA_JOB',TRUE); 第2个参数 同步或异步

end;

/

 

 

Stopping Jobs

SQL> begin

dbms_scheduler.stop_job(job_name => 'COLA_JOB',

force => TRUE);

end;

/

when a job is stopped using the STOP_JOB procedure, only the most recent transaction is rolled back.

 

 

Dropping Jobs

SQL> begin

dbms_scheduler.drop_job(job_name => 'COLA_JOB',

force => TRUE);

end;

 

 

Using Job Classes

Job Class Parameters

JOB_CLASS_NAME

RESOURCE_CONSUMER_GROUP

SERVICE

LOGGING_LEVEL

LOG_HISTORY

Creating Job Classes

SQL> begin

dbms_scheduler.create_job_class(

job_class_name => 'LOW_PRIORITY_CLASS',

resource_consumer_group => 'LOW_GROUP',

logging_level => DBMS_SCHEDULER.LOGGING_FULL,

log_history => 60,

comments => 'LOW PRIORITY JOB CLASS');

end;

/

In this example, a job class named LOW_PRIORITY_CLASS was created that will assign all jobs in the group to the LOW_GROUP consumer group.

Dropping Job Classes

SQL> begin

dbms_scheduler.drop_job_class(

'LOW_PRIORITY_CLASS, HIGH_PRIORITY_CLASS');

end;

/

 

 

Using Scheduler Programs

A program defines the action that will occur when a job runs. It can be a PL/SQL block, a stored procedure, or an operating system executable.

Program Attributes

PROGRAM_NAME

PROGRAM_TYPE

PROGRAM_ACTION

NUMBER_OF_ARGUMENTS

Creating Programs

SQL> begin

dbms_scheduler.create_program(

program_name => 'STATS_PROGRAM',

program_type => 'STORED_PROCEDURE',

program_action => 'DBMS_STATS.GATHER_SCHEMA_STATS',

number_of_arguments => 1,

comments => 'Gather stats for a schema');

end;

/

参数:the name of the schema

The ARGUMENT_NAME parameter is available, but is completely optional.

SQL> begin

dbms_scheduler.define_program_argument(

program_name => 'STATS_PROGRAM',

argument_position => 1,

argument_type => 'VARCHAR2');

end;

/

Arguments can be dropped from programs as well.

SQL> begin

dbms_scheduler.drop_program_argument(

program_name => 'STATS_PROGRAM',

argument_position => 1,

end;

/

or its name:

SQL> begin

dbms_scheduler.drop_program_argument(

program_name => 'STATS_PROGRAM',

argument_name => 'SCHEMA_NAME',

end;

/

 

Dropping Programs

Program objects can be dropped through the use of the DBMS_SCHEDULER.DROP_PROGRAM procedure. This procedure removes the procedure entirely from the database. If existing job definitions include the program that you are attempting to drop, the drop will fail. However, if you

set the FORCE parameter to TRUE, the program will be dropped and the referencing jobs will become disabled.

The following example drops the STATS_PROGRAM program and disables any referencing jobs:

SQL> begin

dbms_scheduler.drop_program (

program_name => 'STATS_PROGRAM',

force => TRUE

end;

/

 

 

Using Schedules

Schedules define not only when a job will start, but also how often the job will be repeated.

Schedule Attributes

SCHEDULE_NAME

START_DATE

END_DATE

REPEAT_INTERVAL

COMMENTS

Creating Schedules

By default, schedules are created with access to the PUBLIC role.

To create a schedule that repeats every night at 8:00 P.M., use the following example:

SQL> begin

dbms_scheduler.create_schedule(

schedule_name => 'NIGHTLY_8_SCHEDULE',

start_date => SYSTIMESTAMP,

repeat_interval => 'FREQ=DAILY; BYHOUR=20',

comments => 'Runs nightly at 8:00 PM');

end;

/

Setting Repeat Intervals

calendaring syntax 日程语法 书404 英文书551页

TABLE 1 2 . 4 Calendaring Syntax Examples

Goal Expression

Every Monday FREQ=WEEKLY; BYDAY=MON;

Every other Monday FREQ=WEEKLY; BYDAY=MON; INTERVAL=2;

Last day of each month FREQ=MONTHLY; BYMONTHDAY=-1;

Every January 7 FREQ=YEARLY; BYMONTH=JAN; BYMONTHDAY=7;

Second Wednesday of each month FREQ=MONTHLY; BYDAY=2WED;

Every hour FREQ=HOURLY;

Every 4 hours FREQ=HOURLY; INTERVAL=4;

Hourly on the first day of each month FREQ=HOURLY; BYMONTHDAY=1;

15th day of every other month FREQ=MONTHLY; BYMONTHDAY=15; INTERVAL=2

Testing Repeat Intervals

DBMS_SCHEDULER.EVALUATE_CALENDAR_STRING

CALENDAR_STRING

START_DATE

RETURN_DATE_AFTER

NEXT_RUN_DATE

 

 

SQL> DECLARE

start_date TIMESTAMP;

return_date_after TIMESTAMP;

next_run_date TIMESTAMP;

BEGIN

start_date := to_timestamp_tz(

'10-OCT-2004 10:00:00','DD-MON-YYYY HH24:MI:SS');

DBMS_SCHEDULER.EVALUATE_CALENDAR_STRING(

'FREQ=MONTHLY; INTERVAL=2; BYMONTHDAY=15',

start_date, null, next_run_date);

DBMS_OUTPUT.PUT_LINE('next_run_date: ' ||

next_run_date);

END;

/

next_run_date: 15-OCT-04 10.00.00.000000 AM

 

 

The procedure returns only a single value for NEXT_RUN_DATE, but you may want to see more

than one. If so, you can use the SQL shown here:

SQL> DECLARE

start_date TIMESTAMP;

return_date_after TIMESTAMP;

next_run_date TIMESTAMP;

BEGIN

start_date := to_timestamp_tz('10-OCT-2004 10:00:00','DD-MON-YYYY HH24:MI:SS');

return_date_after := start_date;

FOR i IN 1..10 LOOP

DBMS_SCHEDULER.EVALUATE_CALENDAR_STRING('FREQ=MONTHLY; INTERVAL=2; BYMONTHDAY=15',start_date, return_date_after, next_run_date);

DBMS_OUTPUT.PUT_LINE('next_run_date: ' || next_run_date);

return_date_after := next_run_date;

END LOOP;

END;

 

 

 

Using Scheduler Windows

Unlike most of the other Scheduler objects that you've seen so far, windows are created in the SYS schema.

Creating Windows

The parameters for the CREATE_WINDOW procedure are described here:

WINDOW_NAME

RESOURCE_PLAN

START_DATE

DURATION

SCHEDULE_NAME

REPEAT_INTERVAL

END_DATE

WINDOW_PRIORITY

COMMENTS

To create a window that activates the DAY_PLAN resource plan and uses a schedule named WORK_HOURS_SCHEDULE, see the following example:

SQL> begin

dbms_scheduler.create_window (

window_name => 'WORK_HOURS_WINDOW',

resource_plan => 'DAY_PLAN',

schedule_name => 'WORK_HOURS_SCHEDULE',

duration => INTERVAL '10' HOUR,

window_priority => 'HIGH');

end;

/

PL/SQL procedure successfully completed.

 

 

Opening and Closing Windows

There are two distinct ways that a window can be opened. The first is based on the window's schedule. The second is they can be opened manually by using the DBMS_SCHEDULER.OPEN_WINDOW procedure.

When opening a window manually, you can specify a new duration for the window to remain open; otherwise it will remain open for the duration defined when the window was created.

The OPEN_WINDOW procedure opens a window independent of its schedule. The associated resource plan is enabled immediately, and currently executing jobs are subjected to the change in resource plan

SQL> begin

dbms_scheduler.open_window (

window_name => 'WORK_HOURS_WINDOW',

duration => INTERVAL '20' MINUTE,

force => TRUE);

end;

/

This example forces the WORK_HOURS_WINDOW to be opened and any current window to close.

The new window will remain open for a duration of 20 minutes

 

 

SQL> begin

dbms_scheduler.close_window (

window_name => 'WORK_HOURS_WINDOW');

end;

/

 

 

Window Logging

For example, use the following query to view window log entries:

SQL> select log_id, trunc(log_date) log_date,window_name, operation

from dba_scheduler_window_log;

For each CLOSE operation logged in the DBA_SCHEDULER_WINDOW_LOG view, there will be an associated record in the DBA_SCHEDULER_WINDOW_DETAILS view, as shown here:

SQL> select log_id, trunc(log_date) log_date,window_name, actual_duration

from dba_scheduler_window_details;

 

 

Purging Logs

Scheduler job and window logs will be automatically purged based on the setting of the LOG_HISTORY attribute of the Scheduler itself.

SQL> begin

DBMS_SCHEDULER.SET_SCHEDULER_ATTRIBUTE( 'LOG_HISTORY','60');

end;

/

By default, this procedure sets the history retention period for both Scheduler window logs and Scheduler job logs. To set only one, the WHICH_LOG parameter may be included to specify either WINDOW_LOG or JOB_LOG.

 

 

Using Scheduler Views

To see information on completed instances of a job, use the example shown here:

SQL> select job_name, status, error# from dba_scheduler_job_run_details

where job_name = 'FAIL_JOB';

To see the current state of all jobs, use the following example:

SQL> select job_name, state from dba_scheduler_jobs;

 

 

Scheduler Views Available p412页

TABLE 1 2 . 6 Scheduler Views Available

View Description

*_SCHEDULER_SCHEDULES Shows information on all defined schedules.

*_SCHEDULER_PROGRAMS Shows information on all defined programs.

*_SCHEDULER_PROGRAM_ARGUMENTS Shows all registered program arguments, and the

default values if they exist.

*_SCHEDULER_JOBS Shows all defined jobs, both enabled and disabled.

*_SCHEDULER_GLOBAL_ATTRIBUTE Shows the current values of all Scheduler attributes.

*_SCHEDULER_JOB_ARGUMENTS Shows the arguments for all defined jobs.

*_SCHEDULER_JOB_CLASSES Shows information on all defined job classes.

*_SCHEDULER_WINDOWS Shows information about all defined windows.

*_SCHEDULER_JOB_RUN_DETAILS Shows information about all completed (failed or

successful) job runs.

*_SCHEDULER_WINDOW_GROUPS Shows information about all window groups.

*_SCHEDULER_WINGROUP_MEMBERS Shows the members of all window groups.

*_SCHEDULER_RUNNING_JOBS Shows the state information on all jobs that are

currently being run.

 

 

To view windows and their next start dates, the following SQL can be used:

SQL> select window_name, next_start_date from dba_scheduler_windows;

 

 

The DBA_SCHEDULER_JOB_LOG view can be used to view log entries for previously executed

jobs, as shown here:

SQL> select log_id, trunc(log_date) log_date, owner, job_name, operation

from dba_scheduler_job_log;

 

 

……

You also learned that, in a RAC environment, each instance has its own job coordinator, and

the job coordinators have the ability to communicate with each other to keep information current.

You learned that a RAC environment will still have only one job table that is shared by all

the instances. You also learned that jobs can be assigned to a service, as opposed to an instance,

ensuring that the job can be run by a different node if an instance is down.

....

13 Monitoring and Managing Storage

Monitoring Tablespace Storage

Oracle 10g manages the disk space in two ways: reactively and proactively.

In a truly proactive manner, Oracle 10g collects statistics on space usage in the Automatic Workload Repository (AWR) at 30-minute intervals to assist you with tablespace and segment

growth trend analysis and capacity planning.

Space Usage Monitoring

The background process MMON checks for tablespace space problems every 10 minutes; alerts are triggered both when a threshold is exceeded and once again when the space usage for

a tablespace falls back below the threshold.

Dictionary-managed tablespaces do not support server-generated alerts

Editing Thresholds with Enterprise Manager Database Control

如果超过空间阀值,MMON进程将会以下列三方式之一通知DBA危急的表空间问题。

via the EM Database Control Home tab, via an e-mail message sent to the e-mail address configured when the database was created, or using the script in the Response

Action column, if one was specified,

Using DBMS_SERVER_ALERT

SET_THRESHOLD

GET_THRESHOLD

EXPAND_MESSAGE

SQL> begin

dbms_server_alert.set_threshold(

dbms_server_alert.tablespace_pct_full,

dbms_server_alert.operator_ge, 90,

dbms_server_alert.operator_ge, 99,

1, 1, null,

dbms_server_alert.object_type_tablespace,'USERS');

end;

 

 

 

以下出错,已发帖子,why?要看看开发知识。

variable warn_oper number

variable warn_value varchar2

variable crit_oper number

variable crit_value varchar2

variable obs_per number

variable cons_oc number

 

 

begin

dbms_server_alert.get_threshold(

dbms_server_alert.TABLESPACE_PCT_FULL,

:warn_oper, :warn_value, :crit_oper, :crit_value,:obs_per, :cons_oc, null,

dbms_server_alert.object_type_tablespace,'USERS');

end;

 

 

print warn_oper

print warn_value

print crit_oper

print crit_value

print obs_per

print cons_oc

 

 

 

Using Segment Management Tools

Segment Shrink

An Overview of Segment Shrink

Segment shrink compresses the data blocks in a table or index and optionally moves the HWM down, making the unused space available for other segments in the tablespace.

Before Oracle 10g, the HWM could be moved down only if the segment was moved or truncated. While online table redefinition or Create Table As Select (CTAS) operations can provide

similar results to segment shrink, those methods must temporarily provide double the amount of space occupied by the table.

Segment Shrink Restrictions and Considerations

During a segment shrink operation, the ROWID may change for a row when it moves between blocks. Therefore, segments that rely on ROWIDs being constant, such as an application that maintains ROWIDs as pointers in another table, cannot be shrunk. In any case, ROW MOVEMENT must be enabled for table segments that are candidates for shrink operations.

Performing Segment Shrink

SQL Commands and Segment Shrink

SQL> alter table hr.employees enable row movement;

SQL> alter table hr.employees shrink space;

将操作分成两个命令可能好些

SQL> alter table hr.employees shrink space compact;

……using the COMPACT clause to compress the rows without moving the HWM,

At a later time, when the database is not as busy, you can complete the rest of the operation by omitting the COMPACT clause.

SQL> alter table hr.employees shrink space;

When CASCADE is specified, all dependent objects, such as indexes, are also shrunk.

SQL> alter table hr.employees shrink space cascade;

 

 

EM Database Control and Segment Shrink

Growth Trend Report

Segment Resource Estimation

 

 

Segment Advisor within PL/SQL

 

 

Index Space Monitoring

Monitoring Index Space Usage

sql>connect hr/cxxx@orcl

SQL> analyze index emp_name_ix validate structure;

SQL> select pct_used from index_stats where name = 'EMP_NAME_IX';

Over time, if the PCT_USED value starts to decline, you can either rebuild the index, or drop and re-create the index.

Rebuilding versus Coalescing Indexes

SQL> alter index emp_name_ix coalesce;

Rebuilding versus Coalescing an Index

Rebuilding an Index Coalescing an Index

Can move index to another tablespace Cannot move index to another tablespace

Requires double the amount of disk space if Does not require additional disk space

performed online

Creates a new tree and adjusts tree height if Coalesces index leaf blocks within each

necessary branch

If you decide to rebuild the index, you can do it online, as in this example:

SQL> alter index emp_name_ix rebuild online;

The index is available nearly 100 percent of the time that the rebuild operation is in progress, other than a very short amount of time at the end of the rebuild when

the old index is swapped with the new copy of the index.

Identifying Unused Indexes

SQL> alter index hr.emp_name_ix monitoring usage;

Next, check V$OBJECT_USAGE to make sure the index is being monitored:

SQL> select index_name, table_name, monitoring,used, start_monitoring from v$object_usage where index_name = 'EMP_NAME_IX';

INDEX_NAME TABLE_NAME MON USE START_MONITORING

------------- ---------------- --- --- -------------------

EMP_NAME_IX EMPLOYEES YES NO 06/02/2004 08:57:44

SQL> select employee_id from employees where last_name = 'King';

INDEX_NAME TABLE_NAME MON USE END_MONITORING

------------ ----------------- --- --- -------------------

EMP_NAME_IX EMPLOYEES NO YES 06/02/2004 17:00:40

Understanding Special Table Types

Index-Organized Tables

An Overview of Index-Organized Tables

You can store index and table data together in an IOT. IOTs are suitable for tables in which the data access is mostly through its primary key, such as lookup tables.

An IOT is a b-tree index,much like a traditional stand-alone index. However, instead of storing the ROWID of the table where the row belongs, the entire row is stored as part of the index.

Creating Index-Organized Tables

create table sales_summary_by_date_division

(sales_date date,

division_id number,

total_sales number(20,2),

constraint ssum_dt_div_pk primary key

(sales_date, division_id))

organization index

tablespace users;

IOT Row Overflow

To further improve the performance benefits provided by an IOT, you can create an IOT overflow area. If an IOT row’s data exceeds the threshold of available space in a block, the row’s

data will be dynamically and automatically moved to the overflow area.

create table sales_summary_by_date_division

(sales_date date,

division_id number,

total_sales number(20,2),

constraint ssum_dt_div_pk primary key

(sales_date, division_id))

organization index

tablespace users

pctthreshold 25

overflow tablespace users;

 

 

IOT Mapping Tables

sybex书中概念严重有问题,以下来自concepts

A mapping table is required for creating bitmap indexes on an index-organized table. In both heap-organized and index-organized base tables, a bitmap index is accessed

using a search key. If the key is found, the bitmap entry is converted to a physical rowid. In the case of heap-organized tables, this physical rowid is then used to access

the base table. However, in the case of index-organized tables, the physical rowid is then used to access the mapping table. The access to the mapping table yields a logical

rowid. This logical rowid is used to access the index-organized table.

以下代码创建了IOT表,有映射

create table sales_summary_by_date_division

(sales_date date,

division_id number,

total_sales number(20,2),

constraint ssum_dt_div_pk primary key

(sales_date, division_id))

organization index

tablespace users

pctthreshold 25

overflow tablespace users

mapping table;

 

 

Data Dictionary Views for IOTs

DBA_INDEXES (iot表既是表也是索引)

SQL> select index_name, index_type, tablespace_name from dba_indexes

where table_name = 'SALES_SUMMARY_BY_DATE_DIVISION';

DBA_TABLES

提供iot自身的信息,映射表和相关的溢出段。

SQL> select table_name, iot_name, iot_type, tablespace_name

from dba_tables

where table_name = 'SALES_SUMMARY_BY_DATE_DIVISION'

or iot_name = 'SALES_SUMMARY_BY_DATE_DIVISION';

DBA_SEGMENTS

看看iot相关段的信息可以先从DBA_TABLES中得知段名

SQL> select segment_name, segment_type, tablespace_name

from dba_segments

where segment_name LIKE '%_IOT_%' or

segment_name = 'SSUM_DT_DIV_PK';

.....and owner='HR' 增加约束

Clustered Tables

A cluster consists of a group of two or more tables that share the same data blocks.

Creating a clustered table requires three steps:

1. Create the cluster definition.

2. Create the index on the cluster. (This step is skipped for hash clusters.)

3. Create tables within the cluster.

Cluster Types

Clusters can be divided into two broad categories: index clusters and hash clusters.

Index clusters use a traditional b-tree index to find rows in the cluster, and hash clusters use a hashing function to determine the physical location where a given row is stored.

Index Clusters

Consider an index cluster in these situations:

The tables in the cluster are always queried together and only infrequently on their own.

The tables have little or no insert, update, or delete activity performed on them after the initial

load of the cluster.

The child tables have roughly equal numbers of rows for each parent key in the parent

table.

The following example shows the SQL commands necessary to create a cluster called ORD_ITEM, an index on the cluster called ORD_ITEM_IDX, and tables ORD and ITEM in the cluster:

SQL> create cluster ord_item

(ord_number number) size 500

tablespace app_data;

The parameter SIZE specifies how many cluster keys you expect to have per Oracle block

 

 

SQL> create index ord_item_idx

on cluster ord_item

tablespace app_idx;

 

 

SQL> create table ord

(ord_number number,

cust_last_name varchar2(40),

cust_first_name varchar2(30),

ord_date date,

ord_total number(15,2))

cluster ord_item (ord_number);

 

 

SQL> create table item

(item_id number,

ord_number number,

catalog_number number,

item_price number(7,2))

cluster ord_item (ord_number);

 

Hash Clusters

Hash clusters work best for queries with equivalence operators, as in this example:

select cust_last_name from ord where ord_number = 681107;

 

 

Here are the attributes of a table that make it suitable for use in a hash cluster:

The tables in the cluster have a relatively uniform distribution of values in the indexed column.

The tables have little or no insert, update, or delete activity performed on them after the initial

load of the cluster.

The tables in the cluster have a predictable number of values in the indexed column.

The queries against the clustered table almost exclusively use an equality operator to

retrieve the desired row.

create cluster ord_item2

(ord_number number(6,0)) size 500

hash is ord_number hashkeys 100000

tablespace users;

Sorted Hash Clusters

In heap-organized tables and traditional hash clusters, the order in which rows are returned is not under user control and depends on internal algorithms and the relative

physical location of data blocks on disk. For each hash cluster key, Oracle maintains a list of rows sorted by one or more sort columns.

创建

The first step is to create a single table sorted hash cluster, as follows:

create cluster order_cluster

(customer_number number,

order_timestamp timestamp sort)

hashkeys 1000

single table hash is customer_number

size 500;

The next step is to create the order table itself:

create table orders

(cust_number number,

order_date timestamp,

order_number number,

spec_instr varchar2(1000))

cluster order_cluster(cust_number, order_date);

 

 

Next, add a few orders with the following INSERT statements.

insert into orders values(3045,timestamp'2004-05-05 15:04:14',405584,'Reorder from last month');

insert into orders values(1958,timestamp'2004-05-05 15:05:01',348857,'New customer');

insert into orders values(3045,timestamp'2004-05-04 9:26:59',938477,'GGT Promotion');

insert into orders values(3045,timestamp'2004-05-07 12:33:23',703749,'');

insert into orders values(3045,timestamp'2004-05-02 19:47:09',389233,'Needs order in time for Mothers Day');

 

 

SQL> select cust_number,

to_char(order_date,'yyyy-mm-dd hh:mi pm')

order_date,

order_number, spec_instr

from orders where cust_number = 3045;

 

 

Execution Plan

---------------------------------------------------------

0 SELECT STATEMENT Optimizer=ALL_ROWS

(Cost=0 Card=4 Bytes=2164)

1 0 TABLE ACCESS (HASH) OF 'ORDERS'

(CLUSTER (HASH))

 

 

以下如果用>= 将需要order by 字句。

SQL> select cust_number,

to_char(order_date,'yyyy-mm-dd hh:mi pm')

order_date,

order_number, spec_instr

from orders where cust_number >= 3045;

 

 

其他空间管理工具略。

Leveraging Resumable Space Allocation

Using Resumable Space Allocation

ALTER SESSION ENABLE RESUMABLE [TIMEOUT timeout] [NAME name];

the user must be granted the RESUMABLE system privilege

SQL> alter session enable resumable timeout 600 name 'Short Timeout';

SQL> alter session disable resumable;

 

 

DBMS_RESUMABLE Package

The procedures within DBMS_RESUMABLE are as follows:

ABORT .

GET_SESSION_TIMEOUT

GET_TIMEOUT

SET_SESSION_TIMEOUT

SET_TIMEOUT

SPACE_ERROR_INFO

SQL> select dbms_resumable.get_timeout() from dual;

SQL> exec dbms_resumable.set_timeout(1200);

SQL> select dbms_resumable.get_timeout() from dual;

 

 

Using the AFTER SUSPEND System Event

A system event called AFTER SUSPEND, first introduced in Oracle 9i, is triggered at the database or schema level when a correctable Resumable Space Allocation error occurs.

 

 

CREATE OR REPLACE TRIGGER resumable_default_timeout

AFTER SUSPEND ON DATABASE

BEGIN

/* set timeout to 8 hours */

DBMS_RESUMABLE.SET_TIMEOUT(28800);

/* prepare e-mail to DBA on call */

. . .

UTL_MAIL.SEND (. . .);

END;

 

 

Resumable Space Allocation Data Dictionary Views

The data dictionary views DBA_RESUMABLE and USER_RESUMABLE display the set of Resumable Space Allocation statements in the system.

SQL> select user_id, session_id, name, status,

timeout, sql_text

from dba_resumable;

 

 

 

14 Securing the Oracle Listener, Diagnostic Sources, and Memory

Securing the Oracle Listener

An Overview of the TNS Listener

The listener is not limited to database connections, however. It can also be used to access executable programs on the database server.

Managing the Listener Remotely(安全隐患,需受到合适的保护)

Remote management can be accomplished by simply following these steps:

1.Install Oracle software (either client or server) on a remote machine. The machine needs to have Oracle Net Services connectivity, as well as the

lsnrctl executable.

2.On the remote machine, configure the listener.ora file so that it can resolve to the address of the database server.

REMOTE_LISTENER =

ADDRESS_LIST =

(ADDRESS =

(PROTOCOL = TCP)

(HOST =192.168.1.200)

(PORT = 1521)

)

)

3.Start the lsnrctl program and specify the alias defined in step 2, as shown here:

lsnrctl remote_listener

 

 

Setting the Listener Password

Setting the password for the listener can be accomplished using several different methods.

The first method is to manually edit the listener.ora file and add the following line:

PASSWORDS_LISTENER = shazam

lsnrctl>reload

second method of setting the listener password is to use the CHANGE_PASSWORD command from the lsnrctl prompt:

LSNRCTL>change_password

LSNRCTL> set password

LSNRCTL> save_config

上面的方法无论输入什么密码都可以管理,估计是操作系统验证惹得祸

The third method of setting the listener password is to use one of Oracle’s graphical tools such as Net Manager (netmgr),Network Creation Assistant (netca), or the Oracle Enterprise

Manager (EM) Database Control application.

Controlling Database Access

DMZ:?

by implementing valid node checking, only requests coming from the application servers would be accepted, and all others would be denied.

netmgr GUI下可更改,书中是更改sqlnet.ora文件,果然外部机器登陆不上。

 

 

Using Listener Logging

netmgr可启用 ,或者用下面的方法

LSNRCTL> set log_directory /oralogs

LSNRCTL> set log_file listener_lnx1.log

LSNRCTL> set log_status on

Enabling Listener Logging Using EM Database Control

 

 

Removing Unneeded External Procedure Services

The listener can do more than just listen for database requests. It can also be used to run binary executable programs on the database server and to return the output back to the caller. This functionality is referred to as external procedure support.

By default, Oracle creates a service for external procedures in the listener. For the majority of users, this service is never used. Therefore, the service should be removed from the listener.

Manually Removing External Procedure Services

listener.ora Network Configuration File:

/apps/oracle/oracle10gR1/network/admin/listener.ora

# Generated by Oracle configuration tools.

SID_LIST_LISTENER =

(SID_LIST =

(SID_DESC =

(SID_NAME = PLSExtProc)

(ORACLE_HOME = /apps/oracle/oracle10gR1)

(PROGRAM = extproc)

)

(SID_DESC =

(GLOBAL_DBNAME = lnx1)

(ORACLE_HOME = /apps/oracle/oracle10g)

(SID_NAME = lnx1)

)

)

LISTENER =

(DESCRIPTION_LIST =

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = ICP)(KEY = EXTPROC))

)

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST =lnx1)

(PORT = 1521))

)

)

)

改变之后

SID_LIST_LISTENER =

(SID_LIST =

(SID_DESC =

(GLOBAL_DBNAME = lnx1)

(ORACLE_HOME = /apps/oracle/oracle10g)

(SID_NAME = lnx1)

)

)

LISTENER =

(DESCRIPTION_LIST =

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST =lnx1)

(PORT = 1521))

)

)

)

 

 

Removing External Procedure Services Using EM Database Control

 

 

Creating a Separate Listener for External Procedures

可以单独设置一个严格处理外部过程请求的监听器。这个监听器由一个具有非常局限的操作系统权限的用户来执行或限制从哪个库执行过程。

Executing the Listener with a Restricted Account

执行该新监听器的帐号具有读LISTENER.ORA的权限。其他权限不需要了。

Limiting the Available Libraries

By default, the extproc agent can execute procedures from any DLL or shared object library stored in the following locations:

$ORACLE_HOME/lib directory in Unix

%ORACLE_HOME%\bin directory in Windows

但是可以限制监听器只访问LISTENER.ORA文件中明显指定的库。

1,编辑文件创建新的listener.ora略

2,用oem创建 更直观。测试之

 

 

Using the ADMIN_RESTRICTIONS Parameter

禁止图形下执行set,故只有人工编辑,fuck。不熟悉

ADMIN_RESTRICTIONS = on

 

 

Securing the Listener Directory

listenr.ora,sqlnet.ora 文件的目录只有管理级帐户可以读写。

 

 

Applying Oracle Listener Patches

 

 

Blocking SQL*NET Traffic on Firewalls

 

 

Diagnostic Sources

The alert log is an excellent source of diagnostic data and is generally considered the first place to check when an error occurs.

看alert文件 ,oem看,或者利用外部表特性查询。

Using Server-Generated Alerts

Using Oracle Trace Files

Background processes use this format: sid_process_name_process_id.trc

User processes use this format: sid_ora_process_id.trc

The TRACEFILE_IDENTIFIER parameter allows you specify a text string that will be appended to the names of user session trace files.

ALTER SESSION SET SQLTRACE = TRUE

ALTER SESSION SET TIMED_STATISTICS = TRUE

ALTER SESSION SET TRACEFILE_IDENTIFIER = ‘TIM’

 

 

Automatic Memory Management

Oracle Memory Usage

Within each of these structures, Oracle divides available memory into smaller structures known as pools, each designated to satisfy a particular class of memory allocation request.

 

 

An Overview of the SGA

Database Buffer Cache

Memory in the database buffer cache is tracked by two internal lists: the write list and the least recently used (LRU) list.

The LRU list is a FIFO

The exception to this rule is when a full table scan operation is performed. Blocks retrieved from a full table scan are added to the least recently used end of the LRU list, so they will be aged out quickly.

you can add the CACHE clause to the table (either via ALTER TABLE or in the CREATE TABLE statements) to circumvent this behavior. You can also choose to pin the table in memory.

Shared Pool

The shared pool contains the library cache and the data dictionary cache, as well as buffers for parallel execution messages and other control structures.

Library Cache

When a SQL statement is parsed, the resultant parse tree and execution plan are stored (along with the statement itself) in a shared SQL area.

Data Dictionary Cache

Redo Log Buffer

Java Pool

Large Pool

 

 

Streams Pool

Fixed SGA

 

 

An Overview of the PGA

A Program Global Area (PGA) stores data and control information for a single server process. Therefore, every session and background process has an associated PGA.

 

 

An Overview of Automatic Memory Management

ASMM divides the SGA memory pools into two groups: automatically sized components and manually sized components.

从参数中的非零值表示最小内存分配,

人工设置大小的组成部分:

These components are

Streams pool

Keep buffer cache

Recycle buffer cache

Other caches

These parameters include

DB_KEEP_CACHE_SIZE

DB_RECYCLE_CACHE_SIZE

DB_nK_CACHE_SIZE (where n = 2, 4, 8, 16, or 32)

STREAMS_POOL_SIZE

 

 

Using APMM

APMM functionality is implemented through the use of the PGA_AGGREGATE_TARGET initialization parameter.

Historically, PGA memory allocation has been done through the use of the following initialization parameters:

SORT_AREA_SIZE

HASH_AREA_SIZE

BITMAP_MERGE_AREA_SIZE

CREATE_BITMAP_AREA_SIZE

以上参数与WORKAREA_SIZE_POLICY 结合使用。

如果WORKAREA_SIZE_POLICY 为AUTO,忽略以上内存参数,

如果WORKAREA_SIZE_POLICY 为MANUAL ,使用以上内存参数。

Implementing APMM

PGA_AGGREGATE_TARGET=2G

SQL> alter system set PGA_AGGREGATE_TARGET = 2G;

Implementing APMM Through EM Database Control

 

 

 

 

 

 

 

 

 

 

 

 

%d

Specifies the name of the database.

 

%f

Specifies the absolute file number.

 

 

%h

Specifies the archived redo log thread number.

 

%I

Specifies the DBID.

 

%M

Specifies the month in the Gregorian calendar in format MM.

 

%N

Specifies the tablespace name.

 

%n

Specifies the name of the database, padded on the right with x characters to a total length of eight characters. For example, if the prod1 is the database name, then the padded name is prod1xxx.

 

%p

Specifies the piece number within the backup set. This value starts at 1 for each backup set and is incremented by 1 as each backup piece is created.

 

 

Note: If you specify PROXY, then the %p variable must be included in the FORMAT string either explicitly or implicitly within %U.

 

%s

Specifies the backup set number. This number is a counter in the control file that is incremented for each backup set. The counter value starts at 1 and is unique for the lifetime of the control file. If you restore a backup control file, then duplicate values can result. Also, CREATE CONTROLFILE initializes the counter back to 1.

 

%t

Specifies the backup set time stamp, which is a 4-byte value derived as the number of seconds elapsed since a fixed reference time. The combination of %s and %t can be used to form a unique name for the backup set.

 

%T

Specifies the year, month, and day in the Gregorian calendar in this format: YYYYMMDD.

 

%u

Specifies an 8-character name constituted by compressed representations of the backup set or image copy number and the time the backup set or image copy was created.

%r resetlogs ID that ensures unique names are constructed for the archived log files across multiple incarnations of the database

 

 

 

 

 

 

 

 

10g RMAN FORMAT 选项的格式规范

%d 规定数据库的名字

%D 规定格里高里日历表示的当前月日

%F 组合数据库标识符(DBID)、日、月、年和序列号为一个独特的、可重复生成的名字

%n 规定数据库名,右端用n个字符填补,总长度8个字符

%p 规定备份集的块号

%s 备份集号

%t 备份集时间戳

%T 规定格里高里日历表示的年、月、日

%u 规定8个字符的名字,该名字使通过备份集的压缩表示或图象副本号而生成

%U 规定系统生成的唯一文件名(默认)

 

疑问:

select recid,name,thread#,sequence# from v$archived_log

 

你可能感兴趣的:(【oracle】配置恢复管理器Configuring Recovery Manager)