How To Run DBV In Parallel On A Single Data File

本文档详述了如何在Oracle数据库上通过并行方式运行DBV(数据库验证工具),针对单一数据文件进行操作的具体步骤。首先,需确定数据文件的编号和名称,接着计算文件中包含的块数,然后决定并行会话的数量,最后启动并行的DBV会话。


How To Run DBV In Parallel On A Single Data File (文档 ID 369076.1)

APPLIES TO:

Oracle Database - Enterprise Edition - Version 10.1.0.4 and later
Oracle Database Cloud Schema Service - Version N/A and later
Oracle Database Exadata Cloud Machine - Version N/A and later
Oracle Cloud Infrastructure - Database Service - Version N/A and later
Oracle Database Exadata Express Cloud Service - Version N/A and later
Information in this document applies to any platform.
***Checked for relevance on 11-Apr-2013***

GOAL

How to run DBV in parallel on a single data file?

SOLUTION

1. Identify the file# and name of the data file. 
 

connect / as sysdba
select * 
from   v$dbfile 
where  name like '%datafile_name%';

Or:

select * 
from   v$dbfile;


2.  Identify the number of blocks in the data file. 

2.1 Find Data Block Size 
 

connect / as sysdba
show parameter db_block_size 

NAME                                TYPE    VALUE 
----------------------------------- ------- ------ 
db_block_size integer                         8192


2.2 Calculate the the number of blocks. 
 

connect / as sysdba
select BYTES/<your block size> 
from   v$datafile 
where  FILE# = <your file number>; 

BYTES/8192 
---------- 
      5120


3. Determine how many parallel sessions has to be used. 

This example shows 3 parallel sessions. 

4) Start Parallel DBV sessions. 
 

$dbv FILE=filename START=1 END=2000 
$dbv FILE=filename START=2001 END=3500 
$dbv FILE=filename START=3501


(Note: END defaults to the last block of the file)

<think>我们被要求解释C/C++中的strtod函数,并解释示例代码`float dbV = strtod(data, &end);`。注意,strtod函数返回的是double类型,但这里赋值给了float类型,这可能会导致精度损失,但语法上是允许的(因为float可以自动从double转换而来,但会丢失精度)。另外,示例代码中变量名dbV(可能表示double value)但实际上被声明为float,这看起来有点不一致,但我们将按照代码来解释。 根据引用[1][2][3]: - strtod函数用于将字符串转换为double类型的浮点数。 - 函数原型:`double strtod(const char *str, char **endptr);` - 参数: - str:指向要转换的以空字符结尾的字符串的指针。 - endptr:指向字符指针的指针,用于存储转换停止的位置(即第一个无法转换的字符的地址)。如果不需要,可以传递NULL。 - 返回值:转换后的double值。如果无法转换,则返回0.0。 示例代码:`float dbV = strtod(data, &end);` - 这里,data是一个字符串(例如`const char* data = "123.45abc";`)。 - end必须是一个字符指针(`char* end;`),然后我们传递它的地址(&end)作为第二个参数。 - 转换后,dbV将得到转换的浮点数值(123.45),而end将指向字符串中第一个未被转换的字符(即'a'的位置)。 注意:strtod函数会跳过字符串开头的空白字符(空格、制表符等),直到遇到第一个非空白字符。然后尽可能多地转换符合浮点数表示形式的字符(包括正负号、数字、小数点、指数部分等),直到遇到不能转换的字符为止。 另外,如果整个字符串都是可转换的,那么end将指向字符串末尾的空字符('\0')。 如果转换失败(例如字符串根本不包含数字),则返回0.0,并且endptr会指向起始位置(即传入的str值)。 代码示例中,将strtod返回的double赋值给float变量dbV,可能会损失精度,但这是允许的。如果希望避免精度损失,应该使用double类型变量。 下面我们用一个完整的示例代码来演示:</think>在 C/C++ 中,`strtod` 函数用于将字符串转换为双精度浮点数(`double`)。以下是详细解释和代码示例: ### 函数原型 ```c #include <stdlib.h> double strtod(const char *str, char **endptr); ``` - **`str`**:要转换的字符串(以 null 结尾) - **`endptr`**:指向字符指针的指针,存储转换停止的位置(不可转换的第一个字符地址) - **返回值**:转换后的 `double` 值。若转换失败,返回 `0.0` --- ### 示例代码解释 ```c char data[] = "123.45abc"; // 待转换字符串 char *end; // 指向未转换部分的指针 float dbV = strtod(data, &end); // 转换并赋值给 float ``` 1. **转换过程**: - 解析 `"123.45abc"` 时,遇到 `'a'` 停止转换 - 数值部分 `123.45` 被转换为 `double` 类型 - 剩余字符串 `"abc"` 的地址存入 `end` 2. **结果分析**: - `dbV = 123.45`(赋值给 `float` 时可能损失精度) - `end` 指向 `"abc"` 的首地址(`data + 6`) 3. **关键点**: - 跳过开头的空白字符(如空格、制表符) - 遇到非法字符(非数字、非小数点、非指数符号)时停止 - 若整个字符串无效(如 `"abc"`),返回 `0.0`,`end` 指向起始位置 --- ### 完整示例代码 ```c #include <stdio.h> #include <stdlib.h> int main() { const char *data = " 3.14e-2 end"; // 含空白符和指数 char *endPtr; double result = strtod(data, &endPtr); // 正确使用 double 接收 printf("转换结果: %.10f\n", result); // 输出: 0.0314000000 printf("未转换部分: [%s]\n", endPtr); // 输出: " end" return 0; } ``` **输出**: ``` 转换结果: 0.0314000000 未转换部分: [ end] ``` --- ### 注意事项 1. **精度问题**: - `strtod` 返回 `double`,直接赋给 `float` 可能损失精度(如示例中的 `dbV`) - 建议用 `double` 接收,或显式转换:`float f = (float)strtod(...);` 2. **错误处理**: ```c if (result == 0.0 && endPtr == data) { printf("转换失败!字符串无效\n"); } ``` 3. **相关函数**: - `strtof`:转 `float`(C99) - `strtold`:转 `long double` - `atoi`/`atof`:简单转换(无错误检测) > 引用说明:`strtod` 会跳过开头的空白字符,遇到非法字符停止转换,并将剩余部分存入 `endptr`[^3][^2]。若需高精度数值处理,建议直接使用 `double` 类型[^5]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值