数据库操作技巧 之 oracle连表update、跨库查询、恢复被删除数据、解决锁表
- 连表更新多个字段
UPDATE '被修改的table' A -- 使用别名
SET (
A .'被修改的字段A',
A .'被修改的字段B'
) = (
SELECT
b.'字段A',
b.'字段B'
FROM
'数据源table' b
WHERE
b.'关联字段' = A .'关联字段'
)
WHERE
EXISTS (
SELECT
1
FROM
'数据源table' b
WHERE
b.'关联字段' = A .'关联字段'
)
- 跨库查询
- 建立连接
CREATE database link DATABASE_LINK_TEST --数据库别名
CONNECT to DB_TEST identified BY DB_TEST --分别对应用户名和密码
using '127.0.0.1:1512/ORCL'; --域名:端口号/数据库实例
CREATE DATABASE LINK 随便起个名字 CONNECT TO 用户名 IDENTIFIED BY 密码 USING '(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 域名)(PORT = 端口号))
)
(CONNECT_DATA =
(SERVICE_NAME = 数据库实例名称)
)
)';
- 使用
库名@连接名
SELECT * FROM BASE_TEST@DATABASE_LINK_TEST
- Oracle恢复删除数据 查询被删除前的时间节点的数据,使用plsql将被删除数据插入
SELECT
*
FROM
tableName AS OF TIMESTAMP TO_TIMESTAMP (
'2019-11-08 09:10:00',
'yyyy-MM-dd hh24:mi:ss'
)
) A
- oracle 锁表解决方法
当代码操作执行了很长时间了数据库口没有响应数据,直到超时,这时候有可能锁表了
- 查锁对象
SELECT
object_name,
machine,
s. SID,
s.serial#
FROM
gv$locked_object l,
dba_objects o,
gv$session s
WHERE
l.object_id = o.object_id
AND l.session_id = s. SID;
- 解锁,根据上面的语句查询出来的被锁对象的序列,杀死
ALTER system kill session '3786, 12157';
- 查锁语句 根据序列查询被锁对象是因为操作哪个语句被锁的
SELECT
b.sql_text
FROM
v$session A,
v$sql b
WHERE
A . SID = 3786 --session_id
AND A .SQL_ADDRESS = b.ADDRESS (+);
原文地址:https://www.cnblogs.com/404code/p/12049301.html