除了Oracle的激活和可用性之外,我們還需要進(jìn)行檢測(cè)以確保它可以用,這樣我們還可以檢測(cè)表空間的容量 。
為代縣等地區(qū)用戶提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及代縣網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站、成都外貿(mào)網(wǎng)站建設(shè)公司、代縣網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!
檢測(cè)的腳本:
◆假設(shè)所有的Oracle環(huán)境都已經(jīng)搭建起來(lái)了
◆假設(shè)所有的擴(kuò)展都已經(jīng)達(dá)到了最大的限度
◆假設(shè)左右的表空間都缺乏運(yùn)行的空閑空間
下面的腳本可以在你想要的任何時(shí)候通過(guò)crontab 來(lái)中斷 。另外,如果上面的例外情況出現(xiàn)了的話,您還可以就這個(gè)腳本寫(xiě)信或者電子郵件給支持人員獲得幫助 。
如果您有什么其他的測(cè)試,這個(gè)腳本可以讓您輕松地進(jìn)行修改以加以利用 。我使用這個(gè)Monitororcl 腳本作為模板并且在末尾添加了功能 。
按crontab來(lái)調(diào)用query_oracle_instances.sh 腳本:
#!/bin/ksh
. /u01/home/oracle/.profile
/u01/app/oracle/admin/monitororcl
cat /u01/app/oracle/admin/Get_Oracle_Instance_Listexit
Get_Oracle_Instance_List 腳本如下:
instance_name1 tnsname1 sys_password_for_this_instanceinstance_name2 tnsname2 sys_password_for_this_instanceinstance_name3 tnsname3 sys_password_for_this_instance下面是MONITORORCL腳本:
#!/bin/ksh
#script : Rick Stehno
# script will monitor to see if Oracle is upwhile [ "$1" != "" ]
do
ORACLE_INSTANCE=$1
ORACLE_TNS=$2
USR_ID=sys
USR_PASS=$3
# echo "Instance: [$ORACLE_INSTANCE]"
# echo "TNS [$ORACLE_TNS]"
# echo "PASS: [$USR_PASS]"
LOGFIL=/u01/app/oracle/admin/monitordev1.outNOTIFY_LIST=userid1@mobilephone.com,userid2,userid3@pagercompany.com#
# 檢測(cè)關(guān)鍵的段沒(méi)有達(dá)到最大限度
sqlplus -s $LOGFIL 2/dev/null
$USR_ID/$USR_PASS@$ORACLE_TNS
set pages 0
select distinct YES from dba_segments
where extents = (max_extents-5) and segment_name not like 1.%;EOF1
grep -i ^ORA- $LOGFIL /dev/null
if [ $? -eq 0 ]
then
echo "$0 failed: check $ORACLE_INSTANCE for problems" | /bin/mailx -s "${ORACLE_INSTANCE} : Script failed" $NOTIFY_LISTexit 1
fi
MAXEXTENTS_REACHED=`awk { print $1 } $LOGFIL`if [ "$MAXEXTENTS_REACHED" = "YES" ]
then
echo "$0 failed: $ORACLE_INSTANCE max extents reached" | /bin/mailx -s "${ORACLE_INSTANCE} : max extents reached" $NOTIFY_LISTexit 1
fi
#
# 檢測(cè)是否能分配下一個(gè)段
sqlplus -s $LOGFIL 2/dev/null
$USR_ID/$USR_PASS@$ORACLE_TNS
set pages 0
select distinct YES from dba_segments ds
where next_extent
(select max(bytes) from dba_free_space
where tablespace_name = ds.tablespace_name);EOF2
grep -i ^ORA- $LOGFIL /dev/null
if [ $? -eq 0 ]
then
echo "$0 failed: check $ORACLE_INSTANCE for problems" | /bin/mailx -s "${ORACLE_INSTANCE} : Script failed" $NOTIFY_LISTexit 1
fi
POSSIBLE_NEXTEXT_FAIL=`awk {print $1 } $LOGFIL`if [ "$POSSIBLE_NEXTEXT_FAIL" = "YES" ]
then
echo "$0 failed: $ORACLE_INSTANCE cannot extend segment" | /bin/mailx -s "${ORACLE_INSTANCE} : max extents reached" $NOTIFY_LISTexit 1
fi
shift 3
# echo "shift done"
done
echo "Successful completion of $0" `date`exit 0
有兩種含義的表大小。一種是分配給一個(gè)表的物理空間數(shù)量,而不管空間是否被使用??梢赃@樣查詢獲得字節(jié)數(shù):
select segment_name, bytes?
from user_segments?
where segment_type = 'TABLE';?
或者
Select Segment_Name,Sum(bytes)/1024/1024 From User_Extents Group By Segment_Name
另一種表實(shí)際使用的空間。這樣查詢:
analyze table emp compute statistics;?
select num_rows * avg_row_len?
from user_tables?
where table_name = 'EMP';
查看每個(gè)表空間的大小
Select Tablespace_Name,Sum(bytes)/1024/1024 From Dba_Segments Group By Tablespace_Name
1. 查看所有表空間大小 SQL select tablespace_name,sum(bytes)/1024/1024 from dba_data_files 2 group by tablespace_name; 2. 已經(jīng)使用的表空間大小 SQL select tablespace_name,sum(bytes)/1024/1024 from dba_free_space 2 group by tablespace_name; 3. 所以使用空間可以這樣計(jì)算 select a.tablespace_name,total,free,total-free used from ( select tablespace_name,sum(bytes)/1024/1024 total from dba_data_files group by tablespace_name) a, ( select tablespace_name,sum(bytes)/1024/1024 free from dba_free_space group by tablespace_name) b where a.tablespace_name=b.tablespace_name; 4. 下面這條語(yǔ)句查看所有segment的大小。 Select Segment_Name,Sum(bytes)/1024/1024 From User_Extents Group By Segment_Name 5. 還有在命令行情況下如何將結(jié)果放到一個(gè)文件里。 SQL spool out.txt SQL select * from v$database; SQL spool off
可用如下語(yǔ)句查看:
select?round(BYTES/1024/1024,2)||'M'?from?user_segments?where?segment_name='表名';
注意:表名需要用英文大寫(xiě)。
如要查詢數(shù)據(jù)庫(kù)中emp表的大小,用如下語(yǔ)句:
select round(BYTES/1024/1024,2)||'M' from user_segments where segment_name='EMP';
查詢結(jié)果:
查詢結(jié)果代表EMP表所占空間大小為0.06M。