• 金仓数据库KingbaseES数据库开发指南(5. 面向应用程序的高级功能)


    目录

    5.1. 闪回技术 ¶

    5.1.1. 闪回概述 ¶

    5.1.2. 闪回的配置 ¶

    5.1.3. 闪回的使用 ¶

    5.2. 编程环境的选择 ¶

    5.2.1. 应用程序体系结构概述 ¶

    5.2.2. KingbaseES PL/SQL 概述 ¶

    5.2.3. KingbaseES JAVA 概述 ¶

    5.2.4. KingbaseES ODBC 概述 ¶

    5.2.5. KingbaseES 预编译器概述 ¶

    5.2.6. KingbaseES OCCI概述 ¶

    5.2.7. KingbaseES .NET Data Provider概述 ¶

    5.3. 数据库的依赖关系 ¶

    5.3.1. 对象依赖关系概述 ¶

    5.3.2. 对象状态 ¶

    5.3.3. 对象状态的失效 ¶

    5.3.4. 减少依赖无效的准则 ¶

    5.3.5. 对象的重新验证 ¶


    5.1. 闪回技术 

    5.1.1. 闪回概述 

    闪回技术是备份恢复机制的一部分,在数据库发生逻辑错误的时候,能够提供快速且损失最小的恢复。KingbaseES支持闪回回收站中的表及相关对象,将数据库对象闪回到以前的状态,无需使用时间点介质恢复。

    5.1.2. 闪回的配置 

    回收站功能默认关闭,只有开启了参数才能将表放置到回收站中,参数名称:kdb_flashback.db_recyclebin,参数为 bool 类型,参数级别为sighup。

    修改 kingbase.conf 文件中shared_preload_libraries 参数后重启数据库。

    shared_preload_libraries = 'kdb_flashback'
    

    在 kingbase.conf 文件中设置参数,开启闪回功能,默认是off为关闭状态

    kdb_flashback.db_recyclebin = on
    

    5.1.3. 闪回的使用 

    5.1.3.1. 闪回表的使用 

    开启了回收站参数后,如果不允许一个删除的表进回收站,需要在 DROP 语句后面加上PUGRE选项。如果在当前已经存在同名的表,则闪回失败,需要使用 RENAME TO 选项指定一个新的表名。 成功闪回一个表后,回收站视图recyclebin和回收站系统表 sys_recyclebin中对象将被清除。单独删除的一个子表、临时表、分区都不支持闪回,删除的表和相关对象不再允许操作。

    例如,将在回收站中的table_name闪回到闪回之前的状态:

    FLASHBACK TABLE table_name TO BEFORE DROP;
    

    例如,将回收站中的表闪回到一个新的表名:

    FLASHBACK TABLE table_name TO BEFORE DROP RENAME TO newname;
    

    闪回表至历史时刻,基于闪回查询将被操作表的数据还原到指定的快照时刻,该操作基于AS OF 闪回查询和当前快照数据的差异进行还原。闪回表至历史时刻可以通过时间戳(TIMESTAMP)、CSN两种方式进行指定。闪回表的过程中默认关闭触发器行为,如果期望 开启的话请通过ENABLE TRIGGERS 语句进行。语法如下:

    FLASHBACK TABLE table_name TO  { TIMESTAMP|CSN|SCN } asof_item [ { ENABLE|DISABLE } TRIGGERS ]
    

    5.1.3.2. 清除回收站 

    PURGE TABLE 分为删除回收站中指定的一个表和清空回收站。清理回收站时,回收站视图recyclebin 和回收站系统表 sys_recyclebin中对象将被清除。删除回收站中指定的一个表时,将删除表及其相关联对象,例如 表的 index、constraint、trigger、policy、rule 等。清空回收站将删除回收站中所有的表及关联对象。

    例如,删除回收站中指定的一个表:

    PURGE TABLE table_name;
    

    清空回收站中所有的表:

    PURGE RECYCLEBIN;
    

    5.2. 编程环境的选择 

    5.2.1. 应用程序体系结构概述 

    应用程序体系结构是指数据库应用程序连接到数据库的计算环境,一般为以下几种架构:

    • 客户端/服务器结构

    客户端/服务器结构中,应用程序代码在客户端系统上允许数据从客户端系统传输到数据库服务器进行插入和更新操作,并从服务器返回到客户端进行查询操作。

    • 服务器编程

    在数据库发送更改请求时,自动执行触发器或者调用存储子程序,应用程序逻辑可以完全在数据库层实现。您可以重用执行验证和清理代码,以及从各种客户端控制数据库操作。例如,通过一个web界面调用存储过程,基于web界面, 客户端/服务器结构相同的功能。

    • 三层体系结构

    在三层体系结构中,存在第三台应用服务器专门处理请求,应用程序不直接与数据库服务器通信。通过提高此中间层的处理能力,能减少客户端系统所需的资源,客户端系统只需要通过TCP/IP或者HTTP协议发生请求。

    5.2.2. KingbaseES PL/SQL 概述 

    PL/SQL是SQL的过程扩展,是一种完全可移植的高性能事务处理语言。通过PL/SQL 可以使用SQL语句操纵数据,通过条件选择和循环控制程序逻辑,还可以声明变量、定义子程序以及捕获运行时抛出的错误。 在任何KingbaseES编程接口中编写的应用程序都可以调用PL/SQL子程序和包,并将PL/SQL代码块发送到数据库中执行。PL/SQL开发的详细内容可参考《 KingbaseES PL/SQL 过程语言参考手册 》。

    5.2.3. KingbaseES JAVA 概述 

    KingbaseES JDBC 是纯 JAVA 的 JDBC 驱动程序,它支持 JDBC 3.0 和 部分 4.0 API 的标准。通过 JDBC 接口对象,应用程序可以完成与数据库的连接、执行 SQL语句、从数据库中获取结果、状态及错误信息、终止事务和连接等操作。 KingbaseES JDBC的主要工作就是实现这些接口。JDBC开发的详细内容可参考《 KingbaseES客户端编程接口指南-JDBC 》。

    5.2.4. KingbaseES ODBC 概述 

    开放数据库连接(ODBC)提供了一个标准接口,允许一个应用程序访问许多不同的数据源。KingbaseES ODBC 是纯C的 ODBC 驱动程序,它支持 Microsoft ODBC 3.0 标准。通过 KingbaseES ODBC Driver,应用程序可以完成与数据库的连接、执行SQL语句、从数据库中获取结果、获取状态及错误信息、终止事务和连接等操作。ODBC开发的详细内容可参考《 KingbaseES客户端编程接口指南-ODBC 》。

    5.2.5. KingbaseES 预编译器概述 

    预编译器是一种编程工具,允许将SQL语句迁移到C、C++等语言编写的高级程序中。KingbaseES支持Pro*C程序, 嵌有SQL语句的C语言程序称为Pro*C程序,使用的SQL语言称为嵌入式SQL, 嵌入在主语言程序中的SQL语句并不能直接被主语言编译程序识别,需要预编译方能被识别。Pro*C开发的详细内容可参考《 Pro*C迁移指南 》。

    5.2.6. KingbaseES OCCI概述 

    KingbaseES的OCCI兼容了Oracle OCCI的常用部分接口, OCCI是一个应用程序编程接口,它允许以C++编写的应用程序与一个或者多个Oracle数据库服务器进行交互。具体兼容情况可以参考《 OCCI迁移指南 》 。

    5.2.7. KingbaseES .NET Data Provider概述 

    KingbaseES .NET Data Provider 是 KingbaseES 提供的 ADO.NET数据提供程序, 它允许用 C#,Visual Basic,F# 编写的程序访问KingbaseES 数据库服务器。它以100%的 C# 代码实现。 KingbaseES .NET Data Provider 的开发遵循 .NET 平台的规范,并且还继承Microsoft·.NET Framework类库提供的类和接口。.NET Data Provider开发的详细内容可参考《 KingbaseES客户端编程接口指南-ado.net 》。

    5.3. 数据库的依赖关系 

    5.3.1. 对象依赖关系概述 

    数据库对象可以在其定义中引用其他对象。例如,视图引用基表定义查询块,PL/SQL过程中引用表。对象a定义中引用b,则a是b的依赖对象,b是a的引用对象。

    5.3.2. 对象状态 

    每一个数据库对象都有一个状态值,如下表所示:

    状态

    描述

    有效

    数据字典当前定义为已成功编译对象

    无效

    该对象被标记为无效,因为它引用的对象发生了更改或者是编译错误

    可以通过系统视图all_objects的status字段查询对象的有效状态,valid表示有效,无效状态为invalid。

    5.3.3. 对象状态的失效 

    对象之间的级联引用,还会产生间接依赖关系。被引用对象的修改,可能会导致直接依赖关系失效。从属引用对象的修改,可能会产生级联依赖失效。 当用户授予或者撤销对象权限时,也会导致对引用对象失去权限,从而依赖关系失效,对象变为无效状态。

    下表列举了部分对象DDL操作导致依赖失效的情况:

    DDL操作

    依赖失效

    增加表列

    依赖对象引用表查询

    依赖对象引用表%rowtype

    依赖对象不指定列表insert操作

    修改表列

    依赖对象引用列

    依赖对象引用表%rowtype

    依赖对象不指定列表insert操作

    依赖对象是行级触发器

    修改视图

    依赖对象引用视图

    依赖对象引用视图%rowtype

    依赖对象不指定列表insert操作

    删除索引

    索引是函数索引,依赖对象是基于函数索引的行级触发器

    索引是唯一索引,依赖对象是视图且引用唯一索引列

    修改PL/SQL过程或包

    依赖对象引用函数或者过程,函数名或过程名被修改

    依赖对象引用过程中的变量,变量被修改

    5.3.4. 减少依赖无效的准则 

    要减少依赖对象的失效,请遵循以下准则

    • 将新增过程添加到包头的末尾

    向包对象中新增过程或函数时,请将其添加到包的末尾。这样也可以减少对已存在的过程或者函数的影响,防止其变成无效状态。

    • 通过视图引用表

    使用视图间接引用表,向表添加列时,不会使依赖视图的对象失效。修改或者删除视图未引用列,也不会对依赖对象有影响。

    5.3.5. 对象的重新验证 

    引用无效对象必须先进行验证,才能被调用。当引用对象时,数据库自动进行验证,不需要用户手动操作。如果对象无效,则其状态在编译时会抛出错误。编译器将重新验证未经授权的对象,但不需要重新编译它。 编译器自动重新编译无效对象时,如果编译没有错误,则重新验证。否则,需手动修改后才能验证成功。

  • 相关阅读:
    Wincc报表教程(SQL数据库的建立,wincc在数据库中保存和查询数据,调用Excel模板把数据保存到指定的位置和打印功能)
    【GO-OpenCV】go-cv快速配置
    Go入门简介
    [机缘参悟-67]:深度思考-万物的基础架构:物质组成、运行规律、化合规律
    常用H标签的补充:html5
    图像处理之图像统计特性
    【佳学基因检测】在LARAVEL中如何使用和设置路由组
    在微信小程序中如何引入iconfont
    Avalonia开发(一)环境搭建
    做测试8年,33岁前只想追求大厂高薪,今年只求稳定收入
  • 原文地址:https://blog.csdn.net/arthemis_14/article/details/127730193