备份与恢复--一个表空间能否被多个数据库同时打开?
一个表空间能否被多个数据库同时打开?我也来试试。这个问题其实是来自论坛上的一个帖子:http://www.itpub.net/showthread.php?s=&threadid=658187。参考:http://yangtingkun.itpub.net/post/468/228632[@more@]SQL> alter tablespace users read only;Tablespace altered.SQL> select tablespace_name,status from dba_tablespaces;TABLESPACE_NAME STATUS------------------------------ ---------SYSTEM ONLINEUNDOTBS1 ONLINESYSAUX
备份与恢复--nologging表无法恢复
对于采用NOLOGGING方式创建的表,由于系统不产生重做日志,因此即使Oracle处于归档模式下也无法恢复表中的数据。[@more@]SQL> create table jglu.test_recover 2 tablespace test 3 as 4 select * from dba_tables;Table created.SQL> alter tablespace test offline;Tablespace altered.SQL> host cp /u01/backup/test02.dbf /u01/app/oracle/oradata/orclSQL> recover tablespace test;Media recovery complete.SQL> alter tablespace test online;Tablespace altered.SQL> select count(*) from jglu.test_rec
备份与恢复--跨越resetlogs的恢复
在10g之前,一般情况下是无法利用RESETLOGS操作之前的备份进行数据库的恢复的。特定条件下10g前的恢复可参考:http://yangtingkun.itpub.net/post/468/59092,恢复过程已比较复杂。10g中oracle提供了跨越resetlogs恢复的可能,下面就这项新功能做了下测试.[@more@]先进行一次全备份。[oracle@rhel131 ~]$ rman target /Recovery Manager: Release 10.2.0.1.0 - Production on Mon Jan 19 00:47:58 2009Copyright (c) 1982, 2005, Oracle. All rights reserved.connected to target database: ORCL (DBID=1203373630)RMAN> backup data
备份与恢复--重新控制文件数据字典和控制文件不一致的恢复
在执行恢复后,应该检查数据库的alert文件,看是否出现控制文件中的数据文件名称和数据字典中数据文件名称无法一一对应的现象。这篇文章描述通过RESETLOGS方式打开数据库时,如果发现不一致情况及解决方法。[@more@]如果是利用备份的控制文件,除了数据文件的新增和删除以外,不会出现不一致的情况。这种不一致的情况更多的是出现在手工重建控制文件过程中。SQL> select tablespace_name,status from dba_tablespaces;TABLESPACE_NAME STATUS------------------------------ ---------SYSTEM O
备份与恢复--利用备份的控制文件恢复
如果全部控制文件丢失,但是包含以前控制文件的备份,这时可以利用备份的控制文件进行恢复,不过在恢复后需要以RESETLOGS方式打开数据库。如果重做日志文件可用则可以完全恢复,如缺少重做日志文件,则只能进行不完全恢复。[@more@]下面模拟一下完全恢复的情况:SQL> alter database backup controlfile to '/u01/backup/control01.bak';Database altered.SQL> select * from jglu.a; ID---------- 1 2SQL> insert into jglu.a values(3);1 row created.SQL> commit;Commit complete.SQL> alter sy
备份与恢复--从备份的归档日志中恢复数据
在恢复过程中,Oracle利用归档日志进行恢复,默认情况下,Oracle会在归档日志的产生目录来寻找归档日志文件。如果在恢复时发现归档日志被备份并从归档目录删除,则Oracle在恢复过程中无法找到指定的归档日志文件。[@more@]SQL> alter tablespace users offline;Tablespace altered.备份当前的归档日志SQL> host cp /u01/app/oracle/admin/orcl/archive/*.* /u01/backup/archive移除当前的归档日志SQL> host rm /u01/app/oracle/admin/orcl/archive/*.*用备份的datafile替换当前的SQL> host cp /u01/backup/users01.dbf /u01/a
10g修改归档日志路径的问题
总结了一下10g修改归档路径的方法,跟自己想像中的还是有点差别的,凡事都要测试一遍才能保证是正确的。[@more@]修改归档日志的路径有两种方法:1.用LOG_ARCHIVE_DEST 和LOG_ARCHIVE_DUPLEX_DEST参数。2.用LOG_ARCHIVE_DEST_n 参数在10g中,LOG_ARCHIVE_FORMAT比以前多个了%r参数,记录resetlogs的ID,以便可以容易的恢复过去的incarnation.如不指定此参数,默认为%t_%s_%r.dbf。下面试试这两种方法的异同1.先看看b_recovery_file_dest和log_archive_dest并存会有什么问题。log_archive_dest='/u01/app/oracle/admin/orcl/archive'*.db_re
备份与恢复--重建控制文件后数据文件损坏的恢复
恢复办法知用于:控制文件重建后的数据文件损坏前提条件:归档模式,有完整的归档日志和重建控制文件前的数据文件方法:将以前备份的文件拷贝过来,做一次recover就行了[@more@]重建控制文件之前的归档日志。SQL> SELECT RECID, NAME, FIRST_TIME FROM V$ARCHIVED_LOG;RECID NAME FIRST_TIM----- ------------------------------------------------------------------------------------------ --------- 1 /u01/app/oracle/flash_recovery
备份与恢复--重建控制文件
恢复办法适用于: 控制文件全部丢失且没有备份前提条件: 数据库如果是干净的关闭的,就可以用noresetlogs方式打开数据库,否则用resetlogs打开。方法: 如果在最后一次数据库结构修改后使用了ALTER DATABASE BACKUP CONTROLFILE TO TRACE NORESETLOGS命令备份了创建控制文件的脚本,则可以直接用TRACE文件中的脚本进行控制文件的重建。 如果使用ALTER DATABASE BACKUP CONTROLFILE TO TRACE NORESETLOGS命令之后又进行了数据库结构的修改,则需要手工编辑TRACE文件中的脚本,来反映出数据库最后的修改。 如果是使用的ALTER DATABA
备份与恢复--数据文件损坏或丢失
恢复办法适用于: 数据文件损坏或丢失,且损坏或丢失的数据文件没有备份。前提条件: 数据库为archive模式,且保留着所有的从这个表空间建立起到现在的归档日志。方法: 首先建立一个新的空数据文件,然后利用完全的归档日志来恢复表空间中的数据。[@more@]SQL> archive log list;Database log mode Archive ModeAutomatic archival EnabledArchive destination USE_DB_RECOVERY_FILE_DESTOldest online log sequence 4Next log sequence to archive 6Current log sequence
Conventional Path Export和Direct Path Export
exp时direct=y的作用[@more@]Conventional Path Export和Direct Path Export从Oracle7的release7.3开始,Oracle开始在exp工具中提供两种方法导出表的数据:Direct Path导出和Conventional Path导出。通过exp的参数Direct来判断选用那种导出方式。这个参数有两个值Y/N,如果指定为Y,则表明exp是使用Direct Path的模式导出数据,指定为N,表明数据库是用Conventional Path的模式导出数据的。如果不明确指定direct的值,默认是N,也就是用Conventional Path的模式导出数据一、两种导出的模式在导出的原理上是存在差别的。Ø C
表和索引分步imp时可能会遇到的问题
表和索引分步imp时,如表上有主键约束时就要注意了,导入表时不要同时导入约束,约束待每二步和索引同时建立才能保证索引的名字是正确的。[@more@]SQL> conn eric/ericConnected.SQL> create table t(2 id number,3 constraint pk_t primary key(id) using index (create index ind_t_id on t(id))4 );Table created.SQL> SELECT CONSTRAINT_NAME, INDEX_NAME FROM USER_CONSTRAINTS WHERE TABLE_NAME = 'T';CONSTRAINT_NAME INDEX_NAME------------------------------ ------------------------------PK_T IND_T_IDSQL> inse
exp/imp时应注意JOB是否正确
exp/imp时的确应该注意JOB是否正确。不过还好,我们的数据库一般的用户都没有JOB,只有一个上面有,还是记录一下。http://yangtingkun.itpub.net/post/468/40426[@more@][oracle@rhel131 ~]$ sqlplus / as sysdbaSQL*Plus: Release 10.2.0.1.0 - Production on Thu Jan 8 09:18:29 2009Copyright (c) 1982, 2005, Oracle. All rights reserved.Connected to:Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - ProductionWith the Partitioning, OLAP and Data Mining optionsSQL> grant connect,resource to a identified
10g的MAX、MIN的bug
http://yangtingkun.itpub.net/post/468/5764310.2.0.2已fix这个bug了10.2.0.2 4458790 + ORA-6502 selecting MAX/MIN into a CHAR variable in PLSQL[@more@]10.2.01时max,min时的一个bug,回想起在YYII 数据库升级到10G后我们所有程序员一起修改后台程序,将变量值都改到varchar2(4000)或char(4000)来解决这个问题。其实当时有更好的办法就是yangtingkun提到的:SQL> DECLARE2 V_RESULT CHAR(6);3 BEGIN4 SELECT CAST(MAX(NAME) AS CHAR(6)) INTO V_RESULT FROM TEST;5 DBMS_OUTPUT.PUT_LINE(V_RESULT);6 END;7 /
Oracle Database Internals FAQ
http://www.orafaq.com/faqdbain.htm[@more@]Oracle Database Internals FAQ$Date: 26-Apr-2002 $$Revision: 1.02 $$Author: Frank Naudé $ WARNING: This FAQ is for informational purposes only. Check with Oracle Support before using the information below. What is the difference between locks, latches, enqueues and semaphores? Where can one get a list of all hidden Oracle parameters? What is a database EVENT and how does one set it? What database events can be set? How can one dump internal database stru
shutdown之前的好习惯(zt)
shutdown之前的好习惯[@more@]今天看到的OTN文档375935.1,讲的时候为什么shutdown immediate有时候会hang住。其中一个原因是因为在shutdown immediate前有大的transaction需要rollback,只能等待事务回滚完毕,数据库达到一致的状态,才能顺利shutdown.因此,shutdown数据库之前最好察看一下是否有大的transaction在运行。select sum(used_ublk) from v$transaction;如果没有心思等待而执行了shutdown abort,则在再次启动数据库时候,startup时要做rollback回滚操作,仍然需要很多时间。长短取决于要回滚的事务的大小。10g> select *
solaris 10 disksuite usage
根据官方文档做了一下disksuite,记录一下!参考文档:http://docs.sun.com/app/docs/doc/806-3205?l=en[@more@]1、在VMware的Summary View界面选择Edit virtual machine settings,add一个新hard disk,选择IDE方式,确定添加后在Devices中会看到多出一块Hard Disk 2(IDE 0:1)。进入系统后,执行devfsadm命令,系统检测新增加的设备,这种方法不需要reboot,很好.2.由于metadb不能安装在已使用过的分区上,所以就要在第一块磁盘上化出部分空间做为放metadb的分区,一般是从swap分区中分出部分空间来.步骤大致如下: 2.1. 修改/etc/vfstab文件
Oracle常用dump命令
Oracle常用dump命令,记录一下备查。[@more@]Oracle常用dump命令,记录一下备查。一.Memory Dumps1).Global AreaALTER SESSION SET EVENTS ‘immediate trace name global_area level n’;1 包含PGA2 包含SGA4 包含UGA8 包含indrect memory2).Library CacheALTER SESSION SET EVENTS ‘immediate trace name library_cache level n’;1 library cache统计信息2 包含hash table histogram3 包含object handle4 包含object结构(Heap 0)3).Row CacheALTER SESSION SET EVENTS ‘immediate trace name row_cache level n’;1 row cache统计信
备份恢复原理的实践
看到warehouse的精华,做了点实验,记录一下。http://www.itpub.net/thread-1065138-1-1.html[@more@]checkpoint_change#记录在不同的地方,当checkpoint完成后,这几个地方的checkpoint_change#就会更新为一致,如出现不一致的情况下,就需要进行恢复,先看看哪些地方存储着checkpoint_change#SQL> alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';Session altered.SQL> set linesize 1000SQL> alter system checkpoint;System altered.--controlfile记录的checkpoint_change#SQL> select checkpoint_change# from
undo的初步研究
看深入浅出时做的一些实验,算是了解一个大概了吧。[@more@]Session 1:SQL> select * from emp; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7369 SMITH CLERK 7902 17-DEC-80 800 20 7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30 7521 WARD SALESMAN 7698 22-FEB-81 1250