ºìÁªLinuxÃÅ»§
Linux°ïÖú

ÔÚORACLEÀïÓô洢¹ý³Ì¶¨ÆÚ·Ö¸î±í

·¢²¼Ê±¼ä:2007-08-27 10:11:19À´Ô´:ºìÁª×÷Õß:JustForLOVE
ÔÚORACLEÀïÓô洢¹ý³Ì¶¨ÆÚ·Ö¸î±í
baidu

¡¡¡¡OracleÊý¾Ý¿âÀï´æ·Åן÷ÖÖ¸÷ÑùµÄÊý¾Ý£¬ÆäÖÐÓÐһЩÊý¾Ý±í»áËæ×Åʱ¼äµÄÍÆÒÆ£¬Ô½À´Ô½´ó¡£Èç½»ÓÑÁÄÌìµÄÈÕÖ¾¡¢¶ÌÐÅÊÕ·¢µÄÈÕÖ¾¡¢Éú²úϵͳµÄÈÕÖ¾¡¢¶¯Ì¬ÍøÕ¾·¢²¼ÏµÍ³µÄÈÕÖ¾µÈµÈ¡£ÕâÑùµÄÐÅÏ¢ÓÖºÍʱ¼ä½ôÃÜÏà¹Ø£¬ÓÐûÓа취ÈÃÕâЩÈÕÖ¾±íÄÜ°´Ê±¼ä×Ô¶¯·Ö¸î³ÉÀúÊ·ÄêÔÂ(Èçlog200308,log200309)µÄ±íÄØ? Çë¿´¿´ÎÒÓô洢¹ý³Ì¶¨ÆÚ·Ö¸î±íµÄ·½·¨°É¡£

Ò»¡¢ÎÊÌâµÄÒý³ö

¡¡¡¡1.³õѧÊý¾Ý¿âʱֻ֪µÀÓÃdeleteÀ´É¾³ý±íÀïµÄÊý¾Ý¡£µ«ÔÚOracleÊý¾Ý¿âÀ´óÁ¿delete¼Ç¼ºó£¬²¢²»ÄÜÊͷűíËùÕ¼ÓõÄÎïÀí¿Õ¼ä£¬ÕâÀïÃæÓÐÒ»¸ö¸ßˮλµÄ¸ÅÄËùÒÔÎÒÃDz»ÄÜÓÃdeleteÀ´·Ö¸î±í¡£

¡¡¡¡2.ÓÃÖØÃüÃû(rename)±íµÄ·½·¨

¡¡¡¡ (1) ÏȽ¨Ò»¸öºÍÔ­À´ÈÕÖ¾±í(¼ÙÈçÊÇlog)Êý¾Ý½á¹¹Ò»Ä£Ò»ÑùµÄбí(Èçlog_new)£¬½¨Ô¼Êø¡¢Ë÷Òý¼°Ö¸¶¨×ֶεÄĬÈÏÖµ;

¡¡¡¡ (2) ÖØÃüÃû±ílogµ½log_YYYYMM;

ҪעÒâµÄÎÊÌâÊÇOLTPϵͳ¿ÉÄÜ»áÒòΪDML²Ù×÷×è°­ÖØÃüÃûÖ´Ðгɹ¦£¬³öÏÖORA-00054×ÊÔ´ÕýæµÄ´íÎóÌáʾ£¬ÐèÒªÊÔ¶à´Î²ÅÄܳɹ¦¡£

¡¡¡¡ (3) ÖØÃüÃû±ílog_newµ½log¡£

¡¡¡¡ÕâÑùÓ¦ÓóÌÐò²»ÓÃÐÞ¸Ä(ÊÜÓ°ÏìµÄʱ¼ä½ö¼¸ÃëÖÓ)£¬ÈÕÖ¾±í¾Í±»½Ø¶Ï·Ö¸îÁË¡£

¡¡¡¡ÉÏÊö²½Öè¿ÉÒÔÔÚOracleÀïÓô洢¹ý³ÌÀ´ÊµÏÖ¡£

¶þ¡¢Óô洢¹ý³ÌÀ´·Ö¸î±í

¡¡¡¡¿ÉÒÔ¿´µ½ÔÚÖØÃüÃû±íµÄ·½·¨ÖУ¬²½Öè(2)ÊǸö¹Ø¼ü¡£ÏÂÃæÕâ¸örename_table¹ý³Ì»áÔÚÓÐËø×è°­µÄÇé¿öÏÂÓõݹéµÄ·½Ê½ÖØÊÔ100´Î¡£

ÖØÃüÃûԭʼ±íµ½Ä¿±ê±íµÄ´æ´¢¹ý³Ìrename_table:

create or replace procedure rename_table
(source_name in varchar2,
target_name in varchar2,
times in out number)
is
query_str varchar2(4000);
source_name1 varchar2(64);
target_name1 varchar2(64);
cursor c1 is select segment_name from user_segments
where segment_name=upper(source_name);
dummy c1%rowtype;
cursor c2 is select segment_name from user_segments
where segment_name=upper(target_name);
dummy2 c2%rowtype;
begin
source_name1:=source_name;
target_name1:=target_name;
open c1;
fetch c1 into dummy;
-- if c1%found then
-- dbms_output.put_line(source_name1||'exist!');
-- end if;
open c2;
fetch c2 into dummy2;
-- if c2%notfound then
-- dbms_output.put_line(target_name1||'not exist!');
-- end if;
if c2%notfound and c1%found then
query_str :='alter table '||source_name1||' rename to '
||target_name1;
execute immediate query_str;
dbms_output.put_line('rename success!');
end if;
close c1;
close c2;
exception
WHEN OTHERS THEN
times:=times+1;
if times<100 then
-- dbms_output.put_line('times:'||times);
rename_table(source_name1,target_name1,times);
else
dbms_output.put_line(SQLERRM);
dbms_output.put_line('error over 100 times,exit');
end if;
end;

/
½Ø¶Ï·Ö¸îlog±íµÄ´æ´¢¹ý³Ìlog_history:
create or replace procedure log_history
is
query_str varchar2(32767);
year_month varchar2(8);
times number;
begin
select to_char(sysdate-15,'YYYYMMDD') into year_month from dual;
times:=0;
query_str :='create table log_new pctfree 10 pctused 80
as select * from log where 1=2';
execute immediate query_str;
query_str :='alter table log_new add constraints log_'
||year_month||'_pk
primary key (id) tablespace indx nologging pctfree 10';
execute immediate query_str;
query_str :='alter table log_his modify logtime default sysdate';
execute immediate query_str;
query_str :='create index log_'||year_month||'_logtime on log(logtime)
tablespace indx nologging pctfree 10';
execute immediate query_str;
rename_table('log','log'||year_month,times);
query_str :='alter table log_new rename to log';
execute immediate query_str;
end;
/

¡¡¡¡µ±È»Äú¹¤×÷»·¾³µÄÈÕÖ¾±í¿ÉÄܺÍÎÒÕâ¸ö×öÀý×ÓµÄÈÕÖ¾±í½á¹¹ÉÏÓÐËù²»Í¬£¬Ô¼ÊøÌõ¼þ¡¢Ë÷ÒýºÍĬÈÏÖµ¶¼²»¾¡Ïàͬ¡£Ö»ÒªÉÔ¼ÓÐ޸ľͿÉÒÔÁË¡£

Èý¡¢Óû§ÐèÒªÓÐcreate any tableϵͳȨÏÞ(²»ÊǽÇÉ«Àï°üº¬µÄȨÏÞ)

¡¡¡¡ÒòΪÔÚÖ´Ðд洢¹ý³Ìʱ£¬ÓɽÇÉ«¸³ÓèµÄȨÏÞ»áʧЧ, ËùÒÔÖ´ÐÐlog_historyµÄÓû§Ò»¶¨ÒªÓÐDBAµ¥¶À¸³ÓèµÄcreate any tableϵͳȨÏÞ¡£

¡¡¡¡×îºóÔÚOSÀﶨʱÿÔÂÒ»ºÅÁ賿0:00·ÖÖ´ÐÐlog_history£¬Èô洢¹ý³Ì¶¨ÆÚ·Ö¸î±í¡£

¡¡¡¡Èç¹ûÒª·Ö¸îµÄÈÕÖ¾±íºÜ¶à£¬Ä£·Âlog_history¿ÉÒÔдºÜ¶àÀàËƵĴ洢¹ý³ÌÀ´·Ö¸î²»Í¬ÏîÄ¿ÀïµÄÈÕÖ¾±í¡£È»ºóÈÃOS°´Ô£¬°´ÖÜ»òÕß²»¶¨ÆÚµÄÖ´ÐÐÕâЩ´æ´¢¹ý³Ì, ¹ÜÀíÔ±Ö»Òª²é¿´ÈÕÖ¾¾Í¿ÉÒÔÁË¡£

ËÄ¡¢ÆäËü×¢ÒâÊÂÏî

¡¡¡¡Èç¹ûÓ¦ÓóÌÐòÓÐBUG£¬¿ÉÄܶÔÔÚÓÃԭʼÈÕÖ¾±í²úÉú³¤ÆÚ²»ÄÜÊͷŵÄËø£¬Ö´ÐÐlog_historyÖØÃüÃû»á²»³É¹¦¡£

¡¡¡¡ÕâʱDBA¿ÉÒԲ鿴Êý¾Ý×Öµä:

select object_id,session_id,locked_mode from v$locked_object;
select t2.username,t2.sid,t2.serial#,t2.logon_time
from v$locked_object t1,v$session t2
where t1.session_id=t2.sid order by t2.logon_time;

¡¡¡¡Èç¹ûÓг¤ÆÚ³öÏÖµÄһģһÑùµÄÁУ¨°üÀ¨µÇ¼ʱ¼ä£©£¬¿ÉÄÜÊÇûÓÐÊͷŵÄËø¡£

¡¡¡¡ÎÒÃÇÒªÔÚÖ´ÐзָîÈÕÖ¾±íµÄ´æ´¢¹ý³ÌÇ°£¬ÓÃÏÂÃæSQLÓï¾äɱµô³¤ÆÚûÓÐÊÍ·Å·ÇÕý³£µÄËø£º

alter system kill session 'sid,serial#';

Îå¡¢½áÊøÓï

¡¡¡¡ÓÃÉÏÃæ½éÉܵĴ洢¹ý³Ì¶¨ÆÚ·Ö¸îÈÕÖ¾±íÓкܴóµÄÁé»îÐÔ¡£ÀúÊ·Êý¾Ý²»½ö²éѯ·½±ã£¬×ªÒƺͱ¸·ÝÆðÀ´Ò²¶¼ºÜÈÝÒס£UnixºÍWindowsƽ̨µÄ¶¼¿ÉÒÔʹÓ᣶ԷþÎñÆ÷Ó²ÅÌ¿Õ¼ä½ÏСµÄÖÐСÐ͹«Ë¾ÒâÒåÓÈÆäÃ÷ÏÔ¡£
ÎÄÕÂÆÀÂÛ

¹²ÓÐ 0 ÌõÆÀÂÛ