flashback六大技术之flashback transaction query 和flashback table

环境:

15:25:40 hr@ORCL (^ω^) select * from v$version where rownum=1;

BANNER
-------------------------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod


    Ⅰ)flashback transaction query

 

           flashback transaction query是基于flashback version query的“恢复”,因为在flashback version query中,有个伪列versions_xid,这是这两类query的“红线”,视图flashback_transaction_query进行的是全表扫描,要注意代价的评估。

14:17:18 sys@ORCL (^ω^) desc flashback_transaction_query
 名称                                      是否为空? 类型
 ----------------------------------------- -------- ----------------------------
 XID                                                RAW(8)
 START_SCN                                          NUMBER
 START_TIMESTAMP                                    DATE
 COMMIT_SCN                                         NUMBER
 COMMIT_TIMESTAMP                                   DATE
 LOGON_USER                                         VARCHAR2(30)
 UNDO_CHANGE#                                       NUMBER
 OPERATION                                          VARCHAR2(32)
 TABLE_NAME                                         VARCHAR2(256)
 TABLE_OWNER                                        VARCHAR2(32)
 ROW_ID                                             VARCHAR2(19)
 UNDO_SQL                                           VARCHAR2(4000)


        实验:

select operation,undo_sql
            from flashback_transaction_query q where q.xid in (
          select versions_xid from t1 versions between scn 4198407 and 4198441)
/

15:34:17 hr@ORCL (^ω^) select dbms_flashback.get_system_change_number from dual;

GET_SYSTEM_CHANGE_NUMBER
------------------------
                 4197364

15:34:22 hr@ORCL (^ω^) delete test where rownum=1;

已删除 1 行。

15:34:41 hr@ORCL (^ω^) commit;

提交完成。


15:35:08 hr@ORCL (^ω^) select dbms_flashback.get_system_change_number from dual;

GET_SYSTEM_CHANGE_NUMBER
------------------------
                 4197405

15:35:25 hr@ORCL (^ω^) select xid,commit_scn,operation,undo_sql
15:36:16   2              from flashback_transaction_query q where q.xid in (
15:36:16   3            select versions_xid from test versions between scn 4197364 and 4197405)
15:36:18   4  /

XID              COMMIT_SCN
---------------- ----------
OPERATION
----------------------------------------------------------------
UNDO_SQL
--------------------------------------------------------------------------------
06002000F4040000    4197376
DELETE
insert into "HR"."TEST"("ID1","ID2") values ('2281','2283');

06002000F4040000    4197376


***************************************************我是分隔线哦********************************************************************

 

     Ⅱ)flashback table

            由于flashback table使用了DML(注意:不能将表恢复到改变表结构的DDL操作之前)操作去恢复数据,不能保证rowid不变,所以在flashback table之前需要启用row movement特性。

15:57:19 hr@ORCL (^ω^) select row_movement from user_tables where table_name='T1';

ROW_MOVEMENT
----------------
DISABLED

16:20:38 hr@ORCL (^ω^) alter table t1 enable row movement;

表已更改。

16:21:04 hr@ORCL (^ω^) select row_movement from user_tables where table_name='T1';

ROW_MOVEMENT
----------------
ENABLED


16:21:09 hr@ORCL (^ω^) select dbms_flashback.get_system_change_number from dual;

GET_SYSTEM_CHANGE_NUMBER
------------------------
                 4199918

16:22:52 hr@ORCL (^ω^) select count(*) from t1;

  COUNT(*)
----------
         8

16:23:22 hr@ORCL (^ω^) delete t1 where rownum=1;

已删除 1 行。

16:23:31 hr@ORCL (^ω^) commit;

提交完成。

16:23:36 hr@ORCL (^ω^) flashback table t1 to scn 4199918;

闪回完成。

16:24:19 hr@ORCL (^ω^) select count(*) from t1;

  COUNT(*)
----------
         8


 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现Java接入ChatGPT API可以分为以下几个步骤: 1. 注册ChatGPT API账号并获取API密钥。 2. 使用Java HTTP库发送HTTP请求到ChatGPT API,并将API密钥添加到请求头中。 3. 处理API返回的JSON数据,并提取出需要的信息。 下面是一个简单的Java代码示例,演示如何使用ChatGPT API进行问答: ```java import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLEncoder; public class ChatGPTClient { private static final String API_KEY = "YOUR_API_KEY_HERE"; private static final String API_URL = "https://api.openai.com/v1/engines/davinci-codex/completions"; public static void main(String[] args) { try { String prompt = "What is the capital of France?"; String response = askQuestion(prompt); System.out.println(response); } catch (Exception e) { e.printStackTrace(); } } public static String askQuestion(String question) throws Exception { String encodedQuestion = URLEncoder.encode(question, "UTF-8"); String url = API_URL + "?prompt=" + encodedQuestion; URL obj = new URL(url); HttpURLConnection con = (HttpURLConnection) obj.openConnection(); con.setRequestMethod("POST"); con.setRequestProperty("Content-Type", "application/json"); con.setRequestProperty("Authorization", "Bearer " + API_KEY); String postJsonData = "{\"max_tokens\":100,\"temperature\":0.5}"; con.setDoOutput(true); con.getOutputStream().write(postJsonData.getBytes("UTF-8")); BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream())); String inputLine; StringBuffer response = new StringBuffer(); while ((inputLine = in.readLine()) != null) { response.append(inputLine); } in.close(); String responseData = response.toString(); int startIndex = responseData.indexOf("\"text\":") + 8; int endIndex = responseData.indexOf("\"", startIndex); String answer = responseData.substring(startIndex, endIndex); return answer; } } ``` 在上面的代码中,我们定义了一个`ChatGPTClient`类,其中包含了一个`askQuestion`方法,该方法接收一个问题字符串作为参数,并返回ChatGPT API的答案。在该方法中,我们首先将问题字符串编码为URL编码格式,并将其添加到API的URL中。然后,我们使用Java的`HttpURLConnection`类创建一个HTTP请求,并将API密钥添加到请求头中。接着,我们将API请求的参数以JSON格式写入请求体中,并使用`BufferedReader`类读取API的响应数据。最后,我们从API返回的JSON中提取出答案字符串,并将其作为结果返回。 需要注意的是,该示例代码中的API密钥需要替换为自己的API密钥。此外,该示例代码中使用了`max_tokens`和`temperature`参数控制API的输出。`max_tokens`参数控制API生成的文本长度,`temperature`参数控制API生成的文本的多样性和抽象度。这些参数可以根据实际需要进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值