Oracle10g数据库培训学习经典笔记7909.pptx
Oracle 10g Oracle 10g 数据库数据库 培训学习笔记培训学习笔记姓名:唐晓锋EMAIL:MSN:oracle_1.数据库备份.数据库备份是对数据库的物理结构文件,包括数据文件,日志文件和控制文件的操作系统备份,这是物理的操作系统备份方法,这种备份方法对每一个数据库来说都是必需的。操作系统备份有完全数据库及部分数据库备份,其中,部分数据库备份在数据库恢复需要数据库前一段运行时产生归档的日志的支持完全数据库备份是对构成数据库的全部数据文件、在线日志文件和控制文件的一个操作系统备份。完全数据库备份在数据库正常关闭之后进行。在数据库关闭时,构成数据库的所有文件都关闭,文件的同步号与当前检验点号一致,不存在不同步问题。利用这种备份方法,在拷贝回数据库备份文件后,不需要进行数据库恢复。完全数据库备份可以备份到任何类型的存储介质上。部分数据库备份也是物理文件的操作系统微备份。不同的是,部分数据库备份可以在数据库关闭时也可以数据库运行时进行。例如,对某一个表空间中全部数据库文件备份、单个数据文件备份或控制文件备份。部分数据库备份由于数据库文件之间存在不同步,在备份文件拷回数据库时需要实施数据库恢复,所以这种方法只可以在归档模式下使用,使用归档日志进行数据库恢复。2.数据库备份与恢复的方法。对于Oracle数据库,备份方法可以分为物理备份与逻辑备份。根据数据库的归档方式不同。物理备份又可以分为非归档的操作系统备份、归档的操作系统备份。逻辑备份使用Export工具进行备份,用Import进行逻辑恢复。3.数据库归档方式。数据库备份与恢复方法的确定与数据库归档方式有直接关系的关系。因为如果选择通过日志进行数 据库恢复的备份方法,则数据库必需运行在归档模式下,只有归档模式下才会产生归档日志,而只有产生归档日志,数据库才可能实施恢复。参数文件(parameter file):设置内存各项参数,指定控制文件控制文件(control file):指定数据文件,临时文件,重做日志文件及其他控制信息数据文件(data file):存放数据库全部数据重做日志文件(redo log file):存放所有事务日志归档文件(archive log file):重做日志文件的截断备份口令文件(password file):对通过网络进行管理的用户进行认证警告文件(alert file):记录数据库文件运行中主要事件的命令与结果跟踪文件(trace file):记载后台进程遇到的重大事件信息构成数据库的8种文件类型:Oracle 10g数据库备份与恢复1.参数文件备份与恢复。参数文件备份与恢复。参数文件名及路径:参数文件名及路径:/u01/app/oracle/admin/oracle/pfile$ORACLE_HOME/dbs/spfile$ORACLE_SID.ora 二进制配置文件$ORACLE_HOME/dbs/init$ORACLE_SID.ora 文本配置文件spfile与pfile的相互生成SQLcreate pfile from spfile;SQLcreate spfile from pfile;spfile与pfile特点spfile:二进制存储,参数修改动态生效.pfile:文本存储,易于查看修改,修改后重启生效.SQLstartup open pfile=/u01/app/oracle/initora10.ora指点备份的参数文件启动。如果参数文件没有备份而破坏了,可以到相同的服务器上拷贝一份pfile文件到破坏的服务器上。修改参数的值便可启动到nomount下。需要修改的参数有:db_name,instance_name,db_domain,service_names,control_files,db_block_size,user_dump_dest,background_dump_dest等参数2.控制文件控制文件备份与恢复备份与恢复(1)控制文件概述控制文件概述每个oracle数据库必须至少有一个控制文件,用于记载数据库物理结构每个oracle数据库应该至少有两个控制文件相互镜像,并存储在不同磁盘上防止磁盘失效控制文件记载信息包括:数据库名称,数据文件名称和位置,重做日志名称和位置,表空间名称,当前日志序列号,检查点信息,日志历史信息.在线备份控制文件。在线备份控制文件。SQLalter database backup controlfile to/u02/oracle/control.backup;SQLalter database backup controlfile to trace;命令运行结束后,在以下目录中检测跟踪文件:/u01/app/oracle/admin/ora10/udump/*.trc(2)查询数据库控制文件查询数据库控制文件SQLselect name,block_size,file_size_blks from v$controlfile;查看所有控制文件及大小/u01/app/oracle/oradata/ora10/control01.ctl/u01/app/oracle/oradata/ora10/control02.ctl/u01/app/oracle/oradata/ora10/control03.ctlSQL select value from v$parameter where name=control_files;查看所有控制文件SQLhost ls l/u01/app/oracle/oradata/ora10/control*(3)修改数据库控制文件修改数据库控制文件*新增/移动一个数据库控制文件SQLselect name from v$controlfile;SQL create pfile from spfile 生成初参文件SQL shutdown immediate$cp control03.ctl control04.ctl 新增一个控制文件$mv control03.ctl./controlbak.ctl 移动/更名一个控制文件$vi init$ORACLE_SID.ora 修改初参文件SQL startup pfile=$ORACLE_HOME/dbs/init$ORACLE_SID.oraSQLselect name from v$controlfile;SQL create spfile from pfile;*所有控制文件被全部破坏的恢复$cd/u01/app/oracle/oradata/ora10$mv*.ctl.模拟破坏控制文件$cp/u01/app/oracle/oradata/ora10/*./bak/备份数据文件和日志文件,以免重建控制文件失败时数据文件和日志文件也被潜在损坏.SQLstartup open 启动失败SQLstartup nomountSQLalter system set 重新指定控制文件2 control_files=/u01/app/oracle/oradata/ora10/newcontrolfile01,3/u01/app/oracle/oradata/ora10/newcontrolfile014 scope=spfile;SQLshutdown immediate;重启生效SQLstartup nomount;SQLselect value from v$parameterwhere name=control_files;查看新设定SQLhost ls l/u01/app/oracle/oradata/ora10/查看数据/日志文件SQLcreate controlfile database ora10 noresetlogs 重建控制文件2 logfile3 group 1/u01/app/oracle/oradata/ora10/redo01.log,4 group 2/u01/app/oracle/oradata/ora10/redo02.log,4 group 3/u01/app/oracle/oradata/ora10/redo03.log5 datafile6 /u01/app/oracle/oradata/ora10/system01.dbf,7 /u01/app/oracle/oradata/ora10/undotbs01.dbf,8/u01/app/oracle/oradata/ora10/sysaux01.dbf,8 /u01/app/oracle/oradata/ora10/users01.dbf,8 /u01/app/oracle/oradata/ora10/example01.dbf9 character set zhs16gbkSQLalter database open;SQLalter tablespace temp add tempfile 重新建立临时文件2/u01/app/oracle/oradata/ora10/temp.dbf 以避免免排序报错3 size 10485760 reuse autoextend off;reuse指重用原OS文件SQLselect name from v$controlfile;SQLhost ls l/u01/app/oracle/oradata/ora10 控制文件已生成4.日志管理与归档方式每一个数据库实例至少有两个日志文件组,日志文件中记录全部的数据库修改信息,日志与Oracle的后台进程LGWR一起工作,当一个在线日志文件组被写满后,就发生日志却换。行成了数据库的归档日志文件,这时LGWR进程将日志信息写倒下一个在线日志文件组,当最后一个可用的在线日志文件的检查点到来时,又回到第一个组。1.确认数据库的归档方式可以查询数据字典v$database;SQLselect dbid 标识号,name 数据库名,created 创建时间,log_mode 归档模式 from v$database;也可以使用sql*plus显示数据库归档模式:$sqlplus/as sysdbaSQLarchive log list;2.数据库归档设置:第一步关闭 数据库:SQLshutdown immediate;第二步把数据库启动到mount状态下:SQLstartup mount;第三步修改数据库运行模式:SQLalter database archivelog;第四步打开数据库:SQLalter database open;也可以修改参数启动自动归档进程:将LOG_ARCHIVE_START设为TRUE在数据库归档完成后,如果发生了日志切换,则在规定的目录下会自动产生归档日志文件,可以使用alter system switch logfile命令强制日志切换。然后可以查询数据库字典v$archived_log检测是否有归档日志产生。SQLselect recid,stamp,sequence#,first_change#,first_time,name from v$archived_log;5.归档日志参数设置1,归档日志目录:log_archive_dest=/u01/app/oracle/ora10/arch12,归档日志文件存格式,参数log_archive_format用于设置日志 格式,可以使用%ORACLE_SID%、%T、%t、%S、%s、%r alter system set log_archive_format=%r-%t-%s.da Scope=spfile;3,归档日志镜像目录 log_archive_duplex_dest=/u02/oracle/arch2(1)重做日志文件概述*记录数据库数据进行的所有修改操作,保证数据的一致性和安全性.*数据库失败需要进行恢复时,能提供恢复所需的依据.*每个数据库应有多个redolog文件,按序循环轮流被使用进行日志记载,每个redolog文件称为一个日志组.一个例程至少需两组联机重做日志文件.多个日志组应分开放在不同磁盘上以均衡磁盘IO.*为防止每个日志组文件本身失效,应对每个日志组文件进行至少一份镜像,每个日志组文件和其镜像文件称为其日志组的组员.两者应分开放在不同磁盘上以避免磁盘失效.(2)查看重做日志文件RRSQL select*from v$log;查看日志组的信息Group#Bytes Members Archived Status-1 52824400 1 NO Current2 52824400 1 NO Inactive3 52824400 1 NO Inactive日志组的状态:current:使用状态,该日志组正在使用中active:激活状态,实例恢复时将需要该日志组inactive:非激活状态,实例恢复时不再需要该日志组unused:未使用状态,该日志组尚未记录过日志信息(新添加组)SQL select*from v$logfile;查看日志组成员信息Group#Status Type Member-1 online/u01/app/oracle/oradata/ora10/redo01.log2 stale online/u01/app/oracle/oradata/ora10/redo02.log3 stale online/u01/app/oracle/oradata/ora10/redo03.log日志组成员的状态:空白:该文件是可用/活动的(但不一定是正在使用中的,参考v$log)stale:表示该文件内容不完全(系统特殊状态)invalid:表明该文件暂不可访问(新添加镜像)deleted:表明该文件已不再使用(已删除)(3)修改重做日志文件*添加日志组(添加重做日志文件个数)SQLalter database ora10 add logfile group 4(/u01/app/oracle/oradata/ora10/redo04.log)size 5M;SQLselect*from v$log;新添加组状态为unused.*添加日志组成员(添加镜像文件)SQLalter database ora10 add logfile member/u01/app/oracle/oradata/redo01.log to group 1,/u01/app/oracle/oradata/redo02.log to group 2,/u01/app/oracle/oradata/redo03.log to group 3,/u01/app/oracle/oradata/redo03.log to group 4;SQLselect*from v$logfile;新加镜像状态为invalid.SQLalter system switch logfile;进行一次日志切换启用镜像.SQLselect*from v$logfile;再查新加镜像状态.*删除日志组(削减重做日志文件个数)SQLalter database ora10 drop logfile group 4;SQLselect*from v$logfile;SQLselect*from v$log;SQLalter system switch logfile;inactive和unused状态的日志组才能删除,current和active状态的日志组不能删除.要删除current状态的日志组,应先用logswitch将current状态的日志组转换为active状态,而要删除active状态的日志组,则需用checkpoint将其转换为inactive状态,才能删除:SQLalter system checkpoint;*删除日志组成员(删除镜像文件)SQLalter database ora10 drop logfile member/u01/app/oracle/oradata/redo01.log,SQLselect*from v$log;SQLselect*from v$logfile;日志组中最后一个日志成员不能被删除;current日志组中任何成员都不能删除;其他情况下不能删组成员时,可用logswitch将日志组状态进行转换后才能删除.SQLalter system switch logfile;手工切换日志,以将log 3转变为非current状态.*移动或重命名日志文件SQL alter system switch logfile;SQL shutdown immediateSQL host mv/u01/app/oracle/oradata/ora10/*.log/u01/appSQL startup mountSQL alter database rename file3/u01/app/oracle/oradata/ora10/redo01.log,4/u01/app/oracle/oradata/ora10/redo02.log,5/u01/app/oracle/oradata/ora10/redo03.log6 to7/u01/app/redo01.log,8/u01/app/redo02.log,9/u01/app/redo03.log;SQL alter database open;SQL alter system switch logfile;SQL select*from v$log;SQL select*from v$logfile;3.数据文件(1)数据文件概述*每个oracle数据库必须至少有一个数据文件,用于存放数据库数据*多个数据文件应分放在不同的磁盘上以提高存取速度system01.dbf:记录系统运行信息,包含所有数据库字典,PL/SQL程序代码及其他系统信息.sysaux01.dbf:system文件的辅助文件,存放支持oracle系统活动的多种工具如LogMinerundotbs01.dbf:存放回退信息,即DML操作后的旧数据信息.users01.dbf:新建用户未指定存储空间时,默认数据存放在该文件中.example01.dbf:存放示例数据信息.2.物理备份数据库(2)查看数据库数据文件SQLselect name,bytes from v$datafile;查看数据文件及大小/u01/app/oracle/oradata/ora10/system01.dbf/u01/app/oracle/oradata/ora10/undotbs01.dbf/u01/app/oracle/oradata/ora10/sysaux01.dbf/u01/app/oracle/oradata/ora10/users01.dbf/u01/app/oracle/oradata/ora10/example01.dbfSQLselect*from dba_data_files;查看数据文件及大小SQLhost ls l/u01/app/oracle/oradata/ora10/*.dbf(3)修改数据库数据文件*移动/更名一个数据文件SQL shutdown immediate$cd/u01/app/oracle/oradata/ora10$mv example01.dbf./example.dbfSQL startup mountSQL alter database ora10 rename file2 /u01/app/oracle/oradata/ora10/example01.dbf to3 /u01/app/oracle/oradata/example.dbf;SQL alter database open;SQL select*from v$datafile;*数据文件的扩大和缩小SQLcreate tablespace test datafile 新建表空间及其所包含的数据文件/u01/app/oracle/oradata/test1.dbf size 5M;SQL host ls l/u01/app/oracle/oradata/test1.dbf 查数据文件大小SQL alter database datafile 设置数据文件自动扩充/u01/app/oracle/oradata/test1.dbf autoextend on;SQL select autoextensible from dba_data_files 查看自动扩充标志where file_name=/u01/app/oracle/oradata/test1.dbf;SQL alter database datafile 手工扩充数据文件大小/u01/app/oracle/oradata/test1.dbf resize 10M;SQL host ls l/u01/app/oracle/oradata/test1.dbfSQL alter database datafile 手工缩减数据文件大小/u01/app/oracle/oradata/test1.dbf resize 7M;SQL host ls l/u01/app/oracle/oradata/test1.dbf*数据文件的添加和删除A.添加数据文件到表空间SQLalter tablespace test add datafile 新增数据文件/u01/app/oracle/oradata/test2.dbf size 5M;B.删除表空间中的所有数据文件SQLselect file_name,tablespace_name from dba_data_files;查询欲删的数据文件对应的表空间,是否包含多个数据文件SQLdrop tablespace test including contents;确定表空间所含所有数据文件均不需要,可直接删除表空间.SQLhost rm/u01/app/oracle/oradata/test.dbf删除数据文件C.删除表空间中的部分数据文件SQLselect file_name,tablespace_name from dba_data_files;查询欲删的数据文件对应的表空间,是否包含多个数据文件SQLalter database ora10 datafile/u01/app/oracle/oradata/test2.dbf offline drop;若表空间中包含多个数据文件,且部分数据文件不能删掉,则欲删的数据文件先进行脱机处理.此处drop不意味着该数据文件在数据库中已经删除,此时若在操作系统中直接删除该数据文件,则数据库将面临崩溃.SQLselect file_name,tablespace_name,online_statusfrom dba_data_files;数据文件依然存在(状态recover),故不能直接删除该数据文件.只能通过删除表空间的方法删除表空间中所有数据文件SQLselect owner,segment_name,segment_typefrom dba_segments where tablespace_name=TEST;查看表空间中包含的所有数据文件内容,将表空间中其他数据文件中应保留的内容进行exp备份,之后删除整个表空间(此时该表空间中所有数据文件可删),之后再重建表空间及数据文件,将备份内容重新倒入.SQLhost rm/u01/app/oracle/oradata/test2.dbf测试:若不按上步进行,违反警告直接删除脱机状态的数据文件,SQLshutdown immediate;SQLstartup open;则数据库重启可能报错,启动失败,处理方法如下:SQLalter database ora10 datafile 归档模式下脱机指定数据文件/u01/app/oracle/oradata/test2.dbf offline;SQLalter database ora10 datafile 非归档模式下脱机指定数据文件/u01/app/oracle/oradata/test2.dbf offline drop;SQLalter database open;SQLselect name,status from v$datafile;SQLdrop tablespace test including contents;ora10.2可用drop参数删数据文件,但存在限制:1.表空间中首个数据文件不能删除;2.被删除数据文件必须为空;3.无法删除表空间中最后一个数据文件,除非删表空间本身.SQLcreate tablespace test2 datafile/u01/test01.dbf size 5M;SQLcreate tablespace test2 add datafile/u01/test02.dbf size 5M;SQLcreate tablespace test2 add datafile/u01/test03.dbf size 5M;创建表空间并添加数据文件SQLalter tablespace test2 drop datafile/u01/test01.dbf删除表空间中第一个数据文件报错,不能进行.SQLalter database ora10 datafile/u01/test01.dbf offline;SQLcreate table mytest(i number)tablespace test2;将首个数据文件离线,再在表空间中建测试表,则表将被保存在剩余两数据文件中SQLselect owner,segment_name,file_id from dba_extentswhere segment_name=mytest;SQLselect file_name,file_id from dba_data_files where file_id=?;查看测试表保存在哪个数据文件中,查到该数据文件号后再根据文件号查数据文件名SQLalter tablespace test2 drop datafile/u01/test02.dbf;删除表空间中已分配了空间的数据文件(非空)报错,不能进行.SQLalter tablespace test2 drop datafile/u01/test03.dbf;删除表空间中未分配空间的数据文件(为空),允许进行.1.完全数据库脱机备份 1)编写一个要备份的最新文件列表。必需备份数据库的三类文件,不得漏掉某_一类文件。可以查询dba_data_files确认数据库文件、v$logfile确认日志文件、v$controlfile确认控制文件。SQLselect file_name from dba_data_files;查看数据文件及大小/u01/app/oracle/oradata/ora10/system01.dbf/u01/app/oracle/oradata/ora10/undotbs01.dbf/u01/app/oracle/oradata/ora10/sysaux01.dbf/u01/app/oracle/oradata/ora10/users01.dbf/u01/app/oracle/oradata/ora10/example01.dbf关闭数据库后到操作系统下sqlhost cp/u01/app/oracle/oradata/ora10/*.dbf/u02/backupSQL select*from v$logfile;查看日志组成员信息Group#Status Type Member-1 online/u01/app/oracle/oradata/ora10/redo01.log2 stale online/u01/app/oracle/oradata/ora10/redo02.log3 stale online/u01/app/oracle/oradata/ora10/redo03.logsqlhost cp/u01/app/oracle/oradata/ora10/*.log/u02/backupSQLselect name,block_size,file_size_blks from v$controlfile;查看所有控制文件及大小/u01/app/oracle/oradata/ora10/control01.ctl/u01/app/oracle/oradata/ora10/control02.ctl/u01/app/oracle/oradata/ora10/control03.ctlsqlhost cp/u01/app/oracle/oradata/ora10/*.ctl/u02/backup2)用shutdown immediate命令关闭数据库3)用操作系统的备份工具,备份所有的数据文件,日志文件、控制文 件以及参数文件。4)重启数据库。2.2.部分数据库联机备份部分数据库联机备份 1)设置表空间为备份状态ALTER TABLESPACE 表空间名 BEGIN BACKUP.(由于是物理备份,数据中是否存储数据,整个文件都要拷贝。如果要减少数据文件备份量或不拷贝数据文件中的空闲空间,可以在表空间热备份之前将空闲间压缩,然后再实施备份。设置表空间为备份状态,实际上是将表空间备份标识,语法如下:SQLalter tablespace tangxiaofeng begin backup;(tangxiaofeng为表空间名)如果表空间处于备份状态,这时要是正常关闭数据库则系统会拒绝关闭。ALTER TABLESPACE BEGIN BACKUP为表空间设置热备份标识,在命令发出后,该表空间的数据文件的系统改变号将停止,并对数据库文件作热备份标记。这时,被备份的数据库文件将发生三个方面的主要变化(标识)第一,检验点号停止修改,文件头被冻结。联合查询数据字典v$datafile、dba_data_file检测tangxiaofeng表空间数据文件的检查点号SQLselect a.file#,a.checkpoint_change#,b.file_name from v$datafile a,dba_data_files b where a.file#=b.file_id;这时你会发现检查点号会与其它表空间的数据文件的检查号不一样。第二,查看数据文件作热备份标记。查询数据字典v$backup;SQLselect file#,status,change#,time from v$backupfile#status change#time-1 not active 0 2 active 1641108 03-AUG-02第三,以数据文件作“FUZZY”标识。查询数据字典v$datafile_headerSQLselect file#,status,fuzzy,name from v$datafile_header;结果fuzzy字段的值会为YESFUZZY是一种标识,表示数据文件正处于热备份期间。此外,这种备份方法只用于居归档方式运行的数据库,如果数据库以非归档方式运行则不能使用,否则将出现ORA-01123的错误。2)恢复表空间为正常状态给表空间作备份结束标识,语法如下:SQLalter tablespace 表空间名 end backup;SQLalter tablespace tangxiaofeng end backup;表空间备份结束之后,上述三个标识自动恢复正常,数据文件自动同步