前言
社区一朋友求助,想在自己程序中获取DB12中的数据库备份日志,这个问题困扰了他一个礼拜有余。
这个问题我以前也没接触过,也很想知道具体是如何取值的,于是经过一番研究,最终搞清楚了,现将方法分享给大家,希望能帮助到有需要的同学。
跟踪DB12取数逻辑
经过一番DEBUG,最终定位到类CL_DBA_RDI_QUERY中的IF_DBA_RDI_QUERY~GET_SNAPSHOT方法,这个方法中最终调用
execute方法直接执行HANA SQL语句,取HANA系统表获取数据库日志备份记录,返回结果赋值给参数DATA。
编写代码获取备份日志
我们只需要调用 类 C L_DBA_RDI_QUERY 中的
IF_DBA_RDI_QUERY~GET_SNAPSHOT方法就可以了,该方法是一个实例方法,所以我们先需要调用 C
L_DBA_RDI_QUERY的构造方法。
C L_DBA_RDI_QUERY的构造方法需要传参RDI_META,它是CL_DBA_RDI_META的实例,所以我们又需要获取
CL_DBA_RDI_META的实例, 它的静态方法GET_INSTANCE返回 CL_DBA_RDI_MET A 的实例
CL_DBA_RDI_META 的 GET_INSTANCE 方法又需要 传 参SYS_REF,它是 CL_DB6_SYS
的实例,这个类没有定义构造方法,不过它的静态方法GET_SYS_REF返回 CL_DB6_SYS 的实例
至此整个过程清晰了,实现代码如下:
TRY. DATA(system) = cl_db6_sys=>get_sys_ref( system_id = sy-sysid synchronize = abap_false ). DATA(meta) = cl_dba_rdi_meta=>get_instance( sys_ref = system use_new_query_processor = abap_false ). DATA(query) = NEW cl_hdb_rdi_query( rdi_meta = meta ). DATA itab TYPE hdb_backup_catalogue_tab. query->if_dba_rdi_query~set_top_n( 1000 ). query->if_dba_rdi_query~get_snapshot( EXPORTING ddic_src = cl_hdb_rdi_meta=>co_ddic_hdb_backup_catalogue IMPORTING data = itab ). CATCH cx_root.ENDTRY.总结
作为一个合格的ABAP程序员,要熟练掌握DUBUG的各种方法,要向SAP官方程序学习,那是最好的学习资料。
佛曰:渡人亦渡己。
帮助了别人也提升了自己,何乐而不为呢?