oracle練習腳本
Ⅰ oracle 測試腳本怎麼寫
你好:你的測試得看是用來干什麼的了,如果是插入數據的話,那麼直接用procere來實現循環插入。
如果是想監控oracle的性能的話,那麼用spotlight等監控工具就可以實現io等的監控,也可以用awr報告來進行系統性能分析。只能說具體問題具體分析了
Ⅱ oracle 如何編寫定時腳本
用job,具體用法:
declare
n_job binary_integer;
begin
dbms_job.submit(n_job, '你要執行的東西', sysdate, TRUNC(LAST_DAY(SYSDATE))+4+2/24);
end;
-- 每月4號執行
dbms_job.submit(n_job_01,'你調的東西',sysdate,'TRUNC(LAST_DAY(SYSDATE))+4+2/24');
-- 每分鍾執行一次
dbms_job.submit(n_job_01,'你調的東西',sysdate,'TRUNC(sysdate,』mi』) + 1 / (24*60)');
-- 凌晨兩點執行
dbms_job.submit(n_job_01,'你調的東西',sysdate,'TRUNC(sysdate) + 1 + 2/24');
-- 每周一凌晨2點執行 周一是每周的第二天next_day(sysdate,2)同理周二是第三天,next_day(sysdate,3)
dbms_job.submit(n_job_01,'你調的東西',sysdate,'TRUNC(next_day(sysdate,2))+2/24');
-- 每月1日凌晨兩點執行
dbms_job.submit(n_job_01,'你調的東西',sysdate,'TRUNC(LAST_DAY(SYSDATE))+1+2/24');
-- 每季第一天凌晨兩點執行
dbms_job.submit(n_job_01,'你調的東西',sysdate,'TRUNC(ADD_MONTHS(SYSDATE,3),'Q') + 2/24');
-- 每年7月1日和1月1日凌晨2點
dbms_job.submit(n_job_01,'你調的東西',sysdate,'ADD_MONTHS(trunc(sysdate,'yyyy'),6)+2/24');
-- 每年1月1日凌晨2點執行
dbms_job.submit(n_job_01,'你調的東西',sysdate, 'Add_months(trunc(sysdate,'yyyy'), 12) +2/24');
Ⅲ 幾個簡單常用的oracle許可權查詢腳本
你好:下面語句中有你需要的這個許可權:select any table(如果針對單個用戶的表話,這個沒有,只能一個表一個表的授權)
創建用戶並授權
上接第一步。
在sql>後面輸入創建用戶的語句:
create user vpetl identified by vpetl
default tablespace TBS_ETL_DATA;
回車,出現「User created.」表示用戶創建成功。
在SQL>後面輸入給用戶授權的語句:
grant connect,resource,alter system,debug connect session,select any table,delete any table,drop any table,alter any table to vpetl;
回車,出現「Grant succeeded.」表示給用戶授權成功。
在SQL>後面輸入給用戶授權的語句:
grant execute on DBMS_LOCK to vpetl;
回車,出現「Grant succeeded.」表示給用戶授權成功。
在SQL>後面輸入給用戶授權的語句:
grant select on v_$session to vpetl;
回車,出現「Grant succeeded.」表示給用戶授權成功。
在SQL>後面輸入給用戶授權的語句:
grant select on v_$ACCESS to vpetl;
回車,出現「Grant succeeded.」表示給用戶授權成功。
在SQL>後面輸入給用戶授權的語句:
grant alter system to vpetl;
回車,出現「Grant succeeded.」表示給用戶授權成功。
在SQL>後面輸入給用戶授權的語句:
grant insert any table,update any table to vpetl;
回車,出現「Grant succeeded.」表示給用戶授權成功。
Ⅳ oracle設置環境變數腳本
#!/bin/bash
#centos oracle g 前期安裝環境檢查腳本
#將所需要安裝的包(rpm格式)與腳本放在一個目錄下
ss=$PWD
cd $ss
rpm ivh * rpm
#ORACLE_BASE=/opt/oracle
echo n 輸入ORACLE_BASE(默認/opt/oracle):
read ORACLE_BASE
if [ z $ORACLE_BASE ]
then
ORACLE_BASE=/opt/oracle
fi
#ORACLE_HOME=$ORACLE_BASE/proct/ /db_
echo n 輸入 HOME (默認 proct/ /db_ ):
read HOME
if [ z $HOME ]
then
HOME=proct/ /db_
fi
ORACLE_HOME=$ORACLE_BASE/$HOME
#ORACLE_SID=oral
echo n 輸入 ORACLE_SID (默認 orcl):
read ORACLE_SID
if [ z $ORACLE_SID ]
then
困宴ORACLE_SID=orcl
fi
USER=oracle
SYSCTL=/etc/nf
LIMITS=/etc/security/nf
PAM=/etc/pam d/login
PROFILE=/etc/profile
BASH_PROFILE=/home/oracle/ bash_profile
#IPADDR=`ifconfig eth |grep inet addr |cut d : f | cut d f `
#HOSTS=/etc/hosts
#NEORK=/etc/sysconfig/neork
信尺局#hostname
#grep v HOSTNAME $NEORK > $NEORK
#echo HOSTNAME=$HOSTNAME >> $NEORK
#echo $IPADDR $HOSTNAME >> $HOSTS
#加入用戶
useradd g oinstall G dba $USER
groupadd oinstall
groupadd dba
mkdir p $ORACLE_BASE
chown R $USER:oinstall $ORACLE_BASE
#內核設置
cat >> $SYSCTL << EOF
kernel msgmni=
kernel shmmni=
kernel sem=
fs file max=
net ipv ip_local_port_range=
net ipv tcp_sack=
net ipv tcp_timestamps=
net ipv tcp_max_syn_backlog=
net ipv tcp_keepalive_time=
re rmem_default=
re rmem_max=
re wmem_default=
re wmem_max=
EOF
#限制設置
cat>> $LIMITS <<EOF
oracle soft nproc
oracle hard nproc
oracle滑讓 soft nofile
oracle hard nofile
EOF
#安全設置
cat >> $PAM <<EOF
session required /lib/security/pam_limits so
session required pam_limits so
EOF
#全局環境變數設置
cat >> $PROFILE <<EOF
if [ $USER = oracle ]; then
if [ $SHELL = /bin/ksh ]; then
ulimit p
ulimit n
else
ulimit u n
fi
fi
EOF
#oracle環境變數設置
cat >> $BASH_PROFILE <<EOF
export LC_CTYPE=en_US UTF
export ORACLE_SID=orcl
export ORACLE_BASE=/opt/oracle
export ORACLE_HOME=/opt/oracle/proct/ /db_
export TNS_ADMIN=$ORACLE_HOME/neork/admin
export ORA_DB=$ORACLE_HOME/dbs
export ORACLE_BDUMP=$ORACLE_BASE/shtkt/bmp
export ORACLE_TERM=xterm
export NLS_LANG=AMERICAN_AMERICA ZHS GBK
export ORA_NLS =$ORACLE_HOME/omon/nls/admin/data
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib:/usr/local/lib
export LIBPATH=$ORACLE_HOME/lib:$ORACLE_HOME/ctx/lib
export CLASSPATH=$ORACLE_HOME/JRE/lib:$ORACLE_HOME/JRE/lib/rt jar:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
PATH=$PATH:$HOME/bin:$ORACLE_HOME/bin
export PATH
umask
EOF
source /home/oracle/ bash_profile
sleep
export DISPLAY=:
xhost +
export LC_ALL=en_US
lishixin/Article/program/Oracle/201311/18577
Ⅳ ORACLE DBA常用SQL腳本工具-管理篇(1)
在較長時間的與oracle的交往中 每個DBA特別是一些大俠都有各種各樣的完成各種用途的腳本工具 這樣很方便的很快捷的完成了日常的工作 下面把我常用的一部分展現給大家 此篇主要側重於資料庫管理 這些腳本都經過嚴格測試 表空間統計 A 腳本說明 這是我最常用的一個腳本 用它可以顯示出資料庫中所有表空間的狀態 如表空間的大小 已使用空間 使用的百分比 空閑空間數及現在表空間的最大塊是多大 B 腳本原文:SELECT upper(f tablespace_name) 表空間名 d Tot_grootte_Mb 表空間大小(M) d Tot_grootte_Mb f total_bytes 已顫模使用空間乎亮(M) to_char(round((d Tot_grootte_Mb f total_bytes) / d Tot_grootte_Mb * ) ) 使用比 f total_bytes 空閑空間(M) f max_bytes 最大塊(M) FROM(SELECT tablespace_name round(SUM(bytes)/( * ) ) total_bytes round(MAX(bytes)/( * ) ) max_bytesFROM sys dba_free_spaceGROUP BY tablespace_name) f (SELECT dd tablespace_name round(SUM(dd bytes)/( * ) ) Tot_grootte_MbFROM sys dba_data_files ddGROUP BY dd tablespace_name) dWHERE d tablespace_name = f tablespace_nameORDER BY DESC; 查看無法擴展的段 A 腳本說明 ORACLE對一個段比如表段或索引無法擴展時 取決的並不是表空間中剩餘的空間是多少 而是取於這些剩餘空間中最大的塊是否夠表比索引的 NEXT 值大 所以有時一個表空間剩餘幾個G的空閑空間 在你使用時ORACLE還是提示某個表或索引無法擴展 就是由於這一點 這時說明空間的碎片太多了 這個腳本是找出無法擴展的段的一些信息 B 腳本原文 SELECT segment_name segment_type owner a tablespace_name tablespacename initial_extent/ inital_extent(K) next_extent/ next_extent(K) pct_increase b bytes/ tablespace max free space(K) b sum_bytes/ tablespace total free space(K) FROM dba_segments a (SELECT tablespace_name MAX(bytes) bytes SUM(bytes) sum_bytes FROM dba_free_space GROUP BY tablespace_name) bWHERE a tablespace_name=b tablespace_nameAND next_extent>b bytesORDER BY ; 查看段(表段 索引段)所使用空間的大小 A 腳本說明 有時你可能想知道一個表或一個索引佔用多少M的空間 這個腳本就是滿足你的要求的 把<>中的內容替換一下就可以了 B 腳本原文 SELECT owner segment_name SUM(bytes)/ / FROM dba_segmentsWHERE owner=<segment owner>And segment_name=<your table or index name>歲洞寬GROUP BY owner segment_nameORDER BY DESC; 查看資料庫中的表鎖 A 腳本說明 這方面的語句的樣式是很多的 各式一樣 不過我認為這個是最實用的 不信你就用一下 無需多說 鎖是每個DBA一定都涉及過的內容 當你相知道某個表被哪個session鎖定了 你就用到了這個腳本 B 腳本原文 SELECT A OWNER A OBJECT_NAME B XIDUSN B XIDSLOT B XIDSQN B SESSION_ID B ORACLE_USERNAME B OS_USER_NAME B PROCESS B LOCKED_MODE C MACHINE C STATUS C SERVER C SID C SERIAL# C PROGRAMFROM ALL_OBJECTS A V$LOCKED_OBJECT B SYS GV_$SESSION CWHERE ( A OBJECT_ID = B OBJECT_ID )AND (B PROCESS = C PROCESS ) ANDORDER BY ; 處理存儲過程被鎖 A 腳本說明 實際過程中可能你要重新編譯某個存儲過程理總是處於等待狀態 最後會報無法鎖定對象 這時你就可以用這個腳本找到鎖定過程的那個sid 需要注意的是查v$access這個視圖本來就很慢 需要一些布耐心 B 腳本原文 SELECT * FROM V$ACCESSWHERE owner=<object owner>And object<procere name> 查看回滾段狀態 A 腳本說明這也是DBA經常使用的腳本 因為回滾段是online還是full是他們的關懷之列嘛B SELECT a segment_name b statusFROM Dba_Rollback_Segs a v$rollstat bWHERE a segment_id=b usnORDER BY 看哪些session正在使用哪些回滾段 A 腳本說明 當你發現一個回滾段處理full狀態 你想使它變回online狀態 這時你便會用alter rollback segment rbs_seg_name shrink 可很多時侯確shrink不回來 主要是由於某個session在用 這時你就用到了這個腳本 找到了sid的serial#餘下的事就不用我說了吧 B 腳本原文SELECTr name 回滾段名 s sid s serial# s username 用戶名 s status t cr_get t phy_io t used_ublk t noundo substr(s program ) 操作程序FROM sys v_$session s sys v_$transaction t sys v_$rollname rWHEREt addr = s taddr and t xisn = r usn AND r NAME IN ( ZHYZ_RBS )ORDERBY t cr_get t phy_io 查看正在使用臨時段的session A 腳本說明 許多的時侯你在查看哪些段無法擴展時 回顯的結果是臨時段 或你做表空間統計時發現臨段表空間的可用空間幾乎為 這時按oracle的說法是你只有重新啟動資料庫才能回收這部分空間 實際過程中沒那麼復雜 使用以下這段腳本把佔用臨時段的session殺掉 然後用alter tablespace temp coalesce;這個語句就把temp表空間的空間回收回來了 B 腳本原文SELECT username sid serial# sql_address machine program tablespace segtype contentsFROM v$session se v$sort_usage suWHERE se saddr=su session_addr(待續) lishixin/Article/program/Oracle/201311/18647
Ⅵ Oracle 的腳本
我只能教你大概思路,程序還是得靠自己寫啊。同學!
能下發,說明兩個庫是通的,請問是否使用DBLINK來進行表查詢?
如果有,則直接在C庫中你 select count(*) from B@dblink_name ;查詢。
至於匹配、下發數據你可以用過程,函數。或者SHELL腳本來實現。
補充:
我把你的例子標准化一下:
declare
n_count number(10); --定義變數類型 數值10位
begin
select count(*) into n_count from table;
if n_count =0 then
insert into ...;
end if;
end;