10g release 2的新特性--记录DML错误日志
当一个DML运行的时候,如果遇到了错误,不管在这之前成功了多少条记录,这条语句会整个回滚。以前解决这个问题的办法只有单独的执行每条语句,或者用FORALL的SAVE EXCEPTIONS子句。不过在10g release2中可以用LOG ERRORS子句来记录INSERT,UPDATE,MERGE,DELETE语句的错误记录。[@more@]1.语法:LOG ERRORS [INTO [schema.]table] [('simple_expression')] [REJECT LIMIT integer|UNLIMITED]INTO子句是要指定一个记录error log的表,如不指定则会以ERR$开头加表名的前25位字符。simple_expression是用来方便标识错误的记录的字符串REJECT L
同步vmware时间(ZT)
vmware时间同步问题是一个难题,根据本人使用vmware经验,vmware的时间同步可以有如下几个方法:[@more@]转自:http://space6212.itpub.net/post/12157/450838一、用VMWARE TOOLS同步时间注意:如果是用复制文件的方法创建虚拟系统,最好是在复制完文件之后分别安装VMWARE TOOLS。1) 安装vmware tools在 VMware 控制台上,以 root 用户身份登录。1. 单击 VM,然后选择 Install VMware Tools。2. rac1 — 虚拟机:单击 Install。3. 双击桌面上的 VMware Tools 图标。4. cdrom:双击 VMwareTools-1.0.1-29996.i386.rpm。5. 完成系统准备:单
索引的一点认识(ZT)
转自thomas zhang的杂货铺。http://tomszrp.itpub.net/post/11835/68822[@more@]在使用Oracle的过程,我们就不能考虑性能和SQL优化,而正确的使用索引是优化SQL中的很关键的因素.如果发现Oracle在有索引的情况下而没有使用索引,这并不是Oracle的优化器出错。在有些情况下Oracle确实会选择全表扫描(Full Table Scan),而非索引扫描(Index Scan)。比如: 1、表未做分析或者分析信息太老,导致 Oracle 判断失误.2、根据表拥有的记录和数据块数,实际上全表扫描要比索引扫描更快.对第1种情况最常见的例子,是以下这样的count语句: select cou
用vmware体验Oracle10g的ASM数据库
vmware版本:vmware server console 1.0.5数据库版本:10.2.0.1OS版本:rhel4 u4参考http://www.oracle-base.com/articles/10g/AutomaticStorageManagement10g.php[@more@]数据库是之前就安装好的,准备增加几个ASM设备来体验一下ASM管理的数据文件1.先用vmware的vdiskmanager工具创建了六个磁盘C:Program FilesVMwareVMware Server>vmware-vdiskmanager.exe -c -s 100Mb -a lsilogic -t 2 D:Virtual Machinessingle RHEL4_31asmasm01.vmdkUsing log file C:DOCUME~1L5MLOCALS~1Tempvmware-L5Mvdiskmanager.logCreating monolithic prea
10g跨小版本的expdp/impdp表空间迁移(一)
由于工作关系,需要将10.2.0.4的表空间迁移到10.2.0.1的数据库上,先试了一个跨小版本表空间迁移的可行性。[@more@]1.确定自包含表空间集合。自包含表空间集合是指具有关联关系的表空间集合。当搬移表空间是,如果在两个表空间之间存在关联关系,则必须同时搬移这两个表空间。通过执行包DBMS_TTS的过程TRANSPORT_SET_CHECK可以完成表空间集合是否为自包含的检测。执行完该过程后,系统将违反子包含表空间集合规则的信息写入到临时表transport_set_violations。SQL> exec sys.dbms_tts.transport_set_check('VIP2006');PL/SQL procedure
备份与恢复--一个表空间能否被多个数据库读写?
继续上一篇文章的测试,第一个数据库采用只读方式打开USERS表空间,然后在目标数据库通过重建数据库恢复的方式加载这个表空间,加载成功后,下面尝试在源数据库中将表空间以读写方式打开。[@more@]SQL> SELECT NAME FROM V$DATABASE;NAME---------ORCLSQL> alter tablespace users read write;alter tablespace users read write*ERROR at line 1:ORA-01256: error in locking database file 4ORA-01110: data file 4: '/u01/app/oracle/oradata/orcl/users01.dbf'再看看目标库的情况SQL> SELECT NAME FROM V$DATABASE;NAME------
备份与恢复--一个表空间能否被多个数据库同时打开?
一个表空间能否被多个数据库同时打开?我也来试试。这个问题其实是来自论坛上的一个帖子: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 /