我先来一个,刚刚解决的问题。警告跟踪文件内容:
Completed: ALTER DATABASE OPEN
Fri Sep  3 19:54:07 2004
SMON: Parallel transaction recovery tried
Fri Sep  3 19:59:03 2004
ORACLE Instance orcl - Can not allocate log, archival required
Fri Sep  3 19:59:03 2004
ARCH: Connecting to console port...
Thread 1 cannot allocate new log, sequence 164
All online logs needed archiving
  Current log# 3 seq# 163 mem# 0: /oracle/oradata/orcl/redo03.log数据库挂起。。其实这样的问题,只是自己心急了些,解决问题的时候要定下心来
想一想到底前面自己对数据库做了什么,最最重要的是分析警告日志文件。分析结论,可能有如下原因
  1.数据库是否处于归档模式,如果是,就要看重组日志文件的数目或大小是否
    合理,如果在LGWR进程在进行日志切换的时候,下一个重做日志文件正在
    归档,LGWR进程将等待归档完毕后才能写入下一个重做日志文件,在这期间
    数据库将会挂起,这重情况,就得增加更多的重做日志组,避免LGWR进程出现
    等待状态。
  2.检查归档的目标是否可用(设置了强制归档目标),如果不可用数据库将会
    停止运行。还有就是归档目的的硬盘空间是足够的。  3.检查设置归档选择项是否正确,上面的错误就是因为没有设置正确而导致的。正常的改变数据库非归档模式到归档模式应是:
  1.关闭数据库
  2.在初始化参数中设置与归档相关的初始化参数。
  3.启动实例,并加载数据库(startup mount)
  4.使用下面语句切换到归档模式
    sql>alter  database archivelog;
   5.打开数据库
      sql>alter database open;

解决方案 »

  1.   

    如何启动ARCHIVELOG模式?(比较具体)
    http://www.oradb.net/dba/dba_035.htm
      

  2.   

    限制特定IP访问数据库以前有文档说增加或修改protocol.ora文件, 
    在9i中真正起作用的是sqlnet.ora文件,我们修改sqlnet.ora其实是最好最快的方法。 
      
    在sqlnet.ora中增加如下部分 
    ----------------------------- 
    #### 来自 protocol.ora 的属性 #### 
      
    tcp.validnode_checking=yes  
      
    #允许访问的IP 
    tcp.invited_nodes=(ip1,ip2……)  
      
    #禁止访问的IP 
    tcp.excluded_nodes=(ip1,ip2……) 
      
    之后重新启动监听器即可 
      
    需要注意的地方: 
    1、tcp.invited_nodes与tcp.excluded_nodes都存在,以tcp.invited_nodes为主 
    2、一定要许可或不要禁止服务器本机的IP地址,否则通过lsnrctl将不能启动或停止监听,因为该过程监听程序会通过本机的IP访问监听器,而该IP被禁止了,但是通过服务启动或关闭则不影响。 
    3、修改之后,一定要重起监听才能生效,而不需要重新启动数据库 
    4、任何平台都可以,但是只适用于TCP/IP协议
      

  3.   

    直接修改LISTENER.ORA文件里面的  Host = <新机器名>,然后重新启动监听服务即可lsnrctl start
      

  4.   

    直接修改LISTENER.ORA文件里面的  Host = <新机器名>,然后重新启动监听服务即可lsnrctl start
      

  5.   

    支持!
    如何启用审计功能:
    修改数据库INIT.ORA文件中的audit_trail = true(注意把它前面的注释符#去掉)
    重新启动数据库
    DOS下执行
    SVRMGRL
    CONNECT INTERNAL/ORACLE
    SHUTDOWN IMMEDIATE
    STARTUP
    然后用DBA用户登陆SQL*PLUS
    CONNECT SYSTEM/MANAGER
    创建一个审计:
    SQL> audit create table by access whenever successful;审计已成功。
    SQL> select sessionid SID,userid USID,action# ACT,obj$name OBNAME,TIMESTAMP# TIME FROM SYS.AUD$; SID   USID   ACT   OBNAME   TIME
    -----  ------ ---- -------  ------
    202   SYSTEM    1     A     2002-08-24 00:59:01说明审计已经启动。
      

  6.   

    监听正常启动后,过了一下就自动STOP可以尝试修改INIT<SID>.ORA文件里面#mts_dispatchers="(protocol=TCP)"注释掉
      

  7.   

    sqlplus中refcursor的使用16:00:10 SQL> VARIABLE v_cur REFCURSOR;
    16:03:21 SQL> BEGIN
    16:03:26   2  OPEN :v_cur FOR SELECT * FROM TB;
    16:03:44   3  END;
    16:03:47   4  /PL/SQL 过程已成功完成。已用时间:  00: 00: 00.93
    16:03:48 SQL> PRINT v_cur;COL1       COL2                           COLNEW
    ---------- ------------------------------ --------------------
    A          aaa                            aaa
    A          aab                            aab
    A          aac                            aac
    B          bba                            bba
    B          bbb                            bbb
    B          bbc                            bbc
    B          bbd                            bbd
    C          ccc                            ccc
    c          TEMP                           TEMP
    d          ddd                            ddd
    e          eee                            eee已选择11行。已用时间:  00: 00: 00.63
    16:03:58 SQL> 
      

  8.   

    支持一把! :)字段操作
    添加:
    alter table tbl_name add(addcol varchar2(10);
    修改:
    alter table tbl_name modify(col1 varchar2(20);
    删除:
    alter table tbl_name drop(col1);
    改名:
    ALTER TABLE tbl_name RENAME COLUMN col1 TO col2设置字段的默认值: 
    ALTER TABLE table_name modify col_name default sysdate;
    -----------------------------------------------------------------过程简介
    过程参数有三种: 输入,输出,输入和输出.
    如下内容在 SQL*Plus 运行通过.
    SQL>set serveroutput on -- 显示输出
    SQL>CREATE OR  REPLACE  PROCEDURE  prc_test(strIn VARCHAR2,strOut OUT VARCHAR2,strInOut IN OUT VARCHAR2)
    IS
    BEGIN
         strOut := 'This is Output item';
         strInOut := ' in and out item';     
         dbms_output.put_line('输入参数: ' || strIn);
         dbms_output.put_line('输出参数: ' || strOut);
         dbms_output.put_line('输入|出参数: ' || strInOut);
    END prc_test; --  建立过程SQL>var strTest1 varchar2(20); -- 定义bind变量
    SQL>var strTest2 varchar2(20); -- 定义bind变量
    SQL>exec prc_test('input',:strTest1,:strTest2); -- 调用过程
    -----------------------------------------------------------------Oracle 对象命令参考
    Table           tab_
    View            view_ 
    Function        fnc_
    Procedure       prc_
    Trigger trg_
    Package pkg_
    Type trp_
    Package spec spc_
    Package body bdy_
    Type spec       tps_
    Type body       tpb_
    Java source jse_
    -----------------------------------------------------------------使用 MD5 算法
    SQL>var v_test varchar2(32);
    SQL> begin
      2  :v_test:=RawToHex(UTL_RAW.Cast_To_Raw(DBMS_OBFUSCATION_TOOLKIT.MD5(input_string=>'ABC')));
      3  end;
      4  /
    -----------------------------------------------------------------
      

  9.   

    btw: 大家想更快捷解决Oracle问题,就应把问题尽量描述清楚,及简明扼要` :)
    如:
    错误类:
        操作系统: win2000 pro sp2
        数据库: oracle 8i.1.6
        错误信息: ORA--xxxxxx学习类:
        关于过程的学习,in 与 out 的使用.    <- 简单明了~
        如果代码过长的话,请尽量简短。      <- 不然的话,看代码就晕了 :)
      

  10.   

    机器异常断电,oracle不能正常启动,可以mount,不能open。数据库未备份过。
    错误码:
    At startup, the database will mount, but gives the following errors at open: 
     ORA-00312: "online log %s thread %s: '%s'" 
         Cause: This message reports the filename for details of another message. 
        Action: Other messages will accompany this message. See the 
                associated messages for the appropriate action to take. 
     ORA-00322: "log %s of thread %s is not current copy" 
         Cause: Check of log file header at database open found that an online log  
                appears to be an incorrectly restored backup. 
        Action: Restore correct file or reset logs. 解决方法描述:
    首先检查ORACLE_HOME 和ORACLE_SID在startup参数中是否正确,如果不正确重新startup。Recover the loss of an inactive, online redo log group. SQL>ALTER DATABASE CLEAR LOGFILE 'filename'; If there is more than one LOGFILE in the redo log group then you must 
    specify all the log files. For example, the following fails: SVRMGR> alter database clear logfile '/vobs/oracle/dbs/log3.log'; 
    alter database clear logfile '/vobs/oracle/dbs/log3.log' 

    ORA-1514: error in log specification: no such log 
    ORA-1517: log member: '/vobs/oracle/dbs/log3.log But, specifying all the log files in the group works: 
    SVRMGR> ALTER DATABASE CLEAR LOGFILE ('/vobs/oracle/dbs/t4.log','/vobs/oracle/; 
    Statement processed. 介绍一个意外情况,如果上面的方法不成功,数据库还是不能open,采用recover,restore都不成功,说明logfile可能已经损坏,数据库打开需要做一致性检查,所以不能正常打开。因为数据库未作过备份,为了尽可能地减少损失,采用打开数据库,然后立刻导出数据的方法。
    oracle有一个不推荐的方法,可以使数据库在不进行一致性检查的方式下打开数据库。
    做法:
    1。为保险起见,将数据库的系统表空间,数据文件,控制文件均做一次备份:copy。
    2。在初始化配置文件中(init.ora)加上:
    _allow_resetlogs_corruption=true
    _corrupted_rollback_segments=(将所有rollback_segments=(...)的内容加到这里)
    将rollback_segments=(...)前加上#
    3。startup mount
    recover database until cancel;
    cancel
    alter database open resetlogs;
    此时数据库已经可以打开了,请立刻将数据export出来,然后重新安装oracle,重新建立database,再将数据import。
    注意:这种方法属于数据库的不完全恢复,最后提交的sql可能会丢失,毕竟能够尽可能地减少损失,可以试试。
    以上操作我均做过测试。
      

  11.   

    我也用ORACLE,能不能先告诉我为什么选择ORACLE而不是IBM的DB2或者其它啊?
      

  12.   

    穿过防火墙连接数据库 
    [在服务器端的SQLNET.ORA应类似
    SQLNET.AUTHENTICATION_SERVICES= (NTS) 
    NAMES.DIRECTORY_PATH= (TNSNAMES, ONAMES, HOSTNAME) 
    TRACE_LEVEL_CLIENT = 16 
    注册表的HOME0加[HKEY_LOCAL_MACHINE] 
    USE_SHARED_SOCKET=TRUE
      

  13.   

    支持限制特定IP访问数据库
    以前有文档说增加或修改protocol.ora文件, 
    在9i中真正起作用的是sqlnet.ora文件,我们修改sqlnet.ora其实是最好最快的方法。 在sqlnet.ora中增加如下部分 
    ----------------------------- 
    #### 来自 protocol.ora 的属性 #### tcp.validnode_checking=yes #允许访问的IP 
    tcp.invited_nodes=(ip1,ip2……) #禁止访问的IP 
    tcp.excluded_nodes=(ip1,ip2……) 之后重新启动监听器即可 需要注意的地方: 
    1、tcp.invited_nodes与tcp.excluded_nodes都存在,以tcp.invited_nodes为主 
    2、一定要许可或不要禁止服务器本机的IP地址,否则通过lsnrctl将不能启动或停止监听,因为该过程监听程序会通过本机的IP访问监听器,而该IP被禁止了,但是通过服务启动或关闭则不影响。 
    3、修改之后,一定要重起监听才能生效,而不需要重新启动数据库 
    4、任何平台都可以,但是只适用于TCP/IP协议
      

  14.   

    下面是我遇到的问题并且在网上找到的解决资料,分享一下。
    错误现象: 
    因误操作,数据库中某一数据文件被误删,
    控制面板的Oracle相关服务显示已启动,但用SQL*Plus无法连接,
    显示以下错误
    ORA-01033: ORACLE initialization or shutdown in progress模拟现象: create tablespace test datafile
    'c:\test.ora' size 5M
    AUTOEXTEND ON NEXT 1M MAXSIZE UNLIMITED
    default storage (initial 128K next 1M pctincrease 0)
    /关闭所有服务stop.batnet stop "OracleWebAssistant0"
    net stop "OracleOraHome81TNSListener"
    net stop "OracleServiceORADB"shutdown在操作系统中删除test.ora文件重新启动服务start.batnet start "OracleWebAssistant0"
    net start "OracleOraHome81TNSListener"
    net start "OracleServiceORADB"服务里OracleServiceORADB显示已启动,但用SQL*Plus无法连接,
    显示ORA-01033: ORACLE initialization or shutdown in progress
    解决方法:先让该数据文件脱机,就可以打开数据库
    C:\>svrmgrl
    svrmgrl>connect internal
    svrmgrl>shutdown
    svrmgrl>startup mount--ARCHIVELOG模式命令,文件名要大写
    svrmgrl>alter database datafile 'C:\TEST.ORA' offline;--NOARCHIVELOG模式命令
    svrmgrl>alter database datafile 'C:\TEST.ORA' offline drop;svrmgrl>alter database open;
    --查询数据文件联、脱机状态
    SQL> select file#,name,status from v$datafile;SQL> drop tablespace test;表空间已丢弃。
      

  15.   

    测试环境9ISQL> select server from v$session where audsid=USERENV('SESSIONID');SERVER
    ---------
    DEDICATED查询到的当前会话所使用的服务进程类型,查询结果为DEDICATED说明为当前用户提供服务的是一个专用服务进程。如果当前用户不是DBA用户,则同时也说明数据库正处于专用服务器模式。一般我都是使用 dbca 设置服务器操作模式。
      

  16.   

    同意chanet(牧师)
    大家把问题的大概在题目上表示清楚
    这样既有利于快速的解决问题,也有利于整理faq。借此祝 飘兄 以及oracle版xdjm们仲秋节快乐!