精华内容
下载资源
问答
  • 归档日志

    2017-01-06 17:53:00
    oracle 归档日志 归档日志(Archive Log)是非活动的重做日志备份.通过使用归档日志,可以保留所有重做历史记录,当数据库处于ARCHIVELOG模式并进行日志切换式,后台进程ARCH会将重做日志的内容保存到归档日志中....

    oracle 归档日志

     

    归档日志(Archive Log)是非活动的重做日志备份.通过使用归档日志,可以保留所有重做历史记录,当数据库处于ARCHIVELOG模式并进行日志切换式,后台进程ARCH会将重做日志的内容保存到归档日志中.当数据库出现介质失败时,使用数据文件备份,归档日志和重做日志可以完全恢复数据库.


    日志操作模式:ARCHIVELOG NOARCHIVELOG


    1,改变日志操作模式:

    检查当前日志操作模式

    SELECT log_mode from v$database;

    关闭数据库,然后装载数据库

    SHUTDOWN IMMEDIATE
    STARTUP MOUNT

    改变日志操作模式,然后打开数据库

    ALTER DATABASE ARCHIVELOG;
    ALTER DATABASE OPEN;


    2,执行手工归档

    从oracle database 10g开始,当将日志操作模式转变未ARCHIVELOG模式时,oracle会自动启动ARCH进程.如果要使用手工归档.那么在改变日志操作模式时必须使用命令ALTER DATABASE ARCHIVELOG MANUAL.

    需要注意,使用手工归档方式,数据库管理员必须手工执行归档命令.如果没有执行手工归档命令,日志组的原有内容将不能被覆盖.ALTER DATABASE ARCHIVELOG MANUAL 命令是为了与先前的版本兼容而保留的,.将来的oracle版本会淘汰该命令,使用手工归档方式是,数据库管理员可以执行以下命令归档重做日志:

    ALTER SYSTEM ARCHIVELOG ALL;


    3,配置归档进程

    初始化参数LOG_ARCHIVE_MAX_PROCESSES用于指定例程初始启动的最大归档进程个数,当将数据库转变为ARCHIVELOG模式时,默认情况下oracle会自动启动两个归档进程.通过改变初始化参数LOG_ARCHIVE_MAX_PROCESS的值,可以动态地增加或降低归档进程的个数:

    ALTER SYSTEM SET LOG_ARCHIVE_MAX_PROCESSES=3;

     

    配置归档位置和文件格式

    当数据库处于ARCHIVELOG模式时,如果进行日志切换,后台进程将自动生成归档日志,归档日志的默认位置为%oracle_home%rdbms,在oracle database 10g中,归档日志的默认文件格式为ARC%S_%R.%T.为了改变归档日志的位置和名称格式,必须改变相应的初始化参数,


    1,初始化参数LOG_ARCHIVE_FORMAT用于指定归档日志的文件名格式,设置该初始化参数时,可以指定以下匹配符:

    %s: 日志序列号:

    %S: 日志序列号(带有前导0)

    %t: 重做线程编号.

    %T: 重做线程编号(带有前导0)

    %a: 活动ID号

    %d: 数据库ID号

    %r RESETLOGS的ID值.

    从10g开始,配置归档日志文件格式时,必须带有%s,%t和%r匹配符,配置了归档文件格式后,必须重启数据库.


    2,使用LOG_ARCHIVE_DEST配置归档位置

    如果不使用备用数据库,只需要将归档日志存放到本地目录.配置本地归档位置可以使用初始化参数LOG_ARCHIVE_DEST和LOG_ARCHIVE_DUPLEX_DEST,其中,第一个参数用于设置第一个归档位置,第二个参数用于指定第二个归档位置.

    ALTER SYSTEM SET log_archive_dest='d:demoarchive1';

    ALTER SYSTEM SET log_archive_duplex_dest='d:demoarchive2';


    3,使用LOG_ARCHIVE_DEST_n配置多个归档位置.

    初始化参数LOG_ARCHIVE_DEST_n用于指定多个归档位置,该参数最多可以指定10个归档位置.通过使用初始化参数LOG_ARCHIVE_DEST_n,不仅可以配置本地归档位置,还可以配置远程归档位置.

    如果既要在主节点上生成归档日志,又要将归档日志传递到备用节点,那么必须使用参数LOG_ARCHIVE_DEST_n.该参数与LOG_ARCHIVE_DEST具有如下区别;

    初始化参数LOG_ARCHIVE_DEST_n可以配置本地归档位置和远程归档位置,而初始化参数LOG_ARCHIVE_DEST和LOG_ARCHIVE_DUPLEX_DEST只能配置本地归档位置.

    初始化参数LOG_ARCHIVE_DEST_n可以配置多达10个归档位置,而初始化参数LOG_ARCHIVE_DEST和LOG_ARCHIVE_DUPLEX_DEST最多只能配置两个归档位置.

    初始化参数LOG_ARCHIVE_DEST_n 不能与初始化参数LOG_ARCHIVE_DEST和LOG_ARCHIVE_DUPLEX_DEST同时使用.

    因为初始化参数LOG_ARCHIVE_DEST_n不能与初始化参数LOG_ARCHIVE_DEST和LOG_ARCHIVE_DUPLEX_DEST同时使用,所以必须禁用初始化参数LOG_ARCHVE_DEST和LOG_ARCHIVE_DUPLEX_DEST.当使用初始化参数LOG_ARCHIVE_DEST_n配置本地归档位置时,需要指定LOCALTION选项.当配置远程归档位置时,需要指定SERVICE选项.


    示例如下:

    ALTER SYSTEM SET log_archive_duplex_dest='';

    ALTER SYSTEM SET log_archive_dest='';

    ALTER SYSTEM SET log_archive_dest_1='location=d:demoarchive1';

    ALTER SYSTEM SET log_archive_dest_2='location=d:demoarchive2';

    ALTER SYSTEM SET log_archive_dest_3='location=d:demoarchive3';

    ALTER SYSTEM SET log_archive_dest_4='service=standby';


    配置远程归档位置时,SERVICE选项需要指定远程数据库的网络服务名(在tnsnames.ora文件中配置)


    4,使用LOG_ARCHIVE_DEST_n选项

    使用初始化参数LOG_ARCHIVE_DEST_n配置归档位置时,可以在归档位置上指定OPTIONAL或MANDATORY选项.指定MANDATORY选项时,可以设置REOPEN属性.

    OPTIONAL:该选项是默认选项.使用该选项时,无论归档是否成功,都可以覆盖重做日志.

    MANDATORY:强制归档.使用该选项时,只有在归档成功之后,重做日志才能被覆盖.

    REOPEN:该属性用于指定重新归档的时间间隔,默认值为300秒,必须跟在MANDATORY后.

    例:

    Alter system set log_archive_dest_1=’location=d:demoarchive1 mandatory’;
    Alter system set log_archive_dest_2=’location=d:demoarchive2 mandatory reopen=500’;
    Alter system set log_archive_dest_3=’location=d:demoarchive3 optional’;


    5,控制本地归档成功的最小个数.

    使用初始化参数LOG_ARCHIVE_MIN_SUCCEED_DEST控制本地归档的最小成功个数

    Alter system set log_archive_min_succeed_dest=2;


    6,使用初始化参数LOG_ARCHIVE_DEST_STATE_n控制归档位置的可用性.设置该参数为ENABLE(默认值),表示会激活相应的归档位置;设置该参数为DEFER,表示禁用相应归档位置.当归档日志所在磁盘损坏或填满时,DBA需要暂时禁用该归档位置.

    Alter system set log_archive_dest_state_3=defer;(禁用)
    Alter system set log_archive_dest_state_3=enable;(启用)


    显示归档日志信息

    1,使用ARCHIVE LOG LIST命令可以显示日志操作模式,归档位置,自动归档机器要归档的日志序列号等信息.


    2显示日志操作模式

    SELECT name,log_mode FROM v$database;


    3,显示归档日志信息.

    Col name format a46
    Select name, swquence#, first_change# FROM v$archived_log;

    Name用于表示归档日志文件名,sequence#用于表示归档日志对应的日志序列号,firs_change#用于标识归档日志的起始SCN值.


    4、执行介质恢复时,需要使用归档日志文件,此四必须准确定位归档日志的存放位置.通过查询动态性能视图v$archive_dest可以取得归档日志所在目录.

    SELECT destination FROM v$archive dest;


    5,显示日志历史信息

    SELECT * FROM v$loghist;

    THREAD#用于标识重做线程号,SEQUNCE#用于标识日志序列号,FIRST_CHANGE#用于标识日志序列号对应的起始SCN值,FIRST_TIME用于标识起始SCN的发生时间.SWICTH_CHANGE#用于标识日志切换的SCN值.


    6.显示归档进程信息.

    进行日志切换时,ARCH进程会自动将重做日志内容复制到归档日志中,为了加快归档速度,应该启用多个ARCH进程.通过查询动态性能视图V$ARCHIVE_PROCESSES可以显示所有归档进程的信息!

    SELECT * FROM v$archive_processes;

    Porcess用于标识ARCH进程的编号,status用于标识ARCH进程的状态(ACTIVE:活动,STOPPED:未启动),log_sequence用于标识正在进行归档的日志序列号,state用于标识ARCH进程的工作状态

     

    ==========================================
    用Oracle归档日志进行恢复的方法



    用Oracle归档日志进行恢复的方法
    联机重演日志没有丢失应使用完成恢复,如联机重演日志损坏,而又没有备份,就只能进行不完全恢复。

    一、完全恢复:
    1.使用命令“svrmgrl”调用行方式服务器管理;
    2.输入命令“connect internal”,然后输入命令“startup mount’;
    3.输入命令“recover database;”
    4.按下ENTER,接受默认值。
    5.然后输入命令“alter database open;”完成数据库恢复。

    二、不完全恢复
    警告:
    应用不完成恢复前,必须将数据库做一次完全冷备份,因为应用不完全恢复后,联机重演日志将重置,以前的所有日志不可用。
    如果恢复不成功,数据库就不能使用了。再次强调,做完全冷备份后再应用不完全恢复。

    1).基于变化的恢复(change-based recovery)
        要执行基于变化的恢复,需要知道丢失日志之前的系统写入归档重演日志的最大的变化号(SCN),然后可以启动恢复语句恢复数据库直到改变scn_number,其中比scn_number是写到已归档重演日志文件顺序号386的SCN(即,小于丢失日志顺序号387的SCN)。可以从V$log_history视图中得到SCN信息。

    select first_change# from v$log_history where sequence#=387;

    其中387为最后一个有效的日志文件号加1,该例是查找386.
    知道了SCN后,使用下述步骤完成恢复
    1.使用命令“svrmgrl”调用行方式服务器管理;
    2.输入命令“connect internal”,然后输入命令“startup mount’;
    3.输入命令“recover database until change 9999;”
    4.在回答Oracle第一个归档重演日志建议信息时,输入“auto”,Oracle在找到第387号重演日志之前停止恢复。
    5.用命令“alter database open resetlogs;”打开数据库。(应用该命令前请确认数据库已备份,如打开失败,日志将不可用)

    2).基于停止的恢复(cancel-based recovery)
    1.使用命令“svrmgrl”调用行方式服务器管理;
    2.输入命令“connect internal”,然后输入命令“startup mount’;
    3.输入命令“recover database until cancel;”,Oracle提示需要的第一个归档重演日志文件名.按下ENTER键接受缺省文件名,并且—路ENTER直到询问顺序号387的日志。输入“cancel”,停止恢复操作。
    4.用命令“alter database open resetlogs;”打开数据库。(应用该命令前请确认数据库已备份,如打开失败,日志将不可用)

    3).基于时间的恢复(time-based recovery)
    为使用基于时间的恢复,必须知道记录在V$log_history归档重演日志序号387(丢失重演日志)的时间,通过执行查询语句“select time from v$log_history where sequence#=387;”得到。本例得到的时间是:2002-06-23 14:42:04

    现在开始实施恢复。
    1.使用命令“svrmgrl”调用行方式服务器管理;
    2.输入命令“connect internal”,然后输入命令“startup mount’;
    3.输入命令“recover database until time '2002/06/23 14:42:04';”,Oracle提示需要的第一个归档重演日志文件名,输入“auto”,Oracle恢复归档重演日志直到序号为387的日志,停止恢复操作。
    4.用命令“alter database open resetlogs;”打开数据库。(应用该命令前请确认已数据库已备份,如打开失败,日志将不可用)

    提示: 使用基于时间的恢复,时间的格式是YYYY/MM/DD HH24:MI:SS,并且用单引号括起。

    附:如何启用Oracle的归档方式
    1.参照以下内容编辑init.ora文件:
    log_archive_start = true
    log_archive_dest_1 = " LOCATION=D:\Oracle\oradata\ORCL\archive "
    og_archive_format = %%ORACLE_SID%%T%TS%S.ARC
    2.关闭数据库
    svrmgrl> connect internal
    svrmgrl> shutdown normal
    3.然后启动实例并安装该数据库,但不打开数据库。
    svrmgrl> startup mount
    4.接着,发布下列更改数据库的命令。
    Svrmgrl> alter database archivelog;
    5.现在,数据库已经更改为归档方式,您可以打开数据库。
    svrmgrl> alter database open;

    提示:也可以使用DBA studio工具启用数据库的归档方式,操作很简单

    =============================================================
    ORACLE归档模式的设置



    在ORACLE 数据库的开发环境和测试环境中,数据库的日志模式和自动归档模式一般都是不设置的,这样有利于系统应用的调整,也免的生成大量的归档日志文件将磁盘空间大量的消耗。但在系统上线,成为生产环境时,将其设置为日志模式并自动归档就相当重要了,因为,这是保证系统的安全性,有效预防灾难的重要措施。这样,通过定时备份数据库和在两次备份间隔之间的日志文件,可以有效的恢复这段时间的任何时间点的数据,可以在很多时候挽回或最大可能的减少数据丢失。

    一、 要使OARCLE 数据库进行日志的自动归档,需要做两方面的事情;
    1.是数据库日志模式的设置(可为Archive Mode 和No Archive Mode);2.就是自动归档模式设置(Automatic archival,可为Enabled 和Disabled)。

    二、 如何查看数据库的现行日志和自动归档模式的设置
    可用archive log list 命令来查看。
    运行在日志自动归档模式下的数据库系统查看结果如下(一般是生产环境):
    SQL> archive log list
    Database log mode Archive Mode
    Automatic archival Enabled
    Archive destination /backup/archivelog
    Oldest online log sequence 2131
    Next log sequence to archive 2133
    Current log sequence 2133
    没有启动数据库日志模式和自动归档的数据库系统查看结果如下(一般是测试环境):
    SQL> archive log list
    Database log mode No Archive Mode
    Automatic archival Disabled
    Archive destination /u01/app/oracle/product/8.1.7/dbs/arch
    Oldest online log sequence 194
    Current log sequence 196

    三. 数据库日志模式的设置
    在创建数据库时,可以在CREATE DATABASE 语句中指定数据库的日志模式。假如没有指明,则缺省为NOARCHIVELOG 模式。由于如果在创建数据库时指明是Archive Mode的话,会增加约20%的创建时间,而在以后启动INSTANCE 时再设置的话,一般只用去几秒的时间,所以一般在创建数据库时是不设置为ARCHIVE MODE 的。
    将数据库的日志模式设置切换(Archive Mode 和No Archive Mode 之间的切换)的步骤和操作如下:
    1. 关闭运行的数据库实例
    SQL> shutdown
    在进行日志模式切换之前,必须将运行的数据库正常关闭。
    2. 备份数据库
    该备份跟以后产生的日志一起用于将来的灾难恢复(很重要,如要改为归档日志模式,没有这个数据库备份,仅有日志文件是无法从该时间点恢复的)。
    3. 启动数据库实例到mount 状态,但不要打开。
    SQL> startup mount
    4. 切换数据库日志模式。
    SQL> alter database archivelog;(设置数据库为归档日志模式)或
    SQL> alter database noarchivelog;(设置数据库为非归档日志模式)
    5. 打开数据库
    SQL> alter database open;
    6. 确认数据库现在处于归档日志模式。
    SQL> archive log list;
    Database log mode Archive Mode
    Automatic archival Enabled
    Archive destination for example: $ORACLE_HOME/dbs/arch
    Oldest on-line log sequence 275
    Next log sequence 277
    Current log sequence 278
    7. 将这个时间点的redo logs 归档
    SQL> archive log all;
    8. 确认新产生的日志文件已在相应的归档目录下面。

    四. 自动归档模式设置(Automatic archival,可为Enabled 和Disabled)。
    在该模式下,数据库启动一个arch 进程,专门负责将redo logs 写到系统归档设备的相应目录下。在数据库的参数文件中设置参数(一般是在$ORACLE_HOME/dbs/init*.ora 文件中):
    LOG_ARCHIVE_START=
    LOG_ARCHIVE_DEST=
    LOG_ARCHIVE_FORMAT=
    LOG_ARCHIVE_START:
    如要求自动归档的话,则设为TRUE,如要求为非自动归档的话,则设为FALSE
    LOG_ARCHIVE_DEST:
    该参数设定了archive logs 归档存放的路径。
    LOG_ARCHIVE_FORMAT:
    该参数设定了archive logs 的命名格式。例如,如将格式设为: arch%s.arc
    log 文件将为: arch1.arc, arch2.arc, arch3.arc
    这几个参数设置只有在数据库实例启动前设置才能生效,如果在数据库运行中进行设置,要使其生效,必须重起数据库。
    如果数据库正在运行中,不能即刻重起,要设置其为自动归档模式,则做如下操作:
    SQL> ALTER SYSTEM ARCHIVE LOG START;
    如要设置其为非自动归档模式(取消自动归档),则:
    SQL> ALTER SYSTEM ARCHIVE LOG STOP;
    但如果数据库重起后,给语句修改的结果就失效了,自动归档的设置还是按照系统参数文件中的LOG_ARCHIVE_START 的值来设置。

    五. 几种设置情况:
    1. Database log mode Archive Mode,Automatic archival Enabled
    这是在大部分生产环境中的ORACLE 数据库日志及归档模式设置,这种情况下,做好数据库的定期备份(有热备和冷备)和归档日志备份,可有效的将数据库恢复到有归档日志的全部时间点。
    2. Database log mode Archive Mode,Automatic archival Disabled
    这种情况下,数据库不能自动归档,需要进行手工归档。如果所有在线日志都写满了,又没有的及时进行手工归档的话,由于LGWR 没有可用的在线日志可写,数据库将会挂在这儿,只有进行手工归档后,有可用的在线日志后才能继续。在生产环境中应该避免这种情况。
    手工归档操作如下:
    SQL> ALTER SYSTEM ARCHIVE LOG ALL;
    数据库将会把在线日志进行归档处理
    3. Database log mode NO Archive Mode,Automatic archival Enabled
    有些情况下,数据库管理员只在数据库参数文件中设置了LOG_ARCHIVE_START=TRUE,然后在数据库起来后查看到ARCH 归档进程已经起来了,可是尽管ORACLE 已经作了几次日志切换,但还是没有归档日志,这时的设置就是这种情况,如果数据库不是处在ARVHIVELOG 模式,redolog 还是不会被归档。
    4. Database log mode NO Archive Mode,Automatic archival Disabled
    这种设置是刚安装的oracle 数据库的缺省设置,开发环境也大部分如此。即没有进行归档。

     


    如何手工删除归档日志文件?(如果采用RMNA备份后则不用手工删除)
    一、先手工删除归档日志文件
    二、用RMAN删除数据库记录的归档列表信息
    1) 进入本数据库的rman,在命令行模式输入"rman target /",进入rman,查看提示,确认连接的是否是本库?
    2) 查看归档日志文件的状态:
    RMAN> list archivelog all;
    3) 删除操作系统中的日志文件(到操作系统级进行手工删除,也可以是第一步;
    4) 将归档日志信息进行更新;
    RMAN> crosscheck archivelog all;
    RMAN> delete expired archivelog all; (确认时键入"yes")
    RMAN> exit


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


    9个重要的视图
    Ref: http://blog.itpub.net/post/7923/49453
    1)v$lock
    给出了锁的信息,如type字段, user type locks有3种:TM,TX,UL,system type locks有多种,常见的有:MR,RT,XR,TS等。我们只关心TM,TX锁。

    当TM锁时,id1字段表示object_id;当TX锁时,trunc(id1/power(2,16))代表了回滚段号。

    lmode字段,session持有的锁的模式,有6种:
    0 - none
    1 - null (NULL)
    2 - row-S (SS)
    3 - row-X (SX)
    4 - share (S)
    5 - S/Row-X (SSX)
    6 - exclusive (X)

    request字段,process请求的锁的模式,取值范围与lmode相同。

    ctime字段,已持有或等待锁的时间。

    block字段,是否阻塞其它锁申请,当block=1时说明这个session阻塞了别的session。


    2)v$sqlarea

    共享池中存储的sql和一些相关的信息,如累计的执行次数(executions),逻辑读(buffer_gets),物理读(disk_reads)等统计信息。

    根据address和hash_value可以定位一条sql。sql_text字段存的这个sql的前1000个字符。查找整个的sql还需去v$sqltext或者v$sqltext_with_newlines。


    3)v$session

    所有当前session的信息,包括一些用户信息如username,terminal,program,logon_time等,command字段表示session执行的什么命令。

    通过v$session.paddr=v$process.addr跟process相关,通过v$session.taddr=v$transaction.addr跟trancation相关。

    通过sid可以到相关视图中查询与这个session相关的各种信息,如v$sesstat中有session的统计信息,v$sess_io中有session的io统计信息,v$session_wait中有session的等待信息,v$session_event中有session在一段时间内所等待的各种事件的信息。

    根据lockwait字段可以查询当前正在等待的锁的相关信息:
    select * from v$lock where kaddr in (select lockwait from v$session where sid=&sid);

    (sql_address,sql_hash_value),(prev_sql_addr,prev_hash_value) 根据这两组字段, 可以查询到当前session正在执行的或者最近一次执行的sql语句的详细信息:
    select * from v$sqltext where address = &sql_address and hash_value = &sql_hash_value;


    4)v$sesstat

    根据session id可以得到这个session的统计信息:
    select a.name,b.value
    from v$statname a,v$sesstat b
    where a.STATISTIC#=b.STATISTIC#
    and b.sid=&sid
    and b.value <>0
    order by b.value;


    5)v$session_wait

    --这部分抄袭 xzh的blog
    根据session id可以得到这个session的等待情况。

    event字段表示等待事件。

    p1、p2、p3告诉我们等待事件的具体含义,如果wait event是db file scattered read,p1=file_id/p2=block_id/p3=blocks,然后通过dba_extents即可确定出热点对象;如果是latch free的话,p2为闩锁号,它指向v$latch。

    P1RAW,P2RAW,P3RAW列对应P1,P2,P3的十六进制值;P1TEXT,P2TEXT,P3TEXT列对应P1,P2,P3列的解释。

    --求等待事件及其对应的latch

    col event format a32
    col name format a32
    select sid,event,p1 as file_id, p2 as "block_id/latch", p3 as blocks,l.name
    from v$session_wait sw,v$latch l
    where event not like '%SQL%' and event not like '%rdbms%'
    and event not like '%mon%' and sw.p2 = l.latch#(+);

    --求等待事件及其热点对象

    col owner format a18
    col segment_name format a32
    col segment_type format a32
    select owner,segment_name,segment_type
    from dba_extents
    where file_id = &file_id and &block_id between block_id
    and block_id + &blocks - 1;

    --综合以上两条sql,同时显示latch及热点对象(速度较慢)

    select sw.sid,event,l.name,de.segment_name
    from v$session_wait sw,v$latch l,dba_extents de
    where event not like '%SQL%' and event not like '%rdbms%'
    and event not like '%mon%' and sw.p2 = l.latch#(+) and sw.p1 = de.file_id(+) and p2 between de.block_id and de.block_id + de.blocks - 1;

    --如果是非空闲等待事件,通过等待会话的sid可以求出该会话在执行的sql

    select sql_text
    from v$sqltext_with_newlines st,v$session se
    where st.address=se.sql_address and st.hash_value=se.sql_hash_value
    and se.sid =&wait_sid order by piece;


    6)v$process

    根据session id可以查到操作系统进程的信息:
    select * from v$process where addr in (select paddr from v$session where sid=&sid );
    spid字段是操作系统进程号,可以用来进行 kill -9 spid 这么一个操作。

    可以找到 unix命令 top 出来的最耗cpu资源的pid,根据pid最耗资源的sql:
    SELECT /*+ ORDERED */
    sql_text
    FROM v$sqltext a
    WHERE (a.hash_value, a.address) IN (
    SELECT DECODE (sql_hash_value,
    0, prev_hash_value,
    sql_hash_value
    ),
    DECODE (sql_hash_value, 0, prev_sql_addr, sql_address)
    FROM v$session b
    WHERE b.paddr = (SELECT addr
    FROM v$process c
    WHERE c.spid = '&pid'))
    ORDER BY piece ASC
    /


    7)v$transaction

    根据session id可以查到当前session正在执行的事务信息:
    select * from v$transaction where addr in (select taddr from v$session where sid=&sid );

    看下面这两个字段可以看到事务进行到什么程度了:
    USED_UBLK
    NUMBER
    Number of undo blocks used

    USED_UREC
    NUMBER
    Number of undo records used

    重复查询这两个值,可以看到变化,可以估计事务的进度,尤其是长时间的回滚操作,当这两个值为0,回滚也就完成了。


    8)v$sort_usage

    temp表空间的使用情况,当temp表空间变得巨大的时候,根据session_addr可以得到session id,根据sqladdr和sqlhash可以得到正在执行的sql:
    select se.username,se.sid,su.extents,su.blocks*to_number(rtrim(p.value)) as Space,tablespace,segtype,sql_text
    from v$sort_usage su,v$parameter p,v$session se,v$sql s
    where p.name='db_block_size'
    and su.session_addr=se.saddr
    and s.hash_value=su.sqlhash
    and s.address=su.sqladdr
    order by se.username,se.sid;


    9)v$sysstat
    所有instance的统计信息

    转载于:https://www.cnblogs.com/xiaoyu1997/p/6257257.html

    展开全文
  • Oracle管理oracle归档日志管理 oracle归档日志管理 在Oracle中数据一般是存放在数据文件中不过数据库与Oracle最大的区别之一就是数据库可以在数据出错的时候进行恢复这个也就是我们常见的Oracle中的重做日志REDOFILE...
  • Oracle 开启归档日志以及关闭归档日志
                   

    racle数据库可以运行在2种模式下:归档模式(archivelog)和非归档模式(noarchivelog) 
    归档模式可以提高Oracle数据库的可恢复性,生产数据库都应该运行在此模式下,归档模式应该和相应的备份策略相结合,只有归档模式没有相应的备份策略只会带来麻烦。

    本文简单介绍如何启用和关闭数据库的归档模式。

    1.归档日志开启准备工作: 
    1.进入dos窗口—>>> 菜单键+R,进入 运行 界面,输入cmd 
    2.登录 sqlplus,—>> 方法: sqlplus/nolog,切忌:不要输入sqlplus/noarchivelog; 加上 分隔符 ;, 这样进入的sqlplus的命令参数帮助 
    3.登入管理员—>> 方法: conn/as sysdba; 
    4.开启归档日志 
    4.1 shutdown immediate; –关闭数据库 
    4.2 startup mount; – 打开数据库 
    4.3 alter database archivelog;—开启归档日志 
    4.4 alter database open;–开启数据库 
    4.5 archive log list; – 查看归档日志是否开启 
    开启状态: 
    数据库日志模式 存档模式 
    自动存档 启用 
    存档终点 USE_DB_RECOVERY_FILE_DEST 
    最早的联机日志序列 49 
    下一个存档日志序列 51 
    当前日志序列 51

    5.关闭归档日志 
    5.1 shutdown immediate; 
    5.2 startup mount; 
    5.3 alter database noarchivelog; 
    5.4 alter database open; 
    5.5 archive log list ;–查看归档日志是否关闭 
    数据库日志模式 非存档模式 
    自动存档 禁用 
    存档终点 USE_DB_RECOVERY_FILE_DEST 
    最早的联机日志序列 49 
    当前日志序列 51

    归档日志开启语句:

    Microsoft Windows [版本 6.1.7601]版权所有 (c) 2009 Microsoft Corporation。保留所有权利。C:\Users\Administrator>sqlplus/nologSQL*Plus: Release 11.2.0.1.0 Production on 星期三 622 11:14:30 2016Copyright (c) 1982, 2010, Oracle.  All rights reserved.SQL> conn/as sysdba; 已连接。SQL> **shutdown immediate;**数据库已经关闭。已经卸载数据库。ORACLE 例程已经关闭。SQL>    startup mount;ORACLE 例程已经启动。Total System Global Area 1071333376 bytesFixed Size                  1375792 bytesVariable Size             679477712 bytesDatabase Buffers          385875968 bytesRedo Buffers                4603904 bytes数据库装载完毕。SQL> alter database  archivelog;数据库已更改。SQL> alter database open;数据库已更改。SQL> archive log list;数据库日志模式            存档模式自动存档             启用存档终点            USE_DB_RECOVERY_FILE_DEST最早的联机日志序列     49下一个存档日志序列   51当前日志序列           51---归档日志的关闭SQL> shutdown immediate;数据库已经关闭。已经卸载数据库。ORACLE 例程已经关闭。SQL> startup mount;ORACLE 例程已经启动。Total System Global Area 1071333376 bytesFixed Size                  1375792 bytesVariable Size             679477712 bytesDatabase Buffers          385875968 bytesRedo Buffers                4603904 bytes数据库装载完毕。SQL> alter database noarchivelog;数据库已更改。SQL> alter database open;数据库已更改。SQL> archive log list;数据库日志模式             非存档模式自动存档             禁用存档终点            USE_DB_RECOVERY_FILE_DEST最早的联机日志序列     49当前日志序列           51SQL>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    问题总结:1. 直接进入就执行 ,   SQL> shutdown immediate;   ORA-01012: not logged on   解决方法:   先登录 管理员权限 , 语句:conn/as sysdba;2. 执行 开启归档日志提示错误:   SQL> conn/as sysdba;   已连接。   SQL> alter database archivelog;   alter database archivelog     *   第 1 行出现错误:   ORA-01126: 数据库必须已装载到此实例并且不在任何实例中打开   解决方法:    在开启归档日志之前,先执行关闭数据库链接:shutdown  immediate 或者shutdown normal    (2)执行 startup mount;      (3)执行 alter database archivelog
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    资料参考:http://www.eygle.com/archives/2004/10/oracle_howtoeci.html

               

    再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

    展开全文
  • 原创转载请注明地址归档日志:非活动的重做日志,用来保存所有的重做历史记录。什么时候写归档日志:当数据库处于archivelog模式并重做日志切换的时候,后台进程ARCH会启动将重做日志的内容完整的保存到归档日志中。...

    原创转载请注明地址

    归档日志:非活动的重做日志,用来保存所有的重做历史记录。

    什么时候写归档日志:当数据库处于archivelog模式并重做日志切换的时候,后台进程ARCH会启动将重做日志的内容完整的保存到归档日志中。

    日志操作模式:

    NOARCHIVELOG模式不保留重做日志记录的历史,只能保护例程失败不能保护介质失败。

    特点:

    LGWR进程写日志时候覆盖原先的重做日志内容

    如果日志内容被覆盖,只能恢复到过去完整备份的点

    执行数据库备份时候,必须关闭数据库

    执行备份时候,必须备份所有数据文件和控制文件

    ARCHIVELOG模式保留重做日志记录的历史,不仅能保护例程失败而且可以保护介质失败。

    特点:

    出现数据文件丢失损坏,可以防止数据丢失。

    数据库处于open状态的时候,也可以备份数据库

    出现数据文件损坏的时候可以在Open状态下进行恢复

    执行数据库恢复的时候,可以进行不完整恢复,基于(SCN,时间点,日志序列号)等等

    选择:如果数据库用于生产环境并且数据变化频繁应该采用ARCHIVELOG模式

    查看数据库的日志模式:

    SQL> SELECT LOG_MODE FROM V$DATABASE;

    LOG_MODE

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

    ARCHIVELOG

    显示归档日志信息:

    SQL> archive log list

    Database log mode        Archive Mode

    Automatic archival         Enabled

    Archive destination        USE_DB_RECOVERY_FILE_DEST

    Oldest online log sequence     18

    Next log sequence to archive   20

    Current log sequence             20

    SQL> col name format a40

    SQL> select name,sequence#,first_change# from v$archived_log;--显示归档日志信息

    NAME                                              SEQUENCE#          FIRST_CHANGE#

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

    /home/oracle_11/app/flash_recovery_area/ 13            989430

    ORCL/archivelog/2014_03_07/o1_mf_1_13_9k

    m0lbfq_.arc

    /home/oracle_11/app/flash_recovery_area/ 14         1017107

    ORCL/archivelog/2014_04_24/o1_mf_1_14_9o

    l713oz_.arc

    /home/oracle_11/app/flash_recovery_area/ 15         1049472

    ORCL/archivelog/2014_04_28/o1_mf_1_15_9o

    wmkc6r_.arc

    NAME                                              SEQUENCE#          FIRST_CHANGE#

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

    /home/oracle_11/app/flash_recovery_area/ 16         1073533

    ORCL/archivelog/2014_04_29/o1_mf_1_16_9o

    z8143l_.arc

    /home/oracle_11/app/flash_recovery_area/ 17         1098869

    ORCL/archivelog/2014_05_04/o1_mf_1_17_9p

    dcvm77_.arc

    /home/oracle_11/app/flash_recovery_area/ 18         1124400

    ORCL/archivelog/2014_05_05/o1_mf_1_18_9p

    NAME                                              SEQUENCE#          FIRST_CHANGE#

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

    gnc6gx_.arc

    /home/oracle_11/app/flash_recovery_area/ 19         1158501

    ORCL/archivelog/2014_05_05/o1_mf_1_19_9p

    h2d9d9_.arc

    SQL>select destination from v$archive_dest;--归档日志位置

    (注意:oracle10默认是把存档终点设置为USE_DB_RECOVERY_FILE_DEST,所以归档日志默认是保存在oracle系统的闪回恢复区(Flash recovery area)的。

    默认的db_recovery_file_dest是2G,由于归档日志太大,撑满了闪回恢复区,启动数据报ORA-00257错误,

    所以一般建议将存档终点修改为操作系统的适当目录。)

    改变数据库归档模式:

    SHUTDOWN IMMEDIATE

    STARTUP MOUNT

    ALTER DATABASE ARCHIVELOG|NOARCHIVELOG

    ALTER DATABASE OPEN

    手动归档:

    ALTER DATABASE ARCHIVELOG MANUAL

    ALTER SYSTEM ARCHIVELOG ALL|CURRENT

    配置归档日志进程 :ALTER SYSTEM SET LOG_ARCHIVE_MAX_PROCESSES=3(默认进程数目为2,

    一般不需要修改该参数,Oracle会根据归档情况自动启动额外的归档进程)

    配置归档日志位置:默认归档日志位于db_recovery_file_dest 缺省为$ORACLE_BASE/flash_recovey_area

    配置1-2个:

    ALTER SYSTEM SET LOG_ARCHIVE_DEST='路径';

    ALTER SYSTEM SET LOG_ARCHIVE_duplex_DEST='路径';

    配置多个:

    ALTER SYSTEM SET LOG_ARCHIVE_DEST='';

    ALTER SYSTEM SET LOG_ARCHIVE_duplex_DEST='';

    ALTER SYSTEM SET LOG_ARCHIVE_DEST_1='location=路径'

    ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='location=路径'

    ALTER SYSTEM SET LOG_ARCHIVE_DEST_3='location=路径'

    ALTER SYSTEM SET LOG_ARCHIVE_DEST_4='service=standby'

    ( 对于远程归档位置,SERVICE选项需要指定远程数据库的网络服务名(在tnsnames.ora文件中配置))

    归档日志命名格式

    设置LOG_ARCHIVE_FORMAT参数,Unix下的缺省设置为LOG_ARCHIVE_FORMAT=%t_%s_%r.dbf

    %s: 日志序列号:

    %S: 日志序列号(带有前导)

    %t: 重做线程编号.

    %T: 重做线程编号(带有前导)

    %a: 活动ID号

    %d: 数据库ID号

    %r RESETLOGS的ID值.

    alter system set log_archive_format = 'arch_%t_%s_%r.arc';

    展开全文
  • 开启归档日志SQL>shutdown immediate;SQL>startup mount;SQL>alter database flashback on;SQL>alter database archivelog;其它开启关闭方式alter database open; 打开数据库。archive log list; 查看...

    开启归档日志

    SQL>shutdown immediate;

    SQL>startup mount;

    SQL>alter database flashback on;

    SQL>alter database archivelog;

    其它开启关闭方式

    alter database open;  打开数据库。

    archive log list; 查看是否开启了归档模式

    archive log start(stop);   开启(停止)归档模式

    关闭归档日志

    SQL>shutdown immediate;

    SQL>startup mount;

    SQL>alter database flashback off;

    SQL>alter database noarchivelog;

    SQL>alter database open;

    删除归档日志,并没有删除归档方式,只是删除了oracle的记录信息

    rman target sys/password@SID

    RMAN> list archivelog all;

    RMAN> crosscheck archivelog all;

    RMAN> delete expired archivelog all; --中间会提示确认,输入"yes"即可

    RMAN>exit

    sqlplus 登录oracle

    SQL>select * FROM v$recovery_file_dest;

    如列space_used值为0说明归档日志已删除

    之后去oracle闪回恢复区手动删除ORACLE实例下的归档日志

    展开全文
  • 一般情况下,数据库安装时选择的是默认NOARCHIVELOG模式。如果要开启ARCHIVELOG模式,则需要为归档日志路径设置初始化参数。 归档日志路径可以配置一个也可以配置多个。路径可以是本地路径,如...
  • 如何解决“归档日志已满问题” 问题描述:所用数据库为Oracle10g ,模式为归档模式,oracle 系统默认的归档空间为2G,由于日志过多,空间写满,数据库的redo文件不能归档,而出现oracle数据库挂起的问题。 oem打开...
  • 归档日志默认是存放在系统的快速恢复区中,但快恢复区不只是存放归档日志,默认数据库的备份也会存放在快速恢复区,因此若不另指定归档日志与数据库备份文件存放目录,在开启归档后,快速恢复区会很快被撑满,对...
  • 1.打开归档日志sqlplus / as sysdbasql> shutdown immediate;sql> startup mount; #打开控制文件,不打开数据文件sql> alter database archivelog; #将数据库切换为归档模式sql> alter database open; #...
  • 频繁产生归档日志处理报告2017年10月27日,客户数据库突然间频繁产生大量归档日志,导致数据库hang住,影响现场生产!由于oracle归档日志一般由dml语句产生,所以增加太快应该是dml太频繁。首先查询以下每小时连接...
  • 在默认情况下,oracle数据库是在非归日志档模式中创建的,在非归档日志模式中,进行日志切换时会直接重写redo log,如果此时数据文件因为介质失败被损坏,则数据库恢复时会丢失掉被重写的数据;在归档日志模式下,...
  • 归档日志默认是存放在系统的快速恢复区中,但快恢复区不只是存放归档日志,默认数据库的备份也会存放在快速恢复区,因此若不另指定归档日志与数据库备份文件存放目录,在开启归档后,快速恢复区会很快被撑满,对...
  • oracle归档日志文件路径设置2012-05-2315:37:42|分类:oracle|标签:oraclelog_archive_dest|举报|字号订阅1:首先查看是否是归档模式运行archiveloglist命令(必须以sys身份运行)运行结果如下;2:通过上面的信息可以...
  • 手工rm删除归档日志后,备份归档日志的时候会报错找不到删除的归档日志,crosscheck archivelog all和delete expired archivelog all后,备份归档日志不再报错 ...
  • Oracle归档日志与非归档日志的切换及路径设置 Oracle可以将联机日志文件保存到多个不同的位置,将联机日志转换为归档日志的过程称之为归档。相应的日志被称为归档日志。 一、归档日志 是联机重做日志组文件的...
  • 听说过还原(restore)数据库,表空间及数据库文件,使用归档日志恢复(recover)数据库,表空间,数据库文件。咦,还有还原归档日志这一说法呢?没错,可能我们忽略了还原归档日志这一个过程,原因是还原归档日志通常...
  • 当ORACLE 归档日志满了后,将无法正常登入ORACLE,需要删除一部分归档日志才能正常登入ORACLE。   一、首先删除归档日志物理文件,归档日志一般都是位于archive目录下,AIX系统下文件格式为“1_17884_667758186....
  • Connect internal only,until freed一看这个提示,就知道归档日志又满了,空间不够。昨天刚清理了归档日志,为啥今天又满了,就很奇怪。看了下日志,才知道有人在删除了大量的日志数据,导致归档暴增。现在sqplus进...
  • delete archivelog all将会毫无保留的删除所有的归档日志(在控制文件中有相应记录的)1、delete archivelog all将会毫无保留的删除所有的归档日志(在控制文件中有相应记录的)2、归档日志的信息被记录在控制文件之中,...
  • *一、归档日志[archive log]对日志组中的一个日志文件进行归档,如果该组其中一个损坏,则另一个可用的日志将会被归档对于归档模式的日志切换,当日志归档完成后,下一个日志才能被覆盖或重新使用自动归档功能如开启,则...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,428
精华内容 4,171
关键字:

归档日志