рдмрд╕ рджреВрд╕рд░реЗ рджрд┐рди рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдмрд╣реБрдд рд╣реА рджрд┐рд▓рдЪрд╕реНрдк рдХрд╛рдо рдерд╛ - рдУрд░реЗрдХрд▓ рдореЗрдВ рдЯреНрд░рд┐рдЧрд░ рд╕реЗ рд╢реЗрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдЬрд╛рд╡рд╛ рдореЗрдВ рдПрдХ рд╕рдВрдЧреНрд░рд╣реАрдд рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдУрд░реЗрдХрд▓ рд╕рдВрд╕реНрдХрд░рдг рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ - рдПрдХреНрд╕рдИ, рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред
Google, C рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдкрдиреЗ рд╢реБрджреНрдз рд░реВрдк рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдирд┐рд░реНрджреЗрд╢ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреЗ рдереЗ, рдореБрдЭреЗ рдХреБрдЫ рдЯрд┐рдкреНрд╕ рдХреЛ рдкреВрд░рд╛ рдХрд░рдирд╛ рдерд╛, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП Google рдиреЗ рднреА рдореЗрд░реА рдорджрдж рдХреАред рдореБрдЭреЗ рдЙрди рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд▓рд┐рдВрдХ рдпрд╛рдж рдирд╣реАрдВ рд╣реИ, рдЬрд╣рд╛рдБ рдореБрдЭреЗ рдЙрддреНрддрд░ рдорд┐рд▓реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдкреВрд░реА рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдмрддрд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реВрдБрдЧрд╛ред
рддреЛ, рдпрд╣ рд╕рдм рдЖрд╡рд╢реНрдпрдХ рд╕реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдмрдирд╛рдиреЗ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдЕрдВрджрд░ рд╢реЗрд▓ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдЧрд╛ред рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛрдб рдкреНрд░рд╛рдердорд┐рдХ рд╣реИ:
#include <stdio.h> #include <stdlib.h> #include <string.h> void sh(char*); void sh(char* cmd) { system(cmd); }
рдлрд╛рдЗрд▓ рдХреЛ рд╕реНрд░реЛрдд рдХреЛрдб рд╕реЗ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рд╕реНрд╡рдпрдВ рд╣реА рдЙрд╕ рд╕рдВрдХрд▓рди рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╣рдо gcc рдФрд░ ld рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╕реЛрд░реНрд╕ рдХреЛрдб рд╢реЗрд▓ рд╣реИред
gcc -fPIC -DSHARED_OBJECT -c shell.c ld -shared -o shell.so shell.o
рдореЗрд░реЗ рд▓рд┐рдП, C # рдФрд░ Java рдореЗрдВ рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд░реВрдк рдореЗрдВ, рдпрд╣ рдПрдХ рдЖрд╢реНрдЪрд░реНрдп рдХреА рдмрд╛рдд рд╣реИ рдХрд┐ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдм рдХреБрдЫ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдУрдПрд╕ рдкрд░ рдЙрд╕реА рдмрд┐рдЯ рдбреЗрдкреНрде рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ Oracle рдХреЗ рд╕рд╛рде рдорд╢реАрди рдкрд░ рд╣реИредрд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИ рдЬреЛ рд╢реЗрд▓ рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЗрд╕реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ - рдЙрддреНрдХреГрд╖реНрдЯред
рдЕрдЧрд▓рд╛ рдХрджрдо рдУрд░реЗрдХрд▓ рдореЗрдВ рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рддреИрдпрд╛рд░ рдХрд░рдирд╛ рд╣реИред рд╣рдо рдЗрд╕ рдЪрд░рдг рдХреЛ
$ ORACLE_HOME / bin рдореЗрдВ рдкрд░рд┐рдгрд╛рдореА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдХрд░ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ - рдЬреИрд╕рд╛ рдХрд┐ рдЕрднреНрдпрд╛рд╕ рд╕реЗ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ, рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рд╕реНрдерд┐рдд рд╣реЛрдиреЗ рдкрд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддреА рд╣реИред
рдУрд░реЗрдХрд▓ рдореЗрдВ, рд╣рдо рдПрдХ рдмрд╛рд╣рд░реА рдкреБрд╕реНрддрдХрд╛рд▓рдп рдмрдирд╛рддреЗ рд╣реИрдВ, $ ORACLE_HOME рдХреЛ рдкрде рдореЗрдВ рдмрджрд▓рддреЗ рд╣реИрдВред
create or replace library shell_lib is '$ORACLE_HOME/bin/shell.so';
рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реЛрдиреЗ - рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдмрдирд╛рдПрдВ рдЬреЛ рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдХрд╛рд░реНрдп рдХреЛ рдмреБрд▓рд╛рдПрдЧрд╛ред
create or replace procedure shell(cmd IN char) as external name "sh" library shell_lib language C parameters (cmd string);
рдЗрд╕ рд╕реНрддрд░ рдкрд░, рдУрд░реЗрдХрд▓ рдХреЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рддреИрдпрд╛рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реИ рдЬреЛ рд╢реЗрд▓ рдХреЛ рдХреЙрд▓ рдХрд░рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдУрд░реЗрдХрд▓ рдХреЛ рдЦреБрдж рдХреЛ рдЯреНрдпреВрди рдХрд░рдирд╛ рдкрдбрд╝ рд╕рдХрддрд╛ рд╣реИ - рдЖрдкрдХреЛ рд╢реНрд░реЛрддрд╛ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рдо
$ ORACLE_HOME / рдиреЗрдЯрд╡рд░реНрдХ / рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ / рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ , рдЬрд╣рд╛рдБ рд╣рдо
tnsnames.ora рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓рддреЗ рд╣реИрдВ рдФрд░ рдЬрд╛рдБрдЪрддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕рдореЗрдВ IPC рдХрдиреЗрдХреНрд╢рди рдХрд╛ рд╡рд┐рд╡рд░рдг рд╣реИ, рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд▓рд┐рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП
EXTPROC_CONNECTION_DATA = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = IPC)(KEY = extproc1))) (CONNECT_DATA =(SID = plsextproc)(PRESENTATION = RO)) )
рдпрджрд┐ рдРрд╕реА рдХреЛрдИ рд░реЗрдЦрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЗрд╕реЗ рдмрдирд╛рдПрдВ, рдпрджрд┐ рд╡рд╣рд╛рдБ рд╣реИ, рддреЛ
рдХреБрдВрдЬреА рдХреЛ рджреЗрдЦреЗрдВ рдФрд░ рдЗрд╕реЗ рдпрд╛рдж рд░рдЦреЗрдВред
рдЙрд╕рдХреЗ рдмрд╛рдж,
рд╢реНрд░реЛрддрд╛.рдУрд░рд╛ рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓реЗрдВ, рдЬреЛ рдЙрд╕реА рд╕реНрдерд╛рди рдкрд░ рд╣реИ рдФрд░ рдЬрд╛рдВрдЪреЗрдВ рдХрд┐
рд╢реНрд░реЛрддрд╛ рдЬрд┐рд╕реЗ рдЖрдк рдЖрдИрдкреАрд╕реА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрдиреЗрдХреНрдЯ
рдХрд░ рд░рд╣реЗ рд╣реИрдВ , рдХрдиреЗрдХреНрдЯ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд╕реЗрдЯрдЕрдк рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛:
(ADDRESS = (PROTOCOL = IPC)(KEY = extproc1))
рдЕрдЧрд░ рдРрд╕реА рдХреЛрдИ рд╕реЗрдЯрд┐рдВрдЧ рдирд╣реАрдВ рд╣реИ - рдЬреЛрдбрд╝реЗрдВ, рдЕрдЧрд░ рд╡рд╣рд╛рдБ рд╣реИ - tnsnames.ora рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдорд╛рди рдХреЗ рд╕рд╛рде рдХреБрдВрдЬреА рдХрд╛ рдорд╛рди рдЬрд╛рдВрдЪреЗрдВ, рдЙрдиреНрд╣реЗрдВ рдореЗрд▓ рдЦрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдпрджрд┐ рдХрдо рд╕реЗ рдХрдо рдПрдХ tnsnames.ora рдпрд╛ рд╢реНрд░реЛрддрд╛ .ora рдлрд╝рд╛рдЗрд▓ рдмрджрд▓ рдЧрдИ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рд╢реНрд░реЛрддрд╛ рдХреЛ рдкреБрдирдГ рд▓реЛрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
lsnrctl stop lsnrctl start
рдЗрди рд╕рд░рд▓ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рд╢реЗрд▓ рдХреЛ рдУрд░реЗрдХрд▓ рдореЗрдВ рдХрд┐рд╕реА рднреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ / рдлрд╝рдВрдХреНрд╢рди / рдЯреНрд░рд┐рдЧрд░ рд╕реЗ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред