01
—
引言
ChatGPT已经通过了很多考试,姚远老师是Oracle OCP和MySQL OCP讲师,我很好奇ChatGPT能不能通过Oracle OCP的考试呢?让我们拿Oracle 19c OCP考试(1z0-082)的真题对ChatGPT进行一个测试。
关于号主,姚远:
- Oracle ACE(Oracle和MySQL数据库方向)。
- Oracle MAA 大师。
- 华为云MVP。
- 《MySQL 8.0运维与优化》的作者。
- 拥有 Oracle 10g和12c OCM等20 数据库认证。
- 曾任IBM公司数据库部门经理,主导过多个大型数据中心核心库的设计。
- 现在一家第三方公司任首席数据库专家,服务2万 客户。
02
—
测试过程
第1道题ChatGPT就做错了,姚远老师心里不禁窃喜,看来ChatGPT也不咋地,我们也许不会失业,让我们来看看第一道题的题目:
Which two statements are true about space-saving features in an Oracle Database?
A.An index created with the UNUSABLE attribute has no segment.
B.Private Temporary Tables(PTTs) store metadata in memory only.
C.Private Temporary Tables(PTTs) when used, are always dropped at the next commit statement.
D.An index that is altered to be UNUSABLE will retain its segment
E. A table that is truncated will always have all of its extents removed
ChatGPT的答案是B和C,B是对的,但ChatGPT选择了一个错误的答案C:Private Temporary Tables(PTTs) when used, are always dropped at the next commit statement. 实际上PTT有两种:Transaction-specific (ON COMMIT DROP DEFINITION)和session-specific (ON COMMIT PRESERVE DEFINITION)。这两种在commit时都会删除表中的数据,但第二种是不会删除表定义的,因此C是错的。
ChatGPT忽略了一个正确的答案A,于是姚远老师问ChatGPT:你为什么没有选择A,请你做一个实验,创建一个UNUSABLE的索引试试?ChatGPT回答:作为一个AI语言模型,我没有直接的物理数据库来创建索引。... 现在我知道ChatGPT为什么会做错了,因为ChatGPT没有实验环境。我自己实验了一下:
代码语言:javascript复制SQL> create index in_1 on table_1(no) unusable;
Index created.
SQL> select segment_name,blocks from user_segments where segment_name in ('IN_1');
no rows selected
SQL> alter index in_1 rebuild;
Index altered.
SQL> select segment_name,blocks from user_segments where segment_name in ('IN_1');
SEGMENT_NAME BLOCKS
-------------------- ----------
IN_1 8
发现创建索引时为unusable是不创建段的,只有重建索引才会有段。
第2道题是关于视图的,ChatGPT对 WITH CHECK的限制很清楚,做对了。
第3道题是PMON进程的作业,ChatGPT还知道从12c后PMON注册监听的功能交给了LRRG进程负责,也做对了。
第4道题是集合的 INTERSECT操作,ChatGPT也做对了。
第5道题是用户的最小权限原则,ChatGPT也做对了。
第6 道题是关于回滚段的题目,ChatGPT做错了,ChatGPT认为:Undo segments can be stored in the SYSTEM tablespace.这个选项是错的,ChatGPT给出的理由是:Undo segments are stored in the undo tablespace, not in the SYSTEM tablespace. 实际上在自动回滚段管理时,如果没有undo表空间,回滚段是可以放在系统表空间中的,在Oracle的官方文档中有下面的内容:
When the database instance starts, the database automatically selects the first available undo tablespace. If no undo tablespace is available, then the instance starts without an undo tablespace and stores undo records in the SYSTEM tablespace. This is not recommended, and an alert message is written to the alert log file to warn that the system is running without an undo tablespace.
感觉ChatGPT做这个选择有点想当然。
第7道题是日期的计算,也做对了。
第8道题做错了,ChatGPT选择了一个下面这个选项:Directory Naming requires setting the TNS_ADMIN environment variable on the client side. 实际上TNS_ADMIN环境变量不是必需设置的,只有ORACLE_HOME设置了即可。
第9道题错了,ChatGPT选择了一个错误的答案 :Any user can create a PUBLIC synonym. 实际上即使创建PUBLIC的同义词,也需要 CREATE PUBLIC SYNONYM的系统权限。ChatGPT还忽略了一个正确的答案:A synonym can have a synonym。
第10道题是关于直接路径导入的压缩格式,这个知识点在Oracle官方文档上面写的清清楚楚,ChatGPT做对了。
第11道题是关于延迟段创建特性,ChatGPT也做对了
03
—
总结和分析
测试进行到这里,ChatGPT一共做了11道题,错了4道题,正确率为63.6%,而Oracle 19C OCP的1Z0-082的及格线是60%,ChatGPT涉险过关!
更多的Oracle OCP和MySQL OCP题库的解析可以参见:OCP题库解析。
姚远老师分析了ChatGPT解题的特点,发现ChatGPT对于在业界答案没有争议的题目做得很好,但ChatGPT也有两个弱点,一个是ChatGPT没有真正的一个Oracle数据库进行实验,因此在解答需要实验验证的题目时很吃亏;另一个是ChatGPT不擅长解决概念上比较绕的问题。但总体来说,ChatGPT已经可以胜任一个初级DBA的工作了,只是对ChatGPT的给出的答案需要一个资深的DBA进行二次验证。