Vilofunktionen i Oracle är i själva verket ett förfarande som kan inkluderas i en funktion snarare än en funktion i sig . Förvirring uppstår ofta på grund av slående likheter mellan de två , med den enda verkliga skillnaden är att ett förfarande följer instruktioner som inte alltid returnerar ett värde , medan en funktion måste alltid avslutas med ett returvärde . Lägga PL /SQL-satser som sätter en Oracle-databas " att sova " är en gemensam administrativ uppgift och beroende på dina önskemål , kan slutanvändarna också använda en sömn alternativ . Identifiering
sätta en Oracle-databas för att sova betyder precis vad det säger . De uttalanden som du skriver medföra att databasen avbryta normal drift eller sluta arbeta , ibland för så lite som några hundradelar av en sekund . Till exempel kan slutanvändarna lägga en sömn förfarande för att pausa databasen innan den sätter ny information i en tabell . Databas administratörer kan använda en sleep -funktion för att tala databasen för att vänta en viss tid innan du försöker köra en misslyckad åtgärd , eller att pausa databasen medan den utför en rutinmässig säkerhetskopiering .
Process
Oracle ger dig tre alternativ om du är administratör och ett alternativ om du är en slutanvändare för kodning och användning av sömn förfarandet i PL /SQL-satser . De tre administrativa kommandon är dbms_backup_restore , dbms_drs och dbms_lock och slutanvändaren kommandot user_lock . Den dbms_backup_restore alternativet stoppar databasen under säkerhetskopiering och återställning förfaranden, dbms_drs - eller distribuerad resurs schemaläggning - kan avbryta en session under resursoptimering och både DBMS och user_lock är användbara för att ge exklusiv användning till en viss maskin eller terminal under en begränsad tid , genomdriva en tidsfrist för en read_lock och synkronisera applikationer .
syntax
Medan själva kommandot för varje varierar beroende på vilket alternativ du väljer , den allmänna syntaxen format för att skriva en sömn inleds genom att proceduren med uttalandet " CREATE PROCEDURE_sleep [ ( sLEEPTIME som heltal ) ] IS . " början delen av uttalandet skapar proceduren och information inom hakparenteser identifierar dess parametrar , vilket i det här fallet är namnet på proceduren , IN identifierare som talar om Oracle förfarandet kan också användas inom en funktion och INTEGER som definierar datatypen . Börja proceduren med ett enkelt " BEGIN " uttalande och på följande rad identifiera alternativ och dess parametrar , såsom SYS.DBMS_BACKUP_RESTORE.SLEEP ( sleepTime_in_seconds = 5.01 ) innan du avslutar proceduren med END uttalande :
SKAPA PROCEDURE_sleep [ ( sleepTime_in_minutes som heltal ) ] ISBEGINSYS.DBMS_BACKUP_RESTORE.SLEEP ( sleepTime_in_minutes = 15.01 ) , END ;/
Överväganden
När det gäller att bevilja EXECUTE-privilegier för att avsluta användare för user_lock.sleep kommandot , förstår att det inte bara kommer att slutanvändare har möjlighet att skriva en sömn förfarande , men även alla rutiner låsning i samband med detta kommando . Dessutom kan storleken och installationen av din Oracle-databas hindra dig från att bevilja EXECUTE-privilegier till alla slutanvändare . På grund av detta rekommenderar Oracle bevilja lås privilegier enligt behov eller roll inom företaget .