zoukankan      html  css  js  c++  java
  • ORA-01262,oracle启动报错,及Oracle启动原理

    一、错误状态

    SQL> startup

    ORA-01261: Parameter db_recovery_file_dest destination string cannot be translated

    ORA-01262: Stat failed on a file destination directory

    Linux Error: 2: No such file or directory

    SQL> show parameter db_recovery_file_dest

    ORA-01034: ORACLE not available

    Process ID: 0

    Session ID: 0 Serial number: 0

    二、解决思路

    是指定的目录不存在?还是没权限?照网上的方法创建文件夹还是不行。

    最后根据原理发现数据库启动是由spfile,pfile等决定的,检查相关文件内容

    由于启动方式是以spfile决定的,检查spfile定义的文件夹是否都创建了,有权限了。

    错误原因:

    最后在spfileorcl.ora文件里查看,发现其中一个文件夹在该指定目录不存在,

    db_recovery_file_dest的文件件夹丢失,文件夹不存在。

    解决办法:

    在该目录下(/home/oracle/app/oradata) 创建对应的文件或文件夹

    重新启动 startup,启动成功!

    三、Oracle启动和停止相关知识点

    3.1Oracle数据库启动

    数据库的启动

    数据库启动使用startup命令,它有三种情况
    第一种:不带参数,启动数据库实例并打开数据库,以便用户使用数据库,在多数情况下,使用这种方式!
    第二种:带nomount参数,只启动数据库实例,但不打开数据库,在你希望创建一个新的数据库时使用,或者在你需要这样的时候使用!
    第三种:带mount参数,在进行数据库更名的时候采用。这个时候数据库就打开并可以使用了!

    lsnrctl start 启动监听器

    查看oracle 启动状态:

    SQL> select status from v$instance; (showdown | nomount | mount | open)




    3.2 Oracle数据库停止


    shutdown有四个参数,四个参数的含义如下:


    Normal 需要等待所有的用户断开连接
    Immediate 等待用户完成当前的语句
    Transactional 等待用户完成当前的事务
    Abort 不做任何等待,直接关闭数据库


    normal需要在所有连接用户断开后才执行关闭数据库任务,所以有的时候看起来好象命令没有运行一样!在执行这个命令后不允许新的连接
    immediate在用户执行完正在执行的语句后就断开用户连接,并不允许新用户连接。
    transactional 在拥护执行完当前事物后断开连接,并不允许新的用户连接数据库。
    abort 执行强行断开连接并直接关闭数据库。


    前三种方式不回丢失用户数据。第四种在不的已的情况下,不建议采用!



    3.3 pfile, spfile

    1、  PFILE和SPFILE定义

    PFILE:文本参数文件(TEXT PARAMETER FILE)又叫静态参数文件,ASCII文本文件(可以直接编辑)

    SPFILE:服务器参数文件(SERVER PARAMETER FILE)。二进制文件(不可以直接编辑,db启动后通过sql命令在线修改。)

    Oracle启动过程中选择参数文件的顺序:

    从Oracle9i开始,spfile被引入Oracle数据库,Oracle首选spfile<ORACLE_SID>.ora文件作为启动参数文件;如果该文件不存在,Oracle选择spfile.ora文件;如果前两者都不存在,Oracle将会选择init<ORACLE_SID>.ora文件;如果以上三个文件都不存在,Oracle将无法创建和启动instance。

    Oracle在启动过程中,会在特定的路径中寻找参数文件,在Unix/Linux下的路径为$ORACLE_HOME/dbs目录,在WINDOWS上的路径为$ORACLE_HOME/database目录。

    关于参数文件的详细说明:

     新建一个数据库以后,默认启动文件是/dbs目录下的spfile,,执行create pfile from spfile以后,重启数据库,执行show parameter spfile会显示value为空,说明这时不是以spfile启动的,这时执行create pfile from spfile,会出现错误,因为现在没有使用spfile,这里用命令create spfile frompfile ,再重启数据库,发现启动参数为spfile。在刚安装完oracle以后,spfile和pfile会出 现在/dbs目录下,这时启动参数为spfile,执行create pfiel from spfile 以后,会在/database目录下产生一个pfile,这时重启数据库,会以/database目录下的pfile启动,重启后,执行create spfile from pfile,会在/database下产生一个spfile文件,这时重启数据库会以/database目录下的spfile启动。也就是说oracle会先找/database目录下的spfile和pfile,再找/dbs目录下的spfile和pfile。

    2、   存放位置,查询v$parameter视图,方式有两种。

    1)SQL> select vp.VALUE from v$parameter vp where vp.NAME = 'spfile';

    VALUE

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

    F:/ORACLE/PRODUCT/10.2.0/DB_3/DBS/SPFILEFFTEST.ORA

    2)SQL> show parameter spfile;

    NAME   TYPE   VALUE

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

    spfile   string   F:/ORACLE/PRODUCT/10.2.0/DB_3/DBS/SPFILEFFTEST.ORA

    实际上,以上两种方式是一样的。方式2)是方式1)的封装语句,从告警文件中可以发现,show parameter其实是执行了方式1)的语句。

    一般保存位置:

    Spfile位置:$/oracle/product/10.2.0/db_1/dbs/spfile<sid>.ora

    对于Windows其位置是:$ORACLE_HOME/database/spfile<SID>.ora

    pfile位置:$oracle/oracle/product/10.2.0/admin/<sid>/init.ora.xxxxx

    在$ORACLE_BASE/admin/<sid>/pfile下,你很可能可以看到一个类似这样init.ora.1 92003215317]名字的文件,这就是初始化参数文件,只是跟上了时间戳。对于Oracle920 ,缺省的就使用spfile启动,但是这个spfile不是凭空而来,而是根据这个文件创建而来 ,你可以去掉这个长后缀,就是标准的pfile文件了。

    3、   判断db系统以pfile还是spfile启动?

    1)   用show   parameter   spfile命令,如果Value为空,则表示使用以pfile启动db,未创建spfile。

    SQL> show parameter spfile;

    SQL> select name, value from v$parameter where name = 'spfile';

    --以下是变种方式:

    SQL> SELECT DECODE(value, NULL, 'PFILE', 'SPFILE') "Init File Type"

           FROM sys.v_$parameter WHERE name = 'spfile';

    2)   查询v$spparameter视图。如果isspecified里有true,表明用spfile进行了指定配置。如果全为false,表明用pfile启动。

    SQL> Select isspecified, count(*) from v$spparameter group by isspecified;

     ISSPECIFIED   COUNT(*)

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

    TRUE                23

    FALSE              236

    3)   通过create pfile来鉴别,如果当前使用的不是spfile,则相应格式的create pfile会产生错误。

    查看是否使用SPFILE,可以在数据库启动后,使用create spfile命令验证。

    SQL> create spfile from pfile='d:/asdf.ora';

    create spfile from pfile='d:/asdf.ora'

    *

    ERROR 位于第 1 行:

    ORA-32002: 无法创建已由例程使用的 SPFILE

    4、   Spfile与pfile相互创建

    1)   从pfile创建spfile的方法。

    如果以pfile启动,想切换成spfile启动。则重建spfile,然后重启DB即可。

    create spfile from pfile;

    SQL> create spfile from pfile;

     Done

     SQL> create spfile from pfile='F:/oracle/product/10.2.0/admin/fftest/pfile/init.ora.215201120126';

     Done

     SQL> connect fftest/fftest@fftest

     SQL> show parameter spfile;

     NAME    TYPE  VALUE

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

    spfile       string      F:/ORACLE/PRODUCT/10.2.0/DB_3/DATABASE/SPFILEFFTEST.ORA

    2)   从spfile创建pfile

    SQL> show parameter spfile

    NAME      TYPE        VALUE

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

    spfile      string

    SQL> create spfile from pfile='?/dbs/init<sid>.ora'

    对于pfile,你可以用文本编辑器直接手工编辑一个,也可以使用create pfile命令 从spfile创建,如:CREATE PFILE='C:/PFILE/MYPFILE.ORA' FROM   SPFILE='D:/SPFILE/MYSPFILE.ORA',或者从当前实例所使用的spfile创建:create  pfile='c:/pfile/mypfile.ora' from spfile。

    5、   参数文件的修改方法

    1) 分为手动修改和在线修改。

    Pfile:手动修改用于修改pfile,直接用文本编辑打开pfile修改。要使用修改生效,须重启数据库。

    Spfile:在线修改是在数据库运行时,用alter system命令进行修改,命令如下(详细的命令 语句请参考oracle官方参考文档):

    sql>alter system set job_queue_processed=50 scope=MEMORY

    注意,scope=MEMORY表示应用范围,取值如下:

    SPFILE:修改只对SPFILE有效,不影响当前实例,需要重启数据库才能生效;

    MEMORY:修改只对内存有效,即只对当前实例有效,且立即生效,但不会保存到SPFILE, 数据库重启后此配置丢失;

    BOTH:顾名思义,包含以上两种,立即生效,且永久生效。

      对于ALTER SYSTEM的参数修改命令,请注意以下几点:

    第一,如果当前实例使用的是pfile而非spfile,则scope=spfile或scope=both会产生错误;

    第二,如果实例以pfile启动,则scope的默认值为MEMORY, 若以spfile启动,则默认值为 BOTH;

    第三,可以使用DEFERRED表示所作修改只适用于将来的会话,还可以使用COMMENT写入注 释,如:ALTER SYSTEM SET JOB_QUEUE_PROCESSES=50 SCOPE=BOTH DEFERRED COMMENT=" 注释"

    第四,删除参数的方法如下:ALTER SYSTEM SET PARAMETER='';

  • 相关阅读:
    onmouseover事件
    ref:ThinkPHP Builder.php SQL注入漏洞(<= 3.2.3)
    ref:mysql命令大全
    ref:mysql丢失密码,如何修改?
    ref:学习笔记 UpdateXml() MYSQL显错注入
    转:[译]CSV 注入:被人低估的巨大风险
    转:深入剖析 JavaScriptCore
    转:Exploiting Electron RCE in Exodus wallet
    转:LNMP虚拟主机PHP沙盒绕过/命令执行(php exec命令被禁之后)
    转:Ubuntu16.04下配置php+vscode+xdebug开发环境
  • 原文地址:https://www.cnblogs.com/yihr/p/9245851.html
Copyright © 2011-2022 走看看