qq78707 发表于 2018-9-9 12:52:04

ORACLE 管理 日志与空间

  日志文件的管理
  联机日志文件的工作状态:
  select * from v$log;
  联机日志文件的物理存储信息
  select * from v$logfile;
  手工切换日志:
  alter system switch logfile;
  日志切换频率:
  select to_char(first_time,'yyyy-mm-dd hh24') first_time,count(*)
  from v$log_history
  group by to_char(first_time,'yyyy-mm-dd hh24');
  增加日志组(可以加快日志切换效率):为什么?
  alter database add logfile group 3

  '/u01/app/oracle/oradata/demo/redo03.log'>  增加成员(提高联机日志的安全性):
  alter database add logfile member
  '/u01/app/oracle/oradata/demo/redo01a.log' to group 1,
  '/u01/app/oracle/oradata/demo/redo02a.log' to group 2,
  '/u01/app/oracle/oradata/demo/redo03a.log' to group 3;
  清空日志组(可以解决INACTIVE组的成员丢失):
  alter database clear logfile group 2;
  ACTIVE组成员丢失的解决:
  要将ACTIVE状态转变为INACTIVE状态!!要使数据写盘!!
  alter system checkpoint; --触发完全检查点
  CURRENT组成员丢失的解决:
  使用基于cancel的不完全恢复(目的是为了使用resetlogs选项):
  recover database using backup controlfile until cancel;
  cancel
  Media recovery cancelled.
  alter database open resetlogs;
  日志文件的移动和改名:
  1.正常停库
  shutdown immediate
  2.启动到mount
  startup mount
  3.使用主机命令移动文件
  ! mv /u01/app/oracle/oradata/demo/redo01a.log /home/oracle/redo01a.log
  4.修改控制文件的指针
  alter database rename file '/u01/app/oracle/oradata/demo/redo01a.log' to '/home/oracle/redo01a.log';
  5.打开数据库
  alter database open;
  删除日志成员:
  alter database drop logfile member '';
  当前组的成员不能删除
  每组中的最后一个成员不能删除
  删除组:
  alter database drop logfile group 4;
  当前组不能删除
  活动组不能删除
  只剩两组,任何一组都不能删除
  归档模式:
  查看数据库的归档状态:
  archive log list
  或者:
  select log_mode from v$database;
  将数据库修改为归档模式:
  1.正常停库
  shutdown immediate
  2.启动到mount
  startup mount
  3.转换为归档
  alter database archivelog;
  4.打开数据库
  alter database open;
  将数据库修改为非归档模式:
  1.正常停库
  shutdown immediate
  2.启动到mount
  startup mount
  3.转换为非归档
  alter database noarchivelog;
  4.打开数据库
  alter database open;
  修改存档终点:
  log_archive_dest_n (n=1~10)
  mkdir /u01/app/oracle/arclog
  alter system set log_archive_dest_1='location=/u01/app/oracle/arclog';
  归档模式下如果联机日志不能归档对数据库有什么影响?
  mkdir /arc
  chmod 777 /arc
  alter system set log_archive_dest_1='location=/arc';
  备用归档路径:

  alter system set LOG_ARCHIVE_DEST_1='location=/arclog_huayd/ MANDATORY>  alter system set LOG_ARCHIVE_DEST_2='location=/arclog2/ optional';
  alter system set LOG_ARCHIVE_DEST_STATE_1='enable';
  alter system set LOG_ARCHIVE_DEST_STATE_2='alternate';
  OPTIONAL:该选项是默认选项.使用该选项时,无论归档是否成功,都可以覆盖重做日志.
  MANDATORY:强制归档.使用该选项时,只有在归档成功之后,重做日志才能被覆盖.
  查看归档终点是否有效:
  select dest_name,destination,status,error
  from v$archive_dest
  where dest_id in (1,2);
  日志挖掘:
  挖掘dml语句需要将数据库置为追加日志数据模式:
  alter database add SUPPLEMENTAL LOG data;
  做交易!挖掘!
  conn / as sysdba
  生成挖掘队列:
  exec dbms_logmnr.add_logfile('/home/oracle/redo01a.log',dbms_logmnr.new);
  exec dbms_logmnr.add_logfile('/home/oracle/redo02a.log',dbms_logmnr.addfile);
  exec dbms_logmnr.add_logfile('/home/oracle/redo03a.log',dbms_logmnr.addfile);
  开始挖掘:
  exec dbms_logmnr.start_logmnr(options=>dbms_logmnr.dict_from_online_catalog);
  查看挖掘结果:
  select sql_redo
  from v$logmnr_contents
  where lower(sql_redo) like '%update%'
  and seg_name='EMP'
  and seg_owner='SCOTT';
  select sql_undo
  from v$logmnr_contents
  where lower(sql_redo) like '%update%'
  and seg_name='EMP'
  and seg_owner='SCOTT';
  练习
  日志文件中存放的是什么内容?有什么用?
  联机日志怎样工作?
  怎样查看联机日志的工作状态?
  怎样查看联机日志的物理信息?
  联机日志何时会发生切换?
  怎样手工切换日志?
  active状态有何含义?
  如何是active状态转变为inactive状态?
  如何保证联机日志文件的安全性?
  如何修改联机日志文件的大小?
  如何移动联机日志文件?
  如何修改联机日志文件的名称?
  删除组和成员都有什么限制?
  清空日志命令有什么作用?
  如何做归档模式的转换?有什么注意事项?
  如何修改存档终点?
  如何挖掘日志中的内容?挖掘dml有什么前提条件?
  表空间和数据文件的管理
  select tablespace_name,contents from dba_tablespaces order by 2;
  永久表空间的管理
  创建小文件表空间(1023个文件,每个文件管理4M个oracle块)

  create tablespace users datafile '/home/oracle/users01.dbf'>
  create tablespace data01 datafile '/dev/raw/raw1'>  查看表空间信息:
  select tablespace_name,file_name,bytes/1048576 mb
  from dba_data_files;
  修改表空间状态:
  select tablespace_name,status from dba_tablespaces;
  只读状态:只能查询,不能修改,但是可以删除对象!
  alter tablespace users read only;
  alter tablespace users read write;
  离线状态:可以删除对象
  alter tablespace users offline;
  alter tablespace users online;
  表空间改名:
  alter tablespace xxx rename to yyy;
  不能offline的表空间:
  system
  default temporary
  包含活动事务的undo
  创建大文件表空间(只能包含1个文件,文件管理4G个oracle块)
  select tablespace_name,bigfile from dba_tablespaces;

  create bigfile tablespace test_big datafile '/home/oracle/bigfile01.dbf'>  数据文件的移动和改名:
  1.使用alter tablespace命令
  a.表空间要offline
  alter tablespace test_big offline;
  b.目标文件要存在
  ! mv /home/oracle/bigfile01.dbf /u01/app/oracle/oradata/demo/bigfile01.dbf
  alter tablespace test_big rename datafile '/home/oracle/bigfile01.dbf' to '/u01/app/oracle/oradata/demo/bigfile01.dbf';
  alter tablespace test_big online;
  2.使用alter database命令
  a.数据库要mount
  shutdown immediate
  startup mount
  b.目标文件要存在
  ! mv /home/oracle/bigfile01.dbf /u01/app/oracle/oradata/demo/bigfile01.dbf
  alter database rename file '/home/oracle/bigfile01.dbf' to '/u01/app/oracle/oradata/demo/bigfile01.dbf';
  alter database open;
  表空间扩容:
  select
  a.tablespace_name,
  a.curr_mb,
  round((b.free_mb/a.curr_mb)*100,3)||'%' free_pct,
  a.max_mb
  from
  (select tablespace_name,sum(bytes)/1048576 curr_mb,
  sum(maxbytes)/1048576 max_mb
  from dba_data_files group by tablespace_name) a,
  (select tablespace_name,sum(BYTES)/1048576 free_mb
  from dba_free_space group by tablespace_name) b
  where a.tablespace_name=b.tablespace_name;
  1.使用文件的自动增长属性:
  alter database datafile '/u01/beijing/undotbs01.dbf' autoextend on next 10m maxsize 4g;
  alter database datafile '/u01/beijing/undotbs01.dbf' autoextend off;
  2.增加新文件

  alter tablespace users add datafile '/u01/beijing/users02.dbf'>  oracle 10g,第一个文件和有数据的文件不能删除,
  alter tablespace users drop datafile '/u01/beijing/users02.dbf';
  3.修改现有文件的大小
  alter database datafile '/u01/beijing/users02.dbf' resize 15m;
  alter database datafile '/u01/beijing/users02.dbf' resize 10m;
  临时表空间的管理:
  存放排序的中间结果
  存放临时表数据
  alter system set pga_aggregate_target=10m;
  select USERNAME,TABLESPACE,BLOCKS from v$sort_usage;
  select * from database_properties
  where rownum  default tablespace users --10g
  temporary tablespace temp --9i
  quota 10m on users
  password expire;
  create temporary tablespace temp02
  tempfile '/u01/app/oracle/oradata/test/temp02.dbf'
  size 10m;
  select TEMPORARY_TABLESPACE
  from dba_users where username='SCOTT';
  修改数据库默认排序表空间
  alter database default temporary tablespace temp;
  修改用户默认排序表空间
  ALTER USER SCOTT TEMPORARY TABLESPACE TEMP02;
  oracle 10g 临时表空间组:
  select * from DBA_TABLESPACE_GROUPS;
  将临时表空间加入组
  alter tablespace temp tablespace group tempgroup;
  将临时表空间移出表空间组
  alter tablespace temp02 tablespace group '';
  删除临时表空间的文件:
  alter database tempfile
  '/u01/app/oracle/oradata/test/temp02.dbf' drop;

  alter tablespace temp02 add tempfile '/home/oracle/temp02.dbf'>  回退表空间的管理:
  创建undo表空间
  create undo tablespace undo02 datafile

  '/u01/app/oracle/oradata/test/undo02.dbf'>  回退表空间的作用:undo tablespace --> rollback segment --> 数据修改前的老镜像
  1.为事务提供回退数据(rollback)
  2.为事务提供恢复
  3.提供读一致性
  自动管理:只能使用一个undo表空间
  相关参数
  show parameter undo
  undo_management = AUTO
  undo_tablespace = UNDOTBS1
  undo tablespace --> rollback segment
  回滚段:
  系统回滚段(系统创建)
  为系统表空间的对象提供回退
  非系统回滚段(用户创建)
  为用户表空间的对象提供回退
  延迟回滚段(系统创建)
  表空间非正常离线时自动创建
  select segment_name,tablespace_name,status
  from dba_rollback_segs;
  要保证UNDOTBS1表空间有足够的空间可用!
  切换回滚表空间:
  alter system set undo_tablespace = undo02;
  跟踪回滚段使用情况:
  select SES_ADDR,USED_UBLK from v$transaction;
  select sid,serial#,username,machine
  from v$session where saddr=SES_ADDR;
  (v$transaction.SES_ADDR=v$session.saddr)
  手工管理:
  相关参数
  show parameter undo_management
  alter system set undo_management=manual scope=spfile;
  show parameter rollback
  transactions_per_rollback_segment=5
  手工创建回滚段:
  create rollback segment rbs1 tablespace undotbs1;
  create rollback segment rbs2 tablespace undotbs1;
  手工使回滚段online:
  alter rollback segment rbs1 online;
  使回滚段在数据库启动时自动online:
  alter system set rollback_segments=rbs1,rbs2 scope=spfile;
  回退保持力(oracle 9i):
  事务内的老的镜像块commit后在回滚段还会保留15分钟
  undo_retention=900
  conn scott/tiger
  update scott.emp set sal=100;
  commit;
  conn system/oracle
  exec dbms_flashback.ENABLE_AT_TIME(sysdate-15/1440);
  select empno,sal from scott.emp;
  exec dbms_flashback.disable;
  declare
  cursor c is select empno,sal from scott.emp;
  r c%rowtype;
  begin
  dbms_flashback.ENABLE_AT_TIME(sysdate-15/1440);
  open c;
  dbms_flashback.disable;
  loop
  fetch c into r;
  exit when c%notfound;
  update scott.emp set sal=r.sal where empno=r.empno;
  end loop;
  close c;
  commit;
  end;
  /
  练习
  表空间的作用?
  数据文件的作用?
  按照存储的内容分类,表空间分为几种类型?
  怎样创建不同类型的表空间?
  表空间有几种状态?如何查看?如何修改?不同状态对数据操作有何影响?
  是不是所有的表空间都可以offline ?
  大文件表空间有什么特点?
  数据文件有几种状态?如何修改?
  临时表空间保存何种数据?有什么作用?
  undo表空间保存何种数据?有什么作用?
  如何查看表空间的空间使用率?
  表空间扩容有几种手段?
  如何移动数据文件?有几种办法?
  移动数据库
  select name from
  (select name from v$controlfile
  union
  select name from v$datafile
  union
  select name from v$tempfile
  union
  select member from v$logfile);
  将所有的数据库文件都移动到:/u01/beijing
  正常停库
  shutdown immediate
  修改参数
  control_files='/u01/beijing/control01.ctl'
  移动所有数据文件到/u01/beijing/
  cd /u01/app/oracle/oradata/demo
  mv *.dbf /u01/beijing/
  启动数据库到nomount
  startup nomount
  创建控制文件的同时修改文件指针
  CREATE CONTROLFILE REUSE DATABASE "BEIJING" RESETLOGS ARCHIVELOG
  MAXLOGFILES 16
  MAXLOGMEMBERS 3
  MAXDATAFILES 100
  MAXINSTANCES 8
  MAXLOGHISTORY 292
  LOGFILE

  GROUP 1 '/u01/beijing/redo01.log'>
  GROUP 2 '/u01/beijing/redo02.log'>
  GROUP 3 '/u01/beijing/redo03.log'>  DATAFILE
  '/u01/beijing/system01.dbf',
  '/u01/beijing/undotbs01.dbf',
  '/u01/beijing/sysaux01.dbf',
  '/u01/beijing/users01.dbf',
  '/u01/beijing/bigfile01.dbf'
  CHARACTER SET WE8ISO8859P1
  ;
  打开数据库:
  alter database open resetlogs;
  添加临时文件:
  alter tablespace temp add tempfile '/u01/beijing/temp01.dbf' reuse;
  --生成批量修改控制文件指针的脚本
  select 'alter database rename file '||chr(39)||name||chr(39)||' to '||chr(39)||'/u01/app/oracle/oradata/bobo/'||substr(name,instr(name,'/',-1,1)+1)||chr(39)||';'
  from
  (select name from v$datafile
  union all
  select name from v$tempfile
  union all
  select member from v$logfile)
  /
  练习
  将你的数据库的核心文件全部移动到 /oradb/

页: [1]
查看完整版本: ORACLE 管理 日志与空间