数据库ChatGPT能代替OracleDBA吗?用OracleOCP(1z0-083)的真题测试一下。
让我们来看看ChatGPT不能通过OracleOCP的考试?
引言测试过程总结和分析
关于博主,姚远:
OracleACE(Oracle和MySQL数据库方向)。OracleMAA大师。华为云MVP。《MySQL8.0运维与优化》的作者。拥有Oracle10g和12cOCM等20+数据库认证。曾任IBM公司数据库部门经理,主导过多个大型数据中心核心库的设计。现在一家第三方公司任首席数据库专家,服务2万+客户。
引言
ChatGPT已经通过了很多考试,姚远老师是OracleOCP和MySQLOCP讲师,我很好奇ChatGPT能不能通过OracleOCP的考试呢?让我们拿Oracle19cOCP考试(1z0-082)的真题对ChatGPT进行一个测试。
测试过程
第1道题ChatGPT就做错了,姚远老师心里不禁窃喜,看来ChatGPT也不咋地,我们也许不会失业,让我们来看看第一道题的题目:
Whichtwostatementsaretrueaboutspace-savingfeaturesinanOracleDatabaseA.AnindexcreatedwiththeUNUSABLEattributehasnosegment.B.PrivateTemporaryTables(PTTs)storemetadatainmemoryonly.C.PrivateTemporaryTables(PTTs)whenused,arealwaysdroppedatthenextcommitstatement.D.AnindexthatisalteredtobeUNUSABLEwillretainitssegmentE.Atablethatistruncatedwillalwayshaveallofitsextentsremoved
ChatGPT的答案是B和C,B是对的,但ChatGPT选择了一个错误的答案C:PrivateTemporaryTables(PTTs)whenused,arealwaysdroppedatthenextcommitstatement.实际上PTT有两种:Transaction-specific(ONCOMMITDROPDEFINITION)和session-specific(ONCOMMITPRESERVEDEFINITION)。这两种在commit时都会删除表中的数据,但第二种是不会删除表定义的,因此C是错的。
ChatGPT忽略了一个正确的答案A,于是姚远老师问ChatGPT:你为什么没有选择A,请你做一个实验,创建一个UNUSABLE的索引试试?ChatGPT回答:作为一个AI语言模型,我没有直接的物理数据库来创建索引。…现在我知道ChatGPT为什么会做错了,因为ChatGPT没有实验环境。我自己实验了一下:
SQL>createindexin_1ontable_1(no)unusable;
Indexcreated.
SQL>selectsegment_name,blocksfromuser_segmentswheresegment_namein('IN_1');
norowsselected
SQL>alterindexin_1rebuild;
Indexaltered.
SEGMENT_NAMEBLOCKS
------------------------------
IN_18
发现创建索引时为unusable是不创建段的,只有重建索引才会有段。
第2道题是关于视图的,ChatGPT对WITHCHECK的限制很清楚,做对了。
第3道题是PMON进程的作业,ChatGPT还知道从12c后PMON注册监听的功能交给了LRRG进程负责,也做对了。
第4道题是集合的INTERSECT操作,ChatGPT也做对了。
第5道题是用户的最小权限原则,ChatGPT也做对了。
第6道题是关于回滚段的题目,ChatGPT做错了,ChatGPT认为:UndosegmentscanbestoredintheSYSTEMtablespace.这个选项是错的,ChatGPT给出的理由是:Undosegmentsarestoredintheundotablespace,notintheSYSTEMtablespace.实际上在自动回滚段管理时,如果没有undo表空间,回滚段是可以放在系统表空间中的,在Oracle的官方文档中有下面的内容:
Whenthedatabaseinstancestarts,thedatabaseautomaticallyselectsthefirstavailableundotablespace.Ifnoundotablespaceisavailable,thentheinstancestartswithoutanundotablespaceandstoresundorecordsintheSYSTEMtablespace.Thisisnotrecommended,andanalertmessageiswrittentothealertlogfiletowarnthatthesystemisrunningwithoutanundotablespace.
感觉ChatGPT做这个选择有点想当然。
第7道题是日期的计算,也做对了。
第8道题做错了,ChatGPT选择了一个下面这个选项:DirectoryNamingrequiressettingtheTNS_ADMINenvironmentvariableontheclientside.实际上TNS_ADMIN环境变量不是必需设置的,只有ORACLE_HOME设置了即可。
第9道题错了,ChatGPT选择了一个错误的答案:AnyusercancreateaPUBLICsynonym.实际上即使创建PUBLIC的同义词,也需要CREATEPUBLICSYNONYM的系统权限。ChatGPT还忽略了一个正确的答案:Asynonymcanhaveasynonym。
第10道题是关于直接路径导入的压缩格式,这个知识点在Oracle官方文档上面写的清清楚楚,ChatGPT做对了
第11道题是关于延迟段创建特性,ChatGPT也做对了
欢迎试看博主的专著《MySQL8.0运维与优化》
总结和分析
测试进行到这里,ChatGPT一共做了11道题,错了4道题,正确率为63.6%,而Oracle19COCP的1Z0-082的及格线是60%,ChatGPT涉险过关!
更多的OracleOCP和MySQLOCP题库的解析可以参见:
Oracle19cOCP和MySQL8.0OCP应试指南和题库讲解
姚远老师分析了ChatGPT解题的特点,发现ChatGPT对于在业界答案没有争议的题目做得很好,但ChatGPT也有两个弱点,一个是ChatGPT没有真正的一个Oracle数据库进行实验,因此在解答需要实验验证的题目时很吃亏;另一个是ChatGPT不擅长解决概念上比较绕的问题。但总体来说,ChatGPT已经可以胜任一个初级DBA的工作了,只是对ChatGPT的给出的答案需要一个资深的DBA进行二次验证。