###### 分析日志文件 logmnr ##############
1) 在 init.ora 中 set utl_file_dir 参数
2) 重新启动 oracle
3) create 目录文件
desc dbms_logmnr_d;
dbms_logmnr_d.build;
4) 加入日志文件 add/remove log file
dhms_logmnr.add_logfile
dbms_logmnr.removefile
5) start logmnr
dbms_logmnr.start_logmnr
6) 分析出来的内容查询 v$logmnr_content --sqlredo/sqlundo
实践:
desc dbms_logmnr_d;
/* 对数据表做一些操作,为恢复操作做准备 */
update 表 set qty=10 where stor_id=6380;
delete 表 where stor_id=7066;
/***********************************/
utl_file_dir 的路径
execute dbms_logmnr_d.build('foxdict.ora','$ORACLE_HOME/oracle/admin/fox/cdump');
execute dbms_logmnr.add_logfile('$ORACLE_HOME/oracle/ora_log_file6.log',dbms_logmnr.newfile);
execute dbms_logmnr.start_logmnr(dictfilename=>'$ORACLE_HOME/oracle/admin/fox/cdump/foxdict.ora');
######### tablespace ##############
select * form v$tablespace;
select * from v$datafile;
/* 表空间和数据文件的对应关系 */
select t1.name,t2.name from v$tablespace t1,v$datafile t2 where t1.ts#=t2.ts#;
alter tablespace users add datafile 'path' size 10M;
select * from dba_rollback_segs;
/* 限制用户在某表空间的使用限额 */
alter user user_name quota 10m on tablespace_name;
create tablespace xxx [datafile 'path_name/datafile_name'] [size xxx] [extent management local/dictionary] [default storage(xxx)];
exmple: create tablespace userdata datafile '$ORACLE_HOME/oradata/userdata01.dbf' size 100M AUTOEXTEND ON NEXT 5M MAXSIZE 200M;
create tablespace userdata datafile '$ORACLE_HOME/oradata/userdata01.dbf' size 100M extent management dictionary default storage(initial 100k next 100k pctincrease 10) offline;
/*9i 以后, oracle 建议使用 local 管理,而不使用 dictionary 管理,因为 local 采用 bitmap 管理表空间 ,不会产生系统表空间的自愿争用 ;*/
create tablespace userdata datafile '$ORACLE_HOME/oradata/userdata01.dbf' size 100M extent management local uniform size 1m;
create tablespace userdata datafile '$ORACLE_HOME/oradata/userdata01.dbf' size 100M extent management local autoallocate;
/* 在创建表空间时,设置表空间内的段空间管理模式,这里用的是自动管理 */
create tablespace userdata datafile '$ORACLE_HOME/oradata/userdata01.dbf' size 100M extent management local uniform size 1m segment space management auto;
alter tablespace userdata mininum extent 10;
alter tablespace userdata default storage(initial 1m next 1m pctincrease 20);
/*undo tablespace( 不能被用在字典管理模下 ) */
create undo tablespace undo1 datafile '$ORACLE_HOME/oradata/undo101.dbf' size 40M extent management local;
show parameter undo;
/*temporary tablespace*/
create temporary tablespace userdata tempfile '$ORACLE_HOME/oradata/undo101.dbf' size 10m extent management local;
/* 设置数据库缺省的临时表空间 */
alter database default temporary tablespace tablespace_name;
/* 系统 / 临时 / 在线的 undo 表空间不能被 offline*/
alter tablespace tablespace_name offline/online;
alter tablespace tablespace_name read only;
/* 重命名用户表空间 */
alter tablespace tablespace_name rename datafile '$ORACLE_HOME/oradata/undo101.dbf' to '$ORACLE_HOME/oradata/undo102.dbf';
/* 重命名系统表空间 , 但在重命名前必须将数据库 shutdown, 并重启到 mount 状态 */
alter database rename file '$ORACLE_HOME/oradata/system01.dbf' to '$ORACLE_HOME/oradata/system02.dbf';
drop tablespace userdata including contents and datafiles;---drop tablespce
/*resize tablespace,autoextend datafile space*/
alter database datafile '$ORACLE_HOME/oradata/undo102.dbf' autoextend on next 10m maxsize 500M;
/*resize datafile*/
alter database datafile '$ORACLE_HOME/oradata/undo102.dbf' resize 50m;
/* 给表空间扩展空间 */
alter tablespace userdata add datafile '$ORACLE_HOME/oradata/undo102.dbf' size 10m;
/* 将表空间设置成 OMF 状态 */
alter system set db_create_file_dest='$ORACLE_HOME/oradata';
create tablespace userdata;---use OMF status to create tablespace;
drop tablespace userdata;---user OMF status to drop tablespace;
select * from dba_tablespace/v$tablespace/dba_data_files;
/* 将表的某分区移动到另一个表空间 */
alter table table_name move partition partition_name tablespace tablespace_name;
###### ORACLE storage structure and relationships #########
/* 手工分配表空间段的分区 (extend) 大小 */
alter table kong.test12 allocate extent(size 1m datafile '$ORACLE_HOME/oradata/undo102.dbf');
alter table kong.test12 deallocate unused; --- 释放表中没有用到的分区
show parameter db;
alter system set db_8k_cache_size=10m; --- 配置 8k 块的内存空间块参数
select * from dba_extents/dba_segments/data_tablespace;
select * from dba_free_space/dba_data_file/data_tablespace;
/* 数据对象所占用的字节数 */
select sum(bytes) from dba_extents where onwer='kong' and segment_name ='table_name';
############ UNDO Data ################
show parameter undo;
alter tablespace users offline normal;
alter tablespace users offline immediate;
recover datafile '$ORACLE_HOME/oradata/undo102.dbf';
alter tablespace users online ;
select * from dba_rollback_segs;
alter system set undo_tablespace=undotbs1;
/* 忽略回滚段的错误提示 */
alter system set undo_suppress_errors=true;
/* 在自动管理模式下 , 不会真正建立 rbs1; 在手工管理模式则可以建立 , 且是私有回滚段 */
create rollback segment rbs1 tablespace undotbs;
desc dbms_flashback;
/* 在提交了修改的数据后 ,9i 提供了旧数据的回闪操作 , 将修改前的数据只读给用户看 , 但这部分数据不会又恢复在表中 , 而是旧数据的一个映射 */
execute dbms_flashback.enable_at_time('26-JAN- 04:12:17:00 pm ');
execute dbms_flashback.disable;
/* 回滚段的统计信息 */
select end_time,begin_time,undoblks from v$undostat;
/*undo 表空间的大小计算公式 : UndoSpace=[ UR * (UPS * DBS)] + (DBS * 24)
UR :UNDO_RETENTION 保留的时间 ( 秒 )
UPS : 每秒的回滚数据块
DBS: 系统 EXTENT 和 FILE SIZE( 也就是 db_block_size)*/
select * from dba_rollback_segs/v$rollname/v$rollstat/v$undostat/v$session/v$transaction;
show parameter transactions;
show parameter rollback;
/* 在手工管理模式下 , 建立公共的回滚段 */
create public rollback segment prbs1 tablespace undotbs;
alter rollback segment rbs1 online;---- 在手工管理模式
/* 在手工管理模式中 ,initSID.ora 中指定 undo_management=manual 、 rollback_segment=('rbs1','rbs2',...) 、
transactions=100 、 transactions_per_rollback_segment=10
然后 shutdown immediate ,startup pfile=..../???.ora */