zoukankan      html  css  js  c++  java
  • oracle命令2 和一致性关闭、非一致性关闭

    启动SQL*Plus语法
    sqlplus [username/password][@server] [as sysdba|sysoper] ,其中username/password如果不输人,SQL*Plus会在后续提示输入
    [oracle@localhost ~]$ sqlplus "as sysdba"

    SQL*Plus: Release 11.2.0.1.0 Production on Wed Nov 15 18:11:47 2017

    Copyright (c) 1982, 2009, Oracle. All rights reserved.

    Enter user-name: sys
    Enter password:

    Connected to:
    Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
    With the Partitioning, OLAP, Data Mining and Real Application Testing options

    SQL>

    更换用户的语法是
    SQL>CONN[ECT] [username/password][@server] [as sysdba|sysoper]

    SQL> conn sys/oracle as sysdba
    Connected.
    SQL> show user # 查看当前用户
    USER is "SYS"
    SQL>

    设置显示参数:
    SQL> show pagesize
    pagesize 14 # 从顶部标题只页结束之间的行数
    SQL> set pagesize 18
    SQL> show newpage
    newpage 1 # 设置一页的空行的数量
    SQL> set newpage 2
    SQL> show line # 设置一行中个,所显示的最多的字符总数
    linesize 80
    SQL> set linesize 100
    SQL>
    SQL> col file_name for a50 #指定列的输出格式: 50个固定字符长度,如果字段的实际长度超过50个字符,那么会换下一行显示


    查看SCN:
    查看当前SCN:
    SQL> select current_scn from V$database; # 查看当前SCN
    CURRENT_SCN
    -----------
    1005440

    日志中SCN信息:
    SQL> select * from V$log; # 查看日志中SCN信息,
    GROUP# THREAD# SEQUENCE# BYTES BLOCKSIZE MEMBERS ARCHIV STATUS FIRST_CHANGE# FIRST_TIME NEXT_CHANGE# NEXT_TIME
    ---------- ---------- ---------- ---------- ---------- ---------- ------ -------------------------------- ------------- ------------ ------------ ------------
    1 1 4 52428800 512 1 NO CURRENT 994343 15-NOV-17 2.8147E+14
    2 1 2 52428800 512 1 NO INACTIVE 977891 15-NOV-17 981630 15-NOV-17
    3 1 3 52428800 512 1 NO INACTIVE 981630 15-NOV-17 994343 15-NOV-17
    SQL>
    SQL> select group#,SEQUENCE#,FIRST_CHANGE# FIRST_TIME,NEXT_CHANGE# NEXT_TIME from V$log order by 2; # 查看日志中SCN,只查看主要部分。
    GROUP# SEQUENCE# FIRST_TIME NEXT_TIME
    ---------- ---------- ---------- ----------
    2 2 977891 981630
    3 3 981630 994343
    1 4 994343 2.8147E+14
    SQL>
    GROUP#, 日志组编号
    SEQUENCE# ,重做日志的序列号,不能重复,永远向前。
    FIRST_TIME,该日志组,记录的第一条重做日志SCN
    NEXT_TIME,该日志组,记录的最后一条重装日志信息的SCN。2.8147E+14表示还在写入过程,现在不确定终点在哪。
    STATUS , 当前日志状态,CURRENT表示正在写。

    控制文件中的SCN:
    这个SCN是执行检查点的SCN,夜间检查点SCN。代表这个SCN的时刻,内存和硬盘数据是同步的。
    SQL> select a.file#,b.file_name,a.checkpoint_change#
    from V$datafile a ,dba_data_files b
    where a.file#=b.file_id
    order by 1; # 查看控制文件中的SCN
    FILE# FILE_NAME CHECKPOINT_CHANGE#
    ---------- -------------------------------------------------- ------------------
    1 /data/oracle/oradata/orcl/system01.dbf 1007735
    2 /data/oracle/oradata/orcl/sysaux01.dbf 1007735
    3 /data/oracle/oradata/orcl/undotbs01.dbf 1007735
    4 /data/oracle/oradata/orcl/users01.dbf 1007735
    5 /data/oracle/oradata/orcl/example01.dbf 1007735
    SQL>
    查看checkpoint:
    SQL> select checkpoint_change# from v$datafile where rownum=1;
    CHECKPOINT_CHANGE#
    ------------------
    1007735
    SQL>
    SQL> alter system checkpoint; # 手动执行检查点
    System altered.
    在查看控制控制文件中SCN,发现已变化,(与内存中SCN同步)。

    DBW进程只有在checkpoint进程调用时,才会执行,commint命令,不会同步内存与硬盘中的数据。
    3s写操作或写满1/3日志,是写日志缓冲区数据的日志写进程操作, 所以只用commint了(写到了redo log file),用户数据就一定不会丢失。

    数据文件SCN:
    数据文件很大,文件头部就记录了SCN,不用查找整个数据文件。
    SQL> select a.file#,b.file_name,a.checkpoint_change#
    from V$datafile_header a ,dba_data_files b
    where a.file#=b.file_id
    order by 1;
    FILE# FILE_NAME CHECKPOINT_CHANGE#
    ---------- -------------------------------------------------- ------------------
    1 /data/oracle/oradata/orcl/system01.dbf 1007018
    2 /data/oracle/oradata/orcl/sysaux01.dbf 1007018
    3 /data/oracle/oradata/orcl/undotbs01.dbf 1007018
    4 /data/oracle/oradata/orcl/users01.dbf 1007018
    5 /data/oracle/oradata/orcl/example01.dbf 1007018
    SQL>
    查看数据文件SCN,简单点:
    SQL> select checkpoint_change# from v$datafile_header;
    CHECKPOINT_CHANGE#
    ------------------
    1007735
    1007735
    1007735
    1007735
    1007735
    SQL>

    一致性关闭: 关闭时执行了检查点,内存和硬盘数据同步,下一次开启,不需要使用联机重做日志文件对数据库进行恢复。
    非一致性关闭: 无论什么原因,关闭时,内存中脏块没有写入数据文件,内存和硬盘数据不一致,下一次开启数据库,需要通过联机重做日志文件对数据进行恢复。
    判断是否一致,就是通过上述三个SCN,日志SCN,数据文件SCN,控制文件SCN。


    模拟非一致性关闭:
    1、shutdown abort
    2、kill 进程
    3、直接关电源
    当前SCN:1008098
    checkpoint SCN:1007735 , 说明存在脏块,
    SQL> shutdown abort; # 模拟非一致性关闭:
    ORACLE instance shut down.
    SQL> startup mount; # 启动到mount:
    ORACLE instance started.
    Total System Global Area 764121088 bytes
    Fixed Size 2217264 bytes
    Variable Size 478153424 bytes
    Database Buffers 281018368 bytes
    Redo Buffers 2732032 bytes
    Database mounted.
    SQL>
    SQL> select checkpoint_change# from v$datafile where rownum=1; #查看控制文件中SCN
    CHECKPOINT_CHANGE#
    ------------------
    1007735
    SQL> select checkpoint_change# from v$datafile_header; # 查看数据文件中SCN
    CHECKPOINT_CHANGE#
    ------------------
    1007735
    1007735
    1007735
    1007735
    1007735
    SQL>
    SQL> select group#,SEQUENCE#,FIRST_CHANGE# FIRST_TIME,NEXT_CHANGE# NEXT_TIME from V$log order by 2; # 查看日志文件中SCN
    GROUP# SEQUENCE# FIRST_TIME NEXT_TIME
    ---------- ---------- ---------- ----------
    2 2 977891 981630
    3 3 981630 994343
    1 4 994343 2.8147E+14
    SQL>
    日志SCN中看不到最后具体SCN,关闭前当前SCN为1008098,远大与994343,说明还是存在脏块,当然这个判断比较牵强,还有一个判断机制:
    SQL> select file#,checkpoint_change#,last_change# from v$datafile;
    FILE# CHECKPOINT_CHANGE# LAST_CHANGE#
    ---------- ------------------ ------------
    1 1007735
    2 1007735
    3 1007735
    4 1007735
    5 1007735
    SQL>
    若一直性关闭,会在控制文件中,会在LAST_CHANGE# 记录下关闭SCN的信息; 若非一致性关闭,会在LAST_CHANGE#记录为空。
    说明此时数据库为非一致性关闭:
    打开数据库,查看日志:
    SQL> select * from v$diag_info; # 查看alert log位置
    [oracle@localhost ~]$ tail -f /data/oracle/diag/rdbms/orcl/orcl/trace/alert_orcl.log
    然后再开启数据库:
    SQL> alter database open;
    Database altered.
    SQL>
    [oracle@localhost ~]$ tail -f /data/oracle/diag/rdbms/orcl/orcl/trace/alert_orcl.log
    Beginning crash recovery of 1 threads # 需要执行恢复
    Started redo scan # 扫描日志
    Completed redo scan
    。。。。
    Thread 1: logseq 4, block 30986, scn 1028106 # 最后一条日志记录SCN为1028106,而检查点是1007735,所以就都redo log进行恢复。


    一致性关闭:
    SQL> select current_scn from V$database; #当前SCN
    CURRENT_SCN
    -----------
    1028689
    SQL>
    SQL> select checkpoint_change# from v$datafile_header; # 数据文件SCN
    CHECKPOINT_CHANGE#
    ------------------
    1028109
    1028109
    1028109
    1028109
    1028109
    SQL> select checkpoint_change# from v$datafile where rownum=1; #控制文件SCN
    CHECKPOINT_CHANGE#
    ------------------
    1028109
    SQL>
    说明存在脏块;
    SQL> shutdown immediate # 一致性关闭数据库,会自动执行检查点
    Database closed.
    Database dismounted.
    ORACLE instance shut down.
    SQL>
    SQL> startup mount
    SQL> select file#,checkpoint_change#,last_change# from v$datafile;
    FILE# CHECKPOINT_CHANGE# LAST_CHANGE#
    ---------- ------------------ ------------
    1 1029044 1029044
    2 1029044 1029044
    3 1029044 1029044
    4 1029044 1029044
    5 1029044 1029044
    LAST_CHANGE#,有SCN显示,表示为一致性关闭,且记录下了关闭的时间点SCN。
    SQL> select checkpoint_change# from v$datafile where rownum=1; #数据文件SCN
    CHECKPOINT_CHANGE#
    ------------------
    1029044
    SQL> alter database open;
    Database altered.
    SQL>

    日志显示:
    [oracle@localhost ~]$ tail -f /data/oracle/diag/rdbms/orcl/orcl/trace/alert_orcl.log
    Thread 1 opened at log sequence 5
    Current log# 2 seq# 5 mem# 0: /data/oracle/oradata/orcl/redo02.log
    Successful open of redo thread 1
    没有恢复操作;


    恢复:
    restore ,是转储,把复制的文件存储会原来的位置
    recover ,是恢复,恢复redo日志里的记录,把丢失的操作再redo一遍。通过内存和硬盘的SCN比较,来判断数据之间是否同步。

    SCN变化:
    1、时间变化,SCN就变化
    2、变化,数据库的任何一个数据变化,SCN就会变化,往上增长。
    SCN只会往前,不会往后,只会越来越大。

    每执行CKPT那一刻,内存和硬盘数据同步,这一刻一定有一个时钟对应的SCN。这个时间点,数据库是一致的。 所以,当内存和硬盘上的文件比较时,就是比较SCN,内存中SCN比较新,就认为内存和硬盘的数据不一致。

  • 相关阅读:
    node mysql
    css问题
    mac 命令
    js 严格模式
    js 数组
    sass
    js 面向对象 定义对象
    response.getWriter().write("中文");乱码问题
    读取文件并找出年龄最大的N个人-兰亭集市笔试题
    阿里巴巴暑期实习生笔试
  • 原文地址:https://www.cnblogs.com/lei2017/p/7840640.html
Copyright © 2011-2022 走看看