我先来一个,刚刚解决的问题。警告跟踪文件内容:
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;
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;
解决方案 »
- 第一次用plsql developer,头晕!给点提示!
- oracle存储过程中的多表查询优化
- spfile和pfile
- 找出两个表中差异的记录。
- job如何做到定时运行,并且在系统重启后,也能做到定时运行
- 一个关于登陆oracle server manager得简单问题
- 高分求解动态SQL
- 数据库无法创建:“ORA-02231:??????ALTER DATABASE??”急急急!
- ~~~~~口令的问题,敬请关注!!!!~~~~~~~~~~~
- 如何创建一个表,使得它的一个字段id具有自动加1的功能??
- 在ORACLE 8.1.7中如何将一个用户数据库复制成另一个用户数据库.
- 本公司打算购买Oracle数据库,谁有类似的招标书
http://www.oradb.net/dba/dba_035.htm
在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协议
如何启用审计功能:
修改数据库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说明审计已经启动。
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>
添加:
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 /
-----------------------------------------------------------------
如:
错误类:
操作系统: win2000 pro sp2
数据库: oracle 8i.1.6
错误信息: ORA--xxxxxx学习类:
关于过程的学习,in 与 out 的使用. <- 简单明了~
如果代码过长的话,请尽量简短。 <- 不然的话,看代码就晕了 :)
错误码:
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可能会丢失,毕竟能够尽可能地减少损失,可以试试。
以上操作我均做过测试。
[在服务器端的SQLNET.ORA应类似
SQLNET.AUTHENTICATION_SERVICES= (NTS)
NAMES.DIRECTORY_PATH= (TNSNAMES, ONAMES, HOSTNAME)
TRACE_LEVEL_CLIENT = 16
注册表的HOME0加[HKEY_LOCAL_MACHINE]
USE_SHARED_SOCKET=TRUE
以前有文档说增加或修改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协议
错误现象:
因误操作,数据库中某一数据文件被误删,
控制面板的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;表空间已丢弃。
---------
DEDICATED查询到的当前会话所使用的服务进程类型,查询结果为DEDICATED说明为当前用户提供服务的是一个专用服务进程。如果当前用户不是DBA用户,则同时也说明数据库正处于专用服务器模式。一般我都是使用 dbca 设置服务器操作模式。
大家把问题的大概在题目上表示清楚
这样既有利于快速的解决问题,也有利于整理faq。借此祝 飘兄 以及oracle版xdjm们仲秋节快乐!