oracle 01033问题解决和临时文件

来源:互联网 发布:电信网络诈骗情形 编辑:程序博客网 时间:2024/06/05 21:16

数据库服务器也不堪连续的意外关闭,出现启动异常了。错误代码ORA-01033。

操作步骤如下,因为数据库服务器有多个实例,所以一开始先设置的当前数据库实例名。

数据库实例关闭后的第一次启动目的是查看是什么原因引起不能正常启动,提示出那个数据文件有问题。

明确那个文件后,使用startup mount启动,进行处理。

使用recover datafile进行处理时,一般都可以恢复成功。

若不成功,则比较复杂,如果有数据备份则可通过备份恢复,否则无法进行恢复,可使用alter database datafile 文件名 offline drop语句,将文件设置为离线。此文件中的数据则不能被加载。

通过alter database open语句启动数据库,若无错误数据库恢复正常,若还存在不能加载的文件则继续按照上述方式进行处理,直至完成。

C:\>set ORACLE_SID=ORCL1C:\>sqlplus "/ as sysdba"SQL*Plus: Release 10.2.0.4.0 - Production on 星期五 7月 9 09:17:36 2010Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.连接到:Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit ProductionWith the Partitioning, OLAP, Data Mining and Real Application Testing optionsSQL> shutdown immediateORA-01109: 数据库未打开已经卸载数据库。ORACLE 例程已经关闭。SQL> startupORACLE 例程已经启动。Total System Global Area 1258291200 bytesFixed Size                  2065408 bytesVariable Size             385879040 bytesDatabase Buffers          855638016 bytesRedo Buffers               14708736 bytes数据库装载完毕。ORA-01115: 从文件 10 读取块时出现 IO 错误 (块 # 2338895)ORA-01110: 数据文件 10:'G:\ORACLE\ORACLE_TABLESPACE\HBCENTADM\HBCENTADM_DATA.DBS'ORA-27070: 异步读取/写入失败OSD-04016: 异步 I/O 请求排队时出错。O/S-Error: (OS 23) 数据错误(循环冗余检查)。SQL> shutdown immediateORA-01109: 数据库未打开已经卸载数据库。ORACLE 例程已经关闭。SQL> startup mountORACLE 例程已经启动。Total System Global Area 1258291200 bytesFixed Size                  2065408 bytesVariable Size             385879040 bytesDatabase Buffers          855638016 bytesRedo Buffers               14708736 bytes数据库装载完毕。SQL> recover datafile 10ORA-00283: 恢复会话因错误而取消ORA-12801: 并行查询服务器 P000 中发出错误信号ORA-01115: 从文件 10 读取块时出现 IO 错误 (块 # 2338895)ORA-01110: 数据文件 10:'G:\ORACLE\ORACLE_TABLESPACE\HBCENTADM\HBCENTADM_DATA.DBS'ORA-27SQL> select name, log_mode from v$database;NAME      LOG_MODE--------- ------------ORCL1     NOARCHIVELOGSQL> alter database datafile 'G:\ORACLE\ORACLE_TABLESPACE\HBCENTADM\HBCENTADM_DATA.DBS' offline drop;数据库已更改。SQL> alter database open;数据库已更改。

Create directory让我们可以在Oracle数据库中灵活的对文件进行读写操作,极大的提高了Oracle的易用性和可扩展性。
其语法为:
CREATE [OR REPLACE] DIRECTORY directory AS 'pathname';

本案例具体创建如下:
            create or replace directory exp_dir as '/tmp';

目录创建以后,就可以把读写权限授予特定用户,具体语法如下:
GRANT READ[,WRITE] ON DIRECTORY directory TO username;

例如:
            grant read, write on directory exp_dir to eygle;

此时用户eygle就拥有了对该目录的读写权限。

让我们看一个简单的测试:
            SQL> create or replace directory UTL_FILE_DIR as '/opt/oracle/utl_file';            Directory created.            SQL> declare            2    fhandle utl_file.file_type;            3  begin            4    fhandle := utl_file.fopen('UTL_FILE_DIR', 'example.txt', 'w');            5    utl_file.put_line(fhandle , 'eygle test write one');            6    utl_file.put_line(fhandle , 'eygle test write two');            7    utl_file.fclose(fhandle);            8  end;            9  /            PL/SQL procedure successfully completed.            SQL> !            [oracle@jumper 9.2.0]$ more /opt/oracle/utl_file/example.txt            eygle test write one            eygle test write two            [oracle@jumper 9.2.0]$

类似的我们可以通过utl_file来读取文件:
            SQL> declare            2    fhandle   utl_file.file_type;            3    fp_buffer varchar2(4000);            4  begin            5    fhandle := utl_file.fopen ('UTL_FILE_DIR','example.txt', 'R');            6            7    utl_file.get_line (fhandle , fp_buffer );            8    dbms_output.put_line(fp_buffer );            9    utl_file.get_line (fhandle , fp_buffer );            10    dbms_output.put_line(fp_buffer );            11    utl_file.fclose(fhandle);            12  end;            13  /            eygle test write one            eygle test write two            PL/SQL procedure successfully completed.

可以查询dba_directories查看所有directory.
            SQL> select * from dba_directories;            OWNER                          DIRECTORY_NAME                 DIRECTORY_PATH            ------------------------------ ------------------------------ ------------------------------            SYS                            UTL_FILE_DIR                   /opt/oracle/utl_file            SYS                            BDUMP_DIR                      /opt/oracle/admin/conner/bdump            SYS                            EXP_DIR                        /opt/oracle/utl_file

可以使用drop directory删除这些路径.
            SQL> drop directory exp_dir;            Directory dropped            SQL> select * from dba_directories;            OWNER                          DIRECTORY_NAME                 DIRECTORY_PATH            ------------------------------ ------------------------------ ------------------------------            SYS                            UTL_FILE_DIR                   /opt/oracle/utl_file            SYS                            BDUMP_DIR                      /opt/oracle/admin/conner/bdump
原创粉丝点击