---
title: OceanBase 数据库 V4.x 版本中 Oracle 租户 sample() SQL 遇 rownum 返回结果顺序不随机-OceanBase数据库使用指南
description: 了解OceanBase数据库在实际应用中关于OceanBase 数据库 V4.x 版本中 Oracle 租户 sample() SQL 遇 rownum 返回结果顺序不随机相关的常见问题和使用技巧，帮助您快速解决OceanBase 数据库 V4.x 版本中 Oracle 租户 sample() SQL 遇 rownum 返回结果顺序不随机的难题。
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

划线反馈

# OceanBase 数据库 V4.x 版本中 Oracle 租户 sample() SQL 遇 rownum 返回结果顺序不随机

更新时间：2026-05-19 08:21

适用版本： V4.0.x、V4.1.x、V4.2.x、V4.3.x 内容类型：Troubleshoot  

## 问题现象

OceanBase 数据库 V4.x 版本中 Oracle 租户下，一条包含 `sample()` 和 rownum 的 SQL，执行查询返回结果不随机。

## 关键信息

预期返回数据是随机的，而下方 SQL 执行结果一致，不符合预期。

```shell
obclient [SYS]> select NAME from TEST2024 sample(3) where ROWNUM < 10;
+------------+
| NAME       |
+------------+
| iy`"50ib)3 |
| y          |
| cwad       |
| (m}j       |
| *4zawj}om  |
| kxzaa#<t5$ |
| h4v        |
| 29         |
| *k8h       |
+------------+
9 rows in set (0.002 sec)

obclient [SYS]> select NAME from TEST2024 sample(3) where ROWNUM < 10;
+------------+
| NAME       |
+------------+
| iy`"50ib)3 |
| y          |
| cwad       |
| (m}j       |
| *4zawj}om  |
| kxzaa#<t5$ |
| h4v        |
| 29         |
| *k8h       |
+------------+
9 rows in set (0.002 sec)

```

执行计划如下。

```shell
obclient [SYS]> explain select NAME from TEST2024 sample(3) where ROWNUM < 10;
+---------------------------------------------------------------------------------------------------------------------------------+
| Query Plan                                                                                                                      |
+---------------------------------------------------------------------------------------------------------------------------------+
| =========================================================                                                                       |
| |ID|OPERATOR             |NAME    |EST.ROWS|EST.TIME(us)|                                                                       |
| ---------------------------------------------------------                                                                       |
| |0 |EXCHANGE IN REMOTE   |        |9       |9           |                                                                       |
| |1 |└─EXCHANGE OUT REMOTE|        |9       |8           |                                                                       |
| |2 |  └─TABLE FULL SCAN  |TEST2024|9       |4           |                                                                       |
| =========================================================                                                                       |
| Outputs & filters:                                                                                                              |
| -------------------------------------                                                                                           |
|   0 - output([TEST2024.NAME]), filter(nil)                                                                                      |
|   1 - output([TEST2024.NAME]), filter(nil)                                                                                      |
|   2 - output([TEST2024.NAME]), filter(nil), rowset=16                                                                           |
|       access([TEST2024.NAME]), partitions(p0)                                                                                   |
|       limit(cast(CEIL(10) - cast(1, NUMBER(-1, -1)), BIGINT(-1, 0))), offset(nil), is_index_back=false, is_global_index=false,  |
|       range_key([TEST2024.__pk_increment]), range(MIN ; MAX)always true                                                         |
+---------------------------------------------------------------------------------------------------------------------------------+
15 rows in set (0.004 sec)

```

## 问题原因

SQL 改写过程中没有维护 sample 信息，改写后丢失 sample 信息，生成了错误的算子 TABLE FULL SCAN，没有走随机采样逻辑，导致 SQL 查询结果返回不随机，预期正确的算子应该是 TABLE ROW SAMPLE SCAN。

## 问题的风险及影响

SQL 查询返回结果集不随机。

## 影响租户

影响 OceanBase 数据库中的 Oracle 租户，对于 SYS 租户和 MySQL 租户无影响。

## 适用版本

OceanBase 数据库 V4.x 版本。

## 解决方法

升级至问题已修复版本。目前已修复的版本包括 OceanBase 数据库 V4.2.1 BP2（oceanbase-4.2.1.2-102010012023120119）。

## 规避方式

SQL 添加 Hint `/*+NO_REWRITE*/`，或者改写 SQL 为：`select * from ( select NAME from TEST2024 sample(3))where ROWNUM < 10;`。

上一篇

[DATE_ADD 和 DATE_SUB 函数的差异](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000005639979)

下一篇

[带有窗口函数的 SQL 执行偶发报错 -4016，在备库执行必定报错 -4016 的原因和解决方法](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000002397185) ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
