目錄概述
一鍵解鎖指令碼
一鍵加索引指令碼
一鍵資料庫閃回指令碼
根據專案需求寫的一些指令碼,僅作參考,後續新指令碼會接著追加
declare
v_sqt varchar2(200);
v_errortext varchar2(200);
begin
for item in (select c.object_name,
b.username,
b.sid,
b.serial#,
logon_time
from v$locked_object a, v$session b, dba_objects c
where a.session_id = b.sid
and a.object_id = c.object_id
group by c.object_name,
b.username,
b.sid,
b.serial#,
logon_time) loop
dbms_output.put_line('鎖表使用者:' || item.username || ' 被鎖表名:' ||
item.logon_time);
v_sqt := 'alter system kill session ' || '''' || item.sid || ',' ||
item.serial# || '''';
dbms_output.put_line(v_sqt);
begin
execute immediate v_sqt;
exception
when others then
dbms_output.put_line('解鎖失敗');
v_errortext := substr(sqlerrm, 1);
dbms_output.put_line(v_errortext);
end;
end loop;
end;
declare
indx varchar2(30);
sqlt varchar(1000);
nsqlt varchar(1000);
errortext varchar2(200);
bums number := 0;
begin
dbms_output.enable(100000000);
-- 迴圈遍歷出所需要建立索引的表以及索引欄位和索引名
for item in (select c.table_name,
cc.column_name,
('atsi_' || cc.column_name) indx,
cc.position column_position
from user_constraints c, user_cons_columns cc
where c.constraint_name = cc.constraint_name
and c.constraint_type = 'r'
minus
select i.table_name,
ic.column_name,
('atsi_' || ic.column_name) indx,
ic.column_position
from user_indexes i, user_ind_columns ic
where i.index_name = ic.index_name) loop
begin
-- 如果索引過長則進行擷取
if lengthb(item.indx) > 30 then
indx := substr(item.indx, 0, 30);
else
indx := item.indx;
end if;
-- 建立索引語句
sqlt := 'create index ' || indx || ' on ' || item.table_name || '(' ||
item.column_name || ')';
-- 輸出語句指令碼,以作記錄
dbms_output.put_line(sqlt || ';');
-- 執行語句
execute immediate sqlt;
exception
when others then
dbms_output.put_line('建立索引失敗');
errortext := substr(sqlerrm, 1);
dbms_output.put_line(errortext);
dbms_output.put_line('');
-- 如果名稱已被使用則字尾加個累加標誌
if errortext = 'ora-00955: 名稱已由現有物件使用' then
nsqlt := 'create index ' || indx || bums || ' on ' ||
item.table_name || '(' || item.column_name || ')';
bums := bums + 1;
begin
dbms_output.put_line(nsqlt || '; --- new');
execute immediate nsqlt;
exception
when others then
errortext := substr(sqlerrm, 1);
dbms_output.put_line(errortext);
end;
dbms_output.put_line(nsqlt);
end if;
end;
end loop;
end;
declare
-- 要回閃的表名字
tablename varchar2(30) := 't_taskparamdef';
-- 要回閃到的時間節點(2019-05-22 10:37:00)類似這種形式
rolltime varchar2(30) := '2019-05-22 11:49:00';
sqlt varchar(1000);
begin
-- 啟動要回閃表的行移動功能
sqlt := 'alter table ' || tablename || ' enable row movement';
-- 執行語句
execute immediate sqlt;
-- 開始回閃到指定時間的表資料
sqlt := 'flashback table ' || tablename || ' to timestamp to_timestamp(' || '''' ||
rolltime || '''' || ',' || '''' || 'yyyy-mm-dd hh24:mi:ss' || '''' || ')';
-- 執行語句
execute immediate sqlt;
end;
Oracle 常用指令碼
查詢當前連線數 select count from v session select username,machine,program,status,count machine as 連線數量 from v session where username cotsdev group by userna...
oracle 常用指令碼
substr 取得字串中指定起始位置和長度的字串 instr 判斷其是否含有指定的字元 replace 替換字元 create table table 1 as select from table 2 where 1 0 建表只複製表結構 表新增預設值 alter table table 1 mod...
ORACLE 常用指令碼
ifelse declare v num number begin v num 100 if v num 100 then elsif v num 50 then else end if end 帶引數儲存過程 create or replace procedure delete subscribe...