标签云
asm恢复 bbed bootstrap$ dul kcbzib_kcrsds_1 kccpb_sanity_check_2 kcratr_nab_less_than_odr MySQL恢复 obet ORA-00312 ORA-00704 ORA-00742 ORA-01110 ORA-01200 ORA-01555 ORA-01578 ORA-01595 ORA-600 2662 ORA-600 2663 ORA-600 3020 ORA-600 4000 ORA-600 4137 ORA-600 4193 ORA-600 4194 ORA-600 16703 ORA-600 kcbzib_kcrsds_1 ORA-600 KCLCHKBLK_4 ORA-600 kcratr_nab_less_than_odr ORA-15042 ORA-15196 ORACLE 12C oracle dul ORACLE PATCH Oracle Recovery Tools oracle加密恢复 oracle勒索 oracle勒索恢复 oracle异常恢复 ORACLE恢复 Oracle 恢复 ORACLE数据库恢复 oracle碎片 OSD-04016 YOUR FILES ARE ENCRYPTED 比特币加密文章分类
- MongoDB (1)
- MongoDB恢复 (1)
- Others (2)
- 中间件 (2)
- WebLogic (2)
- 操作系统 (112)
- 数据库 (1,880)
- DB2 (22)
- MySQL (82)
- Oracle (1,705)
- Data Guard (53)
- EXADATA (8)
- GoldenGate (24)
- ORA-xxxxx (168)
- ORACLE 12C (72)
- ORACLE 18C (6)
- ORACLE 19C (15)
- ORACLE 21C (3)
- Oracle 23ai (8)
- Oracle ASM (72)
- Oracle Bug (8)
- Oracle RAC (56)
- Oracle 安全 (6)
- Oracle 开发 (28)
- Oracle 监听 (29)
- Oracle备份恢复 (659)
- Oracle安装升级 (108)
- Oracle性能优化 (62)
- 专题索引 (5)
- 勒索恢复 (91)
- PostgreSQL (37)
- pdu工具 (7)
- PostgreSQL恢复 (13)
- SQL Server (34)
- SQL Server恢复 (14)
- TimesTen (7)
- 达梦数据库 (5)
- 达梦恢复 (3)
- 生活娱乐 (2)
- 至理名言 (11)
- 虚拟化 (2)
- VMware (2)
- 软件开发 (51)
- Asp.Net (9)
- JavaScript (12)
- PHP (2)
- 小工具 (34)
- MongoDB (1)
-
最近发表
- Firebird 损坏数据库数据抢救工具—firebirdext
- Oracle 19c 202610补丁(RUs+OJVM)-19.33
- 由于con$.con#值达到极限,触发数据库增加约束报ORA-600 12807错误
- MongoDB 离线提取工具—mongoext
- .bres勒索病毒加密数据库dmp文件可恢复
- ORA-600 krsm_mrp_rebuild_lf_list.lno_mismatch
- 记录一次0丢失的ORA-00354: 损坏重做日志块标头故障恢复
- 不当数据库恢复操作导致一个月数据丢失
- obet快速修复oracle 位图损坏块
- 不太常见的10.2.0.1的oracle redo损坏恢复
- obet forcecopy功能抢救硬件故障中的数据文件
- kcratr_nab_less_than_odr和system坏块故障处理
- 通过obet 恢复system坏块,打开数据库
- obet dbv功能完整说明
- 分享一例运行在aix上的sap系统数据库恢复过程
- OBET-Oracle Block Editor Tool使用说明
- 几乎动用了所有手段的Oracle故障恢复
- Oracle Block Edit Tool (obet) 功能增强–2026.07
- Oracle 19c 202607补丁(RUs+OJVM)-19.32
- Patch_SCN快速修复ORA-01555数据库open故障
月归档:三月 2012
找回ASM中数据文件
很多时候由于asm不能正常启动,导致数据丢失。下面提供两种方法找回asm中的数据文件
一.使用AMDU工具
AMDU是Oracle 11g里自带的一个免费的工具,用于分析ASM磁盘组的元数据以及从不能mount的磁盘组中往外抽取数据文件“NOTE:553639.1 Placeholder for AMDU binaries and using with ASM 10g”明确指出:AMDU也可用于10g,并提供了可用于10g的AMDU的各个操作系统的版本供大家下载。
1.设置LD_LIBRARY_PATH
rac1-> export LD_LIBRARY_PATH=/tmp/amdu
2.查看asm磁盘信息
rac1-> ./amdu -diskstring '/dev/raw/raw*'
amdu_2012_03_05_03_17_19/
rac1-> cd amdu_2012_03_05_03_17_19/
rac1-> ls
report.txt
rac1-> more report.txt
-*-amdu-*-
******************************* AMDU Settings ********************************
ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1
System name: Linux
Node name: rac1
Release: 2.6.9-89.0.0.0.1.ELhugemem
Version: #1 SMP Tue May 19 04:38:38 EDT 2009
Machine: i686
amdu run: 05-MAR-12 03:17:19
Endianess: 1
--------------------------------- Operations ---------------------------------
------------------------------- Disk Selection -------------------------------
-diskstring '/dev/raw/raw*'
------------------------------ Reading Control -------------------------------
------------------------------- Output Control -------------------------------
********************************* DISCOVERY **********************************
----------------------------- DISK REPORT N0001 ------------------------------
Disk Path: /dev/raw/raw23
Unique Disk ID:
Disk Label:
Physical Sector Size: 512 bytes
Disk Size: 156 megabytes
** NOT A VALID ASM DISK HEADER. BAD VALUE IN FIELD blksize_kfdhdb **
----------------------------- DISK REPORT N0002 ------------------------------
Disk Path: /dev/raw/raw11
Unique Disk ID:
Disk Label:
Physical Sector Size: 512 bytes
Disk Size: 156 megabytes
** NOT A VALID ASM DISK HEADER. BAD VALUE IN FIELD blksize_kfdhdb **
----------------------------- DISK REPORT N0003 ------------------------------
Disk Path: /dev/raw/raw32
Unique Disk ID:
Disk Label:
Physical Sector Size: 512 bytes
Disk Size: 156 megabytes
** NOT A VALID ASM DISK HEADER. BAD VALUE IN FIELD blksize_kfdhdb **
----------------------------- DISK REPORT N0004 ------------------------------
Disk Path: /dev/raw/raw31
Unique Disk ID:
Disk Label:
Physical Sector Size: 512 bytes
Disk Size: 156 megabytes
** NOT A VALID ASM DISK HEADER. BAD VALUE IN FIELD blksize_kfdhdb **
----------------------------- DISK REPORT N0005 ------------------------------
Disk Path: /dev/raw/raw12
Unique Disk ID:
Disk Label:
Physical Sector Size: 512 bytes
Disk Size: 156 megabytes
** NOT A VALID ASM DISK HEADER. BAD VALUE IN FIELD blksize_kfdhdb **
----------------------------- DISK REPORT N0006 ------------------------------
Disk Path: /dev/raw/raw2
Unique Disk ID:
Disk Label:
Physical Sector Size: 512 bytes
Disk Size: 1976 megabytes
Group Name: DATA
Disk Name: DATA_0001
Failure Group Name: DATA_0001
Disk Number: 1
Header Status: 3
Disk Creation Time: 2012/03/01 22:32:39.289000
Last Mount Time: 2012/03/05 02:10:02.771000
Compatibility Version: 0x0a100000
Disk Sector Size: 512 bytes
Disk size in AUs: 1976 AUs
Group Redundancy: 1
Metadata Block Size: 4096 bytes
AU Size: 1048576 bytes
Stride: 113792 AUs
Group Creation Time: 2012/03/01 22:32:39.221000
File 1 Block 1 location: AU 0
----------------------------- DISK REPORT N0007 ------------------------------
Disk Path: /dev/raw/raw1
Unique Disk ID:
Disk Label:
Physical Sector Size: 512 bytes
Disk Size: 3137 megabytes
Group Name: DATA
Disk Name: DATA_0000
Failure Group Name: DATA_0000
Disk Number: 0
Header Status: 3
Disk Creation Time: 2012/03/01 22:32:39.289000
Last Mount Time: 2012/03/05 02:10:02.771000
Compatibility Version: 0x0a100000
Disk Sector Size: 512 bytes
Disk size in AUs: 3137 AUs
Group Redundancy: 1
Metadata Block Size: 4096 bytes
AU Size: 1048576 bytes
Stride: 113792 AUs
Group Creation Time: 2012/03/01 22:32:39.221000
File 1 Block 1 location: AU 2
******************************* END OF REPORT ********************************
从这里可以得到信息如下:
1)只有/dev/raw/raw1和raw2是有效的asm磁盘
2)磁盘组只有DATA
3.找出数据文件信息
rac1-> ../amdu -diskstring '/dev/raw/raw*' -dump 'DATA' amdu_2012_03_05_03_19_38/ rac1-> cd amdu_2012_03_05_03_19_38/ rac1-> ls DATA_0001.img DATA.map report.txt rac1-> strings DATA_0001.img |grep DATAFILE DATAFILE DATAFILE DATAFILE DEVDB/DATAFILE/SYSTEM.256.776817753 DEVDB/DATAFILE/SYSAUX.257.776817753 DEVDB/DATAFILE/UNDOTBS1.258.776817753 DEVDB/DATAFILE/USERS.259.776817753 DEVDB/DATAFILE/UNDOTBS2.267.776817909
从这里可以得出数据文件的file号(第一位数字)
4.恢复数据文件
rac1-> ../../amdu -diskstring '/dev/raw/raw*' -extract 'DATA.259' amdu_2012_03_05_03_27_21/ rac1-> cd amdu_2012_03_05_03_27_21/ rac1-> ls -l total 5148 -rw-r--r-- 1 oracle oinstall 5251072 Mar 5 03:27 DATA_259.f -rw-r--r-- 1 oracle oinstall 6468 Mar 5 03:27 report.txt rac1-> dbv file=DATA_259.f DBVERIFY: Release 10.2.0.1.0 - Production on Mon Mar 5 03:28:00 2012 Copyright (c) 1982, 2005, Oracle. All rights reserved. DBVERIFY - Verification starting : FILE = DATA_259.f DBVERIFY - Verification complete Total Pages Examined : 640 Total Pages Processed (Data) : 15 Total Pages Failing (Data) : 0 Total Pages Processed (Index): 2 Total Pages Failing (Index): 0 Total Pages Processed (Other): 26 Total Pages Processed (Seg) : 0 Total Pages Failing (Seg) : 0 Total Pages Empty : 597 Total Pages Marked Corrupt : 0 Total Pages Influx : 0 Highest block SCN : 442362 (0.442362)
二.使用aulasm工具
1.配置ASM使用磁盘
[root@rac1 oracle]# more disk /dev/sdb1 /dev/sdb2
2.使用aulasm
[root@rac1 oracle]# ./aulasm_linux32_trial.bin
AUL : AnySQL UnLoader(MyDUL) for Oracle ASM, release 2.0.0
(C) Copyright Lou Fangxin 2011-2012 (AnySQL.net), all rights reserved.
ASM> help
SET -- set options (BLOCK_SIZE, AU_SIZE, F1B1_DISK, F1B1_AU)
OPEN -- open data file
ADD -- add disk with customized disk num (disk, path)
LIST -- list opened disks information (to)
LSAU -- list file of given AU (disk, au, count)
FILE -- list all file entries in ASM (file, [disk, au, block]).
ALIAS -- list all alias entries in ASM (file, [disk, au, block]).
EXTENT -- list or adjust variable extent (level, au, count).
FMAP -- list file extent (file, [disk, au, block], to)
DUMP -- dump file extent (file, [disk, au, block], offset, to)
COPY -- copy file to os (file, [disk, au, block], to)
QUIT/EXIT -- exit the program.
ASM> open disk
2012-03-05 03:32:48
2012-03-05 03:32:48
ASM> list
2012-03-05 03:32:49
Total Disks = 2, ausize=1048576, blksize=4096
disk size block disk name disk group disk path
===== ======== ===== ================ ============ ========================
0 3137 4096 DATA_0000 DATA /dev/sdb1
1 1976 4096 DATA_0001 DATA /dev/sdb2
f1b1disk = 0, f1b1au = 2, score=256, compat=0x0a100000
file=(1,0,2,1), disk=(2,0,2,2), alias=(6,0,2,6)
2012-03-05 03:32:49
ASM> alias
2012-03-05 03:33:15
file inc parent fstblk flag refer alias
======== ============ ====== ====== ==== ====== ==========================
-1 -1 0 0 4 1 DEVDB
-1 -1 0 1 4 2 DATAFILE
-1 -1 0 1 4 3 CONTROLFILE
-1 -1 0 1 4 4 ONLINELOG
-1 -1 0 1 4 5 TEMPFILE
-1 -1 0 1 4 6 PARAMETERFILE
-1 -1 0 1 4 7 ARCHIVELOG
256 776817753 1 2 18 -1 SYSTEM
257 776817753 1 2 18 -1 SYSAUX
258 776817753 1 2 18 -1 UNDOTBS1
259 776817753 1 2 18 -1 USERS
267 776817909 1 2 18 -1 UNDOTBS2
261 776817829 1 3 18 -1 Current
260 776817829 1 3 18 -1 Current
262 776817833 1 4 18 -1 group_1
263 776817835 1 4 18 -1 group_1
264 776817837 1 4 18 -1 group_2
265 776817841 1 4 18 -1 group_2
268 776818011 1 4 18 -1 group_3
269 776818013 1 4 18 -1 group_3
270 776818015 1 4 18 -1 group_4
271 776818017 1 4 18 -1 group_4
266 776817859 1 5 18 -1 TEMP
272 776818021 1 6 18 -1 spfile
-1 -1 1 7 4 8 2012_03_01
-1 -1 1 7 4 9 2012_03_03
-1 -1 1 7 4 10 2012_03_05
273 776818747 7 8 18 -1 thread_1_seq_2
274 776819571 7 8 18 -1 thread_1_seq_3
275 776819721 7 8 18 -1 thread_2_seq_1
276 776820331 7 8 18 -1 thread_1_seq_4
277 776992321 7 9 18 -1 thread_1_seq_5
278 776992321 7 9 18 -1 thread_2_seq_2
279 777089437 7 10 18 -1 thread_1_seq_6
2012-03-05 03:33:15
ASM> fmap file 259
2012-03-05 03:34:49
fid=259, disk=0, au=56, block=3
siz=5, ecnt=6, eeof=6, flags=17, type=12, alias=109,-1
extid disk auid cnt flg chk
========== ===== ========== ==== === ===
1 0 428 1 0 135
2 1 408 1 0 178
3 0 429 1 0 134
4 1 409 1 0 179
5 0 430 1 0 133
6 1 410 1 0 176
2012-03-05 03:34:49
ASM> copy file 259 to user_259
2012-03-05 03:35:01
2012-03-05 03:35:01
[root@rac1 oracle]# ll
total 6252
-rwxr-xr-x 1 root root 84619 Mar 6 2012 aulasm_linux32_trial.bin
-rw-r--r-- 1 root root 20 Mar 5 02:52 disk
-rw-r--r-- 1 root root 6291456 Mar 5 03:35 user_259
[root@rac1 oracle]# su - oracle
rac1-> dbv file=user_259
DBVERIFY: Release 10.2.0.1.0 - Production on Mon Mar 5 03:35:27 2012
Copyright (c) 1982, 2005, Oracle. All rights reserved.
DBVERIFY - Verification starting : FILE = user_259
DBVERIFY - Verification complete
Total Pages Examined : 640
Total Pages Processed (Data) : 15
Total Pages Failing (Data) : 0
Total Pages Processed (Index): 2
Total Pages Failing (Index): 0
Total Pages Processed (Other): 26
Total Pages Processed (Seg) : 0
Total Pages Failing (Seg) : 0
Total Pages Empty : 597
Total Pages Marked Corrupt : 0
Total Pages Influx : 0
Highest block SCN : 442362 (0.442362)
通过dbv验证,两个数据文件(文件大小有出入,可能在对待未格式化数据块上,两者处理有出入)可以基本上确定一致,证明两种方法都可以从异常的ASM中获取数据文件
三.总结与比较
1.AMDU完全免费,aulasm超过16块硬盘需要收费
2.AMDU操作相对于aulasm麻烦一点,但是整体还是可以接受
3.获取到asm中的数据文件后恢复数据内容或者open库,那都是容易的事情
如果因为磁盘头损坏太多或者其他原因,以上方法都不能实现抽取asm磁盘组中数据文件,参考:asm disk header 彻底损坏恢复
expdp中PARALLEL和DUMPFILE关系
今天有朋友在说PARALLEL设置为n(大于1),DUMPFILE为一个文件(不包含%U),会出现什么样的情况。下面通过实验来说明这个问题
1.当并发数比较大时(这里实验使用4),expdp会报ORA-39095错误
[oracle@node1 tmp]$ expdp chf/xifenfei DUMPFILE=xifenfei.dmp TABLES=t1 PARALLEL=4 Export: Release 11.2.0.3.0 - Production on Wed Mar 7 20:48:52 2012 Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved. Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production With the Partitioning, Oracle Label Security, OLAP, Data Mining, Oracle Database Vault and Real Application Testing options Starting "CHF"."SYS_EXPORT_TABLE_01": chf/******** DUMPFILE=xifenfei.dmp TABLES=t1 PARALLEL=4 Estimate in progress using BLOCKS method... Processing object type TABLE_EXPORT/TABLE/TABLE_DATA Total estimation using BLOCKS method: 5.362 GB Processing object type TABLE_EXPORT/TABLE/TABLE Processing object type TABLE_EXPORT/TABLE/INDEX/INDEX ORA-39095: Dump file space has been exhausted: Unable to allocate 8192 bytes
2.并发数较少时(实验为2),通过attach观察
2.1)执行expdp导出
[oracle@node1 tmp]$ expdp chf/xifenfei DUMPFILE=xifenfei.dmp TABLES=t1 PARALLEL=2 Export: Release 11.2.0.3.0 - Production on Wed Mar 7 20:49:15 2012 Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved. Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production With the Partitioning, Oracle Label Security, OLAP, Data Mining, Oracle Database Vault and Real Application Testing options Starting "CHF"."SYS_EXPORT_TABLE_02": chf/******** DUMPFILE=xifenfei.dmp TABLES=t1 PARALLEL=2 Estimate in progress using BLOCKS method... Processing object type TABLE_EXPORT/TABLE/TABLE_DATA Total estimation using BLOCKS method: 5.362 GB Processing object type TABLE_EXPORT/TABLE/TABLE Processing object type TABLE_EXPORT/TABLE/INDEX/INDEX . . exported "CHF"."T1" 4.647 GB 51080958 rows Processing object type TABLE_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS Processing object type TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS Master table "CHF"."SYS_EXPORT_TABLE_02" successfully loaded/unloaded ****************************************************************************** Dump file set for CHF.SYS_EXPORT_TABLE_02 is: /opt/oracle/diag/rdbms/chf/chf/trace/xifenfei.dmp Job "CHF"."SYS_EXPORT_TABLE_02" successfully completed at 20:52:23
2.2)在导出过程中,使用attach观察expdp工作情况
[oracle@node1 trace]$ expdp chf/xifenfei attach=SYS_EXPORT_TABLE_02
Export: Release 11.2.0.3.0 - Production on Wed Mar 7 20:49:38 2012
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, Oracle Label Security, OLAP, Data Mining,
Oracle Database Vault and Real Application Testing options
Job: SYS_EXPORT_TABLE_02
Owner: CHF
Operation: EXPORT
Creator Privs: TRUE
GUID: BAA7964815021C96E0438C09A8C04319
Start Time: Wednesday, 07 March, 2012 20:49:16
Mode: TABLE
Instance: chf
Max Parallelism: 2
EXPORT Job Parameters:
Parameter Name Parameter Value:
CLIENT_COMMAND chf/******** DUMPFILE=xifenfei.dmp TABLES=t1 PARALLEL=2
State: EXECUTING
Bytes Processed: 0
Current Parallelism: 2
Job Error Count: 0
Dump File: /opt/oracle/diag/rdbms/chf/chf/trace/xifenfei.dmp
bytes written: 4,096
Worker 1 Status:
Process Name: DW00
State: EXECUTING
Object Schema: CHF
Object Name: T1
Object Type: TABLE_EXPORT/TABLE/TABLE
Completed Objects: 1
Total Objects: 1
Worker Parallelism: 1
Worker 2 Status:
Process Name: DW02
State: EXECUTING
Object Schema: CHF
Object Name: T1
Object Type: TABLE_EXPORT/TABLE/TABLE_DATA
Completed Objects: 1
Total Objects: 1
Completed Rows: 16,104,279
Worker Parallelism: 1
Export> status
Job: SYS_EXPORT_TABLE_02
Operation: EXPORT
Mode: TABLE
State: EXECUTING
Bytes Processed: 0
Current Parallelism: 2
Job Error Count: 0
Dump File: /opt/oracle/diag/rdbms/chf/chf/trace/xifenfei.dmp
bytes written: 4,096
Worker 1 Status:
Process Name: DW00
State: EXECUTING
Object Schema: CHF
Object Name: T1
Object Type: TABLE_EXPORT/TABLE/TABLE
Completed Objects: 1
Total Objects: 1
Worker Parallelism: 1
Worker 2 Status:
Process Name: DW02
State: EXECUTING
Object Schema: CHF
Object Name: T1
Object Type: TABLE_EXPORT/TABLE/TABLE_DATA
Completed Objects: 1
Total Objects: 1
Completed Rows: 35,425,534
Worker Parallelism: 1
Export> status
Job: SYS_EXPORT_TABLE_02
Operation: EXPORT
Mode: TABLE
State: COMPLETING
Bytes Processed: 4,989,989,105
Percent Done: 100
Current Parallelism: 2
Job Error Count: 0
Dump File: /opt/oracle/diag/rdbms/chf/chf/trace/xifenfei.dmp
bytes written: 4,990,009,344
Worker 1 Status:
Process Name: DW00
State: WORK WAITING
Worker 2 Status:
Process Name: DW02
State: WORK WAITING
3.最终结论
3.1)如果并发设置过大,在导出过程中直接报错
3.2)如果导出文件数量少于并发数时,多于并发将不会工作。
发表在 逻辑备份/恢复
评论关闭
LNNVL函数使用
LNNVL官方解释
LNNVL provides a concise way to evaluate a condition when one or both operands of the condition may be null. The function can be used only in the WHERE clause of a query. It takes as an argument a condition and returns TRUE if the condition is FALSE or UNKNOWN and FALSE if the condition is TRUE. LNNVL can be used anywhere a scalar expression can appear, even in contexts where the IS [NOT] NULL, AND, or OR conditions are not valid but would otherwise be required to account for potential nulls. Oracle Database sometimes uses the LNNVL function internally in this way to rewrite NOT IN conditions as NOT EXISTS conditions. In such cases, output from EXPLAIN PLAN shows this operation in the plan table output. The condition can evaluate any scalar values but cannot be a compound condition containing AND, OR, or BETWEEN.

LNNVL官方解释翻译
lnnvl用于某个语句的where子句中的条件,如果条件为true就返回false;如果条件为UNKNOWN或者false就返回true。该函数不能用于复合条件如AND, OR, or BETWEEN中。
模拟测试环境
SQL> create table xifenfei(name varchar2(20),year number);
Table created.
SQL> insert into xifenfei values('xifenfei2001',2001);
1 row created.
SQL> insert into xifenfei values('xifenfei2002',2002);
1 row created.
SQL> insert into xifenfei values('xifenfei2003',2003);
1 row created.
SQL> insert into xifenfei values('xifenfei2004',2004);
1 row created.
SQL> insert into xifenfei values('xifenfei2005',2005);
1 row created.
SQL> insert into xifenfei values('xifenfei2006',2006);
1 row created.
SQL> insert into xifenfei values('xifenfei2007',2007);
1 row created.
SQL> insert into xifenfei values('xifenfei2008',null);
1 row created.
SQL> insert into xifenfei values('xifenfei2009',2009);
1 row created.
SQL> insert into xifenfei values('xifenfei2010',2010);
1 row created.
SQL> insert into xifenfei values('xifenfei2011',2011);
1 row created.
SQL> commit;
Commit complete.
SQL> select * from xifenfei;
NAME YEAR
-------------------- ----------
xifenfei2001 2001
xifenfei2002 2002
xifenfei2003 2003
xifenfei2004 2004
xifenfei2005 2005
xifenfei2006 2006
xifenfei2007 2007
xifenfei2008
xifenfei2009 2009
xifenfei2010 2010
xifenfei2011 2011
11 rows selected.
几种情况测试说明
--年份小于2009(lnnvl表示年份大于或者2009包含null) SQL> select * from xifenfei where lnnvl(year<2009); NAME YEAR -------------------- ---------- xifenfei2008 xifenfei2009 2009 xifenfei2010 2010 xifenfei2011 2011 --year不为null(lnnvl表示年份为null) SQL> select * from xifenfei where lnnvl(year is not null); NAME YEAR -------------------- ---------- xifenfei2008 --年份为null(lnnvl表示年份不为null) SQL> select * from xifenfei where lnnvl(year is null); NAME YEAR -------------------- ---------- xifenfei2001 2001 xifenfei2002 2002 xifenfei2003 2003 xifenfei2004 2004 xifenfei2005 2005 xifenfei2006 2006 xifenfei2007 2007 xifenfei2009 2009 xifenfei2010 2010 xifenfei2011 2011 10 rows selected. --年份为12345(lnnvl表示年份不为12345) SQL> select * from xifenfei where lnnvl(year =12345); NAME YEAR -------------------- ---------- xifenfei2001 2001 xifenfei2002 2002 xifenfei2003 2003 xifenfei2004 2004 xifenfei2005 2005 xifenfei2006 2006 xifenfei2007 2007 xifenfei2008 xifenfei2009 2009 xifenfei2010 2010 xifenfei2011 2011 11 rows selected. --年份不为12345(lnnvl表示年份为12345或者null) SQL> select * from xifenfei where lnnvl(year !=12345); NAME YEAR -------------------- ---------- xifenfei2008
发表在 Oracle 开发
评论关闭

加我微信(17813235971)
加我QQ(107644445)

