*отмеченные программные продукты не входят в комплект поставки, но желательны для правильной работы системы.
Установка Oracle 10g
Checking operating system version: must be 5.0, 5.1, 5.2 or 6.0. Actual 6.1 Failed <<<<
открыть oraparam.ini и добавить нужную версию в разделе [Certified Versions] через запятую Windows=5.0,5.1,5.2,6.0,6.1 :
В визарде при появлении ошибки поставить галочку "User Verified"
select name from v$datafile where rownum<2;
Далее:
create tablespace ACTIONS_01 logging datafile '<путь к файлу>/ACTIONS_01.DBF ' size 250M autoextend on next 100M maxsize 16984M;
create tablespace ACTIONS_02 logging datafile '<путь к файлу>/ACTIONS_02.DBF ' size 250M autoextend on next 100M maxsize 16984M;
create tablespace ACTIONS_03 logging datafile '<путь к файлу>/ACTIONS_03.DBF ' size 250M autoextend on next 100M maxsize 16984M;
create tablespace ACTIONS_04 logging datafile '<путь к файлу>/ACTIONS_04.DBF ' size 250M autoextend on next 100M maxsize 16984M;
create tablespace BLOB_STORAGE logging datafile '<путь к файлу>/BLOB_STORAGE.DBF ' size 250M autoextend on next 100M maxsize 16984M;
create tablespace INDX logging datafile '<путь к файлу>/INDX.DBF ' size 250M autoextend on next 100M maxsize 16984M;
create tablespace ST_BAR_JOBS_INDX logging datafile '<путь к файлу>/ST_BAR_JOBS_INDX.DBF ' size 250M autoextend on next 100M maxsize 16984M;
create tablespace ST_BAR_JOBS_01 logging datafile '<путь к файлу>/ST_BAR_JOBS_01.DBF ' size 250M autoextend on next 100M maxsize 16984M;
create tablespace ST_BAR_JOBS_02 logging datafile '<путь к файлу>/ST_BAR_JOBS_02.DBF ' size 250M autoextend on next 100M maxsize 16984M;
create tablespace ST_BAR_JOBS_03 logging datafile '<путь к файлу>/ST_BAR_JOBS_03.DBF ' size 250M autoextend on next 100M maxsize 16984M;
create tablespace ST_BAR_JOBS_04 logging datafile '<путь к файлу>/ST_BAR_JOBS_04.DBF ' size 250M autoextend on next 100M maxsize 16984M;
create tablespace ST_BAR_JOBS_05 logging datafile '<путь к файлу>/ST_BAR_JOBS_05.DBF ' size 250M autoextend on next 100M maxsize 16984M;
create tablespace ST_BAR_JOBS_06 logging datafile '<путь к файлу>/ST_BAR_JOBS_06.DBF ' size 250M autoextend on next 100M maxsize 16984M;
create tablespace ST_BAR_JOBS_07 logging datafile '<путь к файлу>/ST_BAR_JOBS_07.DBF ' size 250M autoextend on next 100M maxsize 16984M;
create tablespace ST_BAR_JOBS_08 logging datafile '<путь к файлу>/ST_BAR_JOBS_08.DBF ' size 250M autoextend on next 100M maxsize 16984M;
create tablespace ST_BAR_JOBS_09 logging datafile '<путь к файлу>/ST_BAR_JOBS_09.DBF ' size 250M autoextend on next 100M maxsize 16984M;
create tablespace ST_BAR_JOBS_10 logging datafile '<путь к файлу>/ST_BAR_JOBS_10.DBF ' size 250M autoextend on next 100M maxsize 16984M;
create tablespace ST_BAR_JOBS_11 logging datafile '<путь к файлу>/ST_BAR_JOBS_11.DBF ' size 250M autoextend on next 100M maxsize 16984M;
create tablespace ST_BAR_JOBS_12 logging datafile '<путь к файлу>/ST_BAR_JOBS_12.DBF ' size 250M autoextend on next 100M maxsize 16984M;
create tablespace ST_BAR_JOBS_13 logging datafile '<путь к файлу>/ST_BAR_JOBS_13.DBF ' size 250M autoextend on next 100M maxsize 16984M;
create tablespace ST_BAR_JOBS_14 logging datafile '<путь к файлу>/ST_BAR_JOBS_14.DBF ' size 250M autoextend on next 100M maxsize 16984M;
create tablespace ST_BAR_JOBS_15 logging datafile '<путь к файлу>/ST_BAR_JOBS_15.DBF ' size 250M autoextend on next 100M maxsize 16984M;
create tablespace ST_BAR_JOBS_17 logging datafile '<путь к файлу>/ST_BAR_JOBS_17.DBF ' size 250M autoextend on next 100M maxsize 16984M;
create tablespace ST_BAR_JOBS_22 logging datafile '<путь к файлу>/ST_BAR_JOBS_22.DBF ' size 250M autoextend on next 100M maxsize 16984M;
create tablespace ST_BAR_JOBS_32 logging datafile '<путь к файлу>/ST_BAR_JOBS_32.DBF ' size 250M autoextend on next 100M maxsize 16984M;
create tablespace ST_BAR_JOBS_33 logging datafile '<путь к файлу>/ST_BAR_JOBS_33.DBF ' size 250M autoextend on next 100M maxsize 16984M;
create tablespace ST_BAR_JOBS_20 logging datafile '<путь к файлу>/ST_BAR_JOBS_20.DBF ' size 250M autoextend on next 100M maxsize 16984M;
create tablespace STOCK logging datafile '<путь к файлу>/STOCK.DBF ' size 250M autoextend on next 100M maxsize 16984M;
create tablespace STOCKINDX logging datafile '<путь к файлу>/STOCKINDX.DBF ' size 250M autoextend on next 100M maxsize 16984M;
ALTER PROFILE DEFAULT LIMIT FAILED_LOGIN_ATTEMPTS UNLIMITED PASSWORD_LIFE_TIME UNLIMITED;
CREATE USER *USERNAME*
IDENTIFIED BY *USERPASSWORD*
DEFAULT TABLESPACE USERS
TEMPORARY TABLESPACE TEMP
/
GRANT ALTER SESSION TO *USERNAME*
/
GRANT ALTER SYSTEM TO *USERNAME*
/
GRANT CREATE ANY TRIGGER TO *USERNAME*
/
GRANT CREATE LIBRARY TO *USERNAME*
/
GRANT CREATE PROCEDURE TO *USERNAME*
/
GRANT CREATE SEQUENCE TO *USERNAME*
/
GRANT CREATE SESSION TO *USERNAME*
/
GRANT CREATE SYNONYM TO *USERNAME*
/
GRANT CREATE TABLE TO *USERNAME*
/
GRANT CREATE TRIGGER TO *USERNAME*
/
GRANT CREATE TYPE TO *USERNAME*
/
GRANT CREATE VIEW TO *USERNAME*
/
GRANT CREATE ANY CONTEXT TO *USERNAME*
/
GRANT SELECT ON sys.dba_lock TO *USERNAME*
/
GRANT EXECUTE ON sys.dbms_alert TO *USERNAME*
/
GRANT EXECUTE ON sys.dbms_job TO *USERNAME*
/
GRANT EXECUTE ON sys.dbms_lock TO *USERNAME*
/
GRANT EXECUTE ON sys.dbms_pipe TO *USERNAME*
/
GRANT EXECUTE ON sys.dbms_session TO *USERNAME*
/
GRANT EXECUTE ON sys.dbms_sql TO *USERNAME*
/
GRANT EXECUTE ON sys.dbms_system TO *USERNAME*
/
GRANT EXECUTE ON sys.dbms_crypto TO *USERNAME*
/
GRANT EXECUTE ON sys.dbms_obfuscation_toolkit TO *USERNAME*
/
GRANT SELECT ON sys.v_$lock TO *USERNAME*
/
GRANT SELECT ON sys.v_$process TO *USERNAME*
/
GRANT SELECT ON sys.v_$session TO *USERNAME*
/
GRANT SELECT ON sys.v_$sql TO *USERNAME*
/
GRANT SELECT ON sys.v_$sqltext TO *USERNAME*
/
GRANT SELECT ON sys.v_$parameter TO *USERNAME*
/
CREATE VIEW x$_kglpn AS SELECT * FROM x$kglpn
/
GRANT SELECT ON x$_kglpn TO *USERNAME*
/
CREATE SYNONYM *USERNAME*.x$kglpn FOR SYS.x$_kglpn
/
CREATE VIEW x$_kglob AS SELECT * FROM x$kglob
/
GRANT SELECT ON x$_kglob TO *USERNAME*
/
CREATE SYNONYM *USERNAME*.x$kglob FOR SYS.x$_kglob
/
CREATE VIEW x$_ksuse AS SELECT * FROM x$ksuse
/
GRANT SELECT ON x$_ksuse TO *USERNAME*
/
CREATE SYNONYM *USERNAME*.x$ksuse FOR SYS.x$_ksuse
/
CREATE VIEW v$_session_wait AS SELECT * FROM v$session_wait
/
GRANT SELECT ON v$_session_wait TO *USERNAME*
/
CREATE SYNONYM *USERNAME*.v$session_wait FOR SYS.v$_session_wait
/
alter user *USERNAME* quota unlimited on USERS
/
alter user *USERNAME* quota unlimited on ACTIONS_01
/
alter user *USERNAME* quota unlimited on ACTIONS_02
/
alter user *USERNAME* quota unlimited on ACTIONS_03
/
alter user *USERNAME* quota unlimited on ACTIONS_04
/
alter user *USERNAME* quota unlimited on BLOB_STORAGE
/
alter user *USERNAME* quota unlimited on INDX
/
alter user *USERNAME* quota unlimited on ST_BAR_JOBS_INDX
/
alter user *USERNAME* quota unlimited on ST_BAR_JOBS_01
/
alter user *USERNAME* quota unlimited on ST_BAR_JOBS_02
/
alter user *USERNAME* quota unlimited on ST_BAR_JOBS_03
/
alter user *USERNAME* quota unlimited on ST_BAR_JOBS_04
/
alter user *USERNAME* quota unlimited on ST_BAR_JOBS_05
/
alter user *USERNAME* quota unlimited on ST_BAR_JOBS_06
/
alter user *USERNAME* quota unlimited on ST_BAR_JOBS_07
/
alter user *USERNAME* quota unlimited on ST_BAR_JOBS_08
/
alter user *USERNAME* quota unlimited on ST_BAR_JOBS_09
/
alter user *USERNAME* quota unlimited on ST_BAR_JOBS_11
/
alter user *USERNAME* quota unlimited on ST_BAR_JOBS_12
/
alter user *USERNAME* quota unlimited on ST_BAR_JOBS_13
/
alter user *USERNAME* quota unlimited on ST_BAR_JOBS_14
/
alter user *USERNAME* quota unlimited on ST_BAR_JOBS_22
/
alter user *USERNAME* quota unlimited on ST_BAR_JOBS_32
/
alter user *USERNAME* quota unlimited on ST_BAR_JOBS_17
/
alter user *USERNAME* quota unlimited on ST_BAR_JOBS_15
/
alter user *USERNAME* quota unlimited on ST_BAR_JOBS_33
/
alter user *USERNAME* quota unlimited on ST_BAR_JOBS_10
/
alter user *USERNAME* quota unlimited on STOCK
/
alter user *USERNAME* quota unlimited on STOCKINDX
/
grant administer database trigger to *USERNAME*
/
После установки oracle и создания БД, делаем мультиплексирование control-файлов, на случай разрушения. Для этого:
1) Останавливаем БД. shutdown immediate
2) Клонируем control-файл (делаем из существующего 3 одинаковых с разными именами, из CONTROL01.CTL делаем CONTROL02.CTL и CONTROL03.CTL ).
3) Стартуем БД в режиме nomount. startup nomount/
4) Из-под sysdba выполняем скрипт:
alter system set control_files = 'ПУТЬ_К_ФАЙЛАМ_БД\CONTROL01.CTL','ПУТЬ_К_ФАЙЛАМ_БД\CONTROL02.CTL' ,'ПУТЬ_К_ФАЙЛАМ_БД\CONTROL03.CTL' scope=spfile;
5) Стартуем экземпляр. startup.
6) Дабы убедиться, что теперь задействованы три управляющих файла, из-под sysdba выполняем select * from V$CONTROLFILE, запрос должен вернуть три наших контролфайла.
Создание директории для мониторинга файлов трассировки
*под DBA выясняем где лежат файлы трассировки на сервере
SELECT VALUE FROM V$DIAG_INFO WHERE NAME = 'Default Trace File'
/*'/u01/app/oracle/diag/rdbms/dkn/DKN/trace/'*/
*под DBA создаем директорию и даем гранты пользователю ТОЖЕ
create or replace directory TRACE_FILES as '/u01/app/oracle/diag/rdbms/dkn/DKN/trace/'
/
grant read,write on directory TRACE_FILES to sys;
/
GRANT READ,write ON DIRECTORY TRACE_FILES TO DBA;
/
grant read,write on directory TRACE_FILES to *USER_NAME*;
/
declare
F1 UTL_FILE.FILE_TYPE;
vexists boolean ;
vfile_length integer ;
vblocksize integer ;
begin
-- F1 := UTL_FILE.FOPEN( 'TRACE_FILES', 'DKN_ora_59370.trc', 'w' ) ;
-- UTL_FILE.PUTF(F1, 'Look, Im writing to a file!!!\n');
-- UTL_FILE.FCLOSE(F1);
UTL_FILE.FGETATTR(
'TRACE_FILES', 'DKN_ora_59370.trc' ,
vexists ,
vfile_length ,
vblocksize );
if vexists then DBMS_OUTPUT.Put_Line('true '|| vfile_length||' '||vblocksize );
else DBMS_OUTPUT.Put_Line('false '|| vfile_length||' '||vblocksize ); end if;
end;
Язык системы по умолчанию
Для нерусскоязычных ОС проверить:
Прочие кодировки
Для решения проблемы с отображением шрифтов в CWMS3000 (системные сообщения, всплывающие подсказки) необходимо изменить значения параметров «1250» и «1252», которые находятся в ветке реестра HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Nls \ CodePage, с «c_1250.nls» на «c_1251.nls» и с «c_1252.nls» на «c_1251.nls» соответственно.
Для этого
После перезагрузки проблема с неправильным отображением шрифтов должна исчезнуть.
Кодировка Oracle-клиента
Важно изменить значение параметра NLS_Lang на том компе, откуда производится импорт. На машинах клиента тоже можно настроить параметр.
Импорт дампа БД (схемы дистрибуции BOX)
imp.EXE USERID = SYSTEM/<Пароль>@<SID базы> LOG=<файл лога> FILE=<FILE.DAT – схема BOX> FROMUSER=BOX TOUSER=<Пользователь>
pause
Скрипты после импорта
CREATE OR REPLACE CONTEXT CTX_LANG USING *USERNAME*.KK_LANG
/
CREATE OR REPLACE CONTEXT CTX_REP USING *USERNAME*.KK_REP
/
CREATE OR REPLACE CONTEXT ctx_st_barcode USING *USERNAME*.KK_ST_CTX
/
!!!! Важно заменить *ЮЗЕРНЕЙМ* на имя пользователя
begin dbms_job.submit(:job,'BEGIN DBMS_STATS.GATHER_SCHEMA_STATS(ownname => ''ЮЗЕРНЕЙМ'',estimate_percent => DBMS_STATS.AUTO_SAMPLE_SIZE,method_opt => ''FOR ALL COLUMNS SIZE AUTO'',CASCADE => TRUE); commit; end;',trunc(sysdate,'DAY')+6,'trunc(sysdate,''DAY'')+6'); end;
/
begin dbms_job.submit(:job,'begin KK_ST_ALLOC.RunAllocPeriodicalProc; commit; end;',trunc(SYSDATE)+1,'trunc(SYSDATE)+1'); end;
/
begin dbms_job.submit(:job,'declare
vJobN integer;
begin
FOR J In (
select distinct c.auto_reserve_grp as grp
from contragent c where
c.auto_reserve_grp is not null
and sysdate between c.fd and c.td
and not exists (select null from
user_jobs j where WHAT like ''/*AutoReserveGRP=''||c.auto_reserve_grp||''*/%'' )
order by 1
) LOOP
dbms_job.Submit(vJobN,''/*AutoReserveGRP=''||j.grp||''*/begin KK_ST_DOC_NEW.StDocOutAllToReserve(''|| j.grp ||''); commit; end;'' );
kk_common.err_log(''AutoReserveGRP.StDocOutAllToReserve'',vJobN,''RUN JOB'');
commit;
END LOOP;
end;',trunc(sysdate,'mi') + 5/1440,'trunc(sysdate,''mi'') + 5/1440'); end;
/
begin dbms_job.submit(:job,'begin kk_mail.ExternalMailSend; end;',SYSDATE + 5/1440,'SYSDATE + 5/1440'); end;
/
begin dbms_job.submit(:job,'declare
vStr varchar2(2500);
vNextExecute date;
vMail integer;
vMails list_const.val%type := kk_const.GetConstV(''NotifyJob.Error.Notify'',sysdate,0);
begin
FOR J In (select rowid as rd,PL_SQL,NAME
from notify_job
where sysdate >= next_execute
and sysdate between fd and td ) LOOP
begin
vStr := j.PL_SQL;
execute immediate replace(vStr,chr(13),'' '')
using out vNextExecute;
commit;
EXCEPTION
WHEN others THEN
kk_common.err_log(''NOTIFY_JOB'',SQLCODE,substr(j.NAME||'' ''||SQLERRM,1,255));
vMail := kk_mail2.ExternalMailPutInQueue(vMails,''ERROR.USER_JOBS.''||j.NAME,substr(j.NAME||'' ''||SQLERRM,1,2500));
commit;
select sysdate + 30/1440 into vNextExecute from dual;
end;
update notify_job
set next_execute = vNextExecute
where rowid = J.RD;
commit;
END LOOP;
end;',sysdate + 2/1440,'sysdate + 2/1440'); end;
/
commit;
/
Создание триггера Audit_ddl
Выполнить под пользователем SYS "Сохранение истории системных пакетов"
CREATE OR REPLACE TRIGGER audit_ddl
BEFORE
DDL
ON DATABASE
declare
l_osuser VARCHAR2(100);
l_program VARCHAR2(100);
sql_text ora_name_list_t;
stmt VARCHAR2(2000);
l_cnt pls_integer;
vLocator CLOB;
vEDITOR_IP varchar2(50);
vEDITOR_DSC varchar2(200);
vLastTD date;
begin
IF (ora_dict_obj_owner = '*USERNAME*')
THEN
IF ora_sysevent in ('ALTER','ANALYZE') and ora_dict_obj_type in ('FUNCTION','PACKAGE','PACKAGE BODY','TRIGGER')
or ora_dict_obj_type in ('TYPE') THEN
NULL;
ELSE
select upper(osuser), upper(program) into l_osuser, l_program from v$session
WHERE AUDSID=SYS_CONTEXT('USERENV','SESSIONID');
if ora_dict_obj_type in ('PACKAGE','PACKAGE BODY') then
begin
select p.EDITOR_IP,p.EDITOR_DSC ,nvl(last_td,sysdate) into vEDITOR_IP
,vEDITOR_DSC , vLastTD
from *USERNAME*.CIS_PACKAGE p
where upper(p.name) = upper(ora_dict_obj_name) ;
if vEDITOR_IP is null or vLastTD + 2 < sysdate then
update *USERNAME*.CIS_PACKAGE
set EDITOR_IP = SYS_CONTEXT('userenv', 'IP_ADDRESS')
, EDITOR_DSC = l_program || '; l_osuser='||l_osuser||'; '|| to_char(sysdate,'dd.mm.yyyy hh24:mi:ss')
,last_td = sysdate
where upper(name) = upper(ora_dict_obj_name) ;
else
if nvl(vEDITOR_IP,'NULL') != nvl(SYS_CONTEXT('userenv', 'IP_ADDRESS'),',') then
null;
end if;
end if; --if vEDITOR_IP is null then
EXCEPTION
WHEN NO_DATA_FOUND THEN
null;
end;
end if; --if ora_dict_obj_type in ('PACKAGE','PACKAGE BODY') then
insert into *USERNAME*.CIS_ddl_changes (N, owner, name, type, osuser, program, FD, action, STATUS) values
(*USERNAME*.sq_CIS_DDL_CHANGES.nextval, ora_dict_obj_owner, ora_dict_obj_name,
ora_dict_obj_type, l_osuser, l_program, sysdate, ora_sysevent,0);
declare
LOCATOR1 clob;
dest_offset INTEGER := 1;
src_offset INTEGER := 1;
amt INTEGER ;
begin
DBMS_LOB.CREATETEMPORARY (LOCATOR1,TRUE,DBMS_LOB.SESSION);
l_cnt := ora_sql_txt(sql_text);
for i in 1..l_cnt loop
if (Length(sql_text(i)) <= 2000) and
instr(sql_text(i), 'COMPILE BODY REUSE SETTINGS')>0 then
null;
else
dbms_lob.WriteAppend(LOCATOR1, Length(sql_text(i)),sql_text(i));
end if;
end loop;
INSERT INTO *USERNAME*.CIS_DDL_CHANGES_CLOB (CIS_DDL_CHANGES_N,TEXT) VALUES (*USERNAME*.sq_CIS_DDL_CHANGES.currval,EMPTY_CLOB())
RETURNING TEXT into vLocator ;
amt := DBMS_LOB.getlength(LOCATOR1);
dbms_lob.copy(vLocator,LOCATOR1,amt,dest_offset,src_offset);
end;
END IF; --IF ora_sysevent ='ALTER'
END IF;
end;
/
Выполнить под пользователем SYS "предотвращение повторного входа с терминала"
-- Start of DDL Script for Trigger TST.TRG_ON_LOGON
-- Generated 20.02.2015 14:59:44 from TST@TST
CREATE OR REPLACE TRIGGER trg_on_logon
AFTER
LOGON
ON DATABASE
declare
vCnt integer;
begin
if lower(SYS_CONTEXT('userenv', 'TERMINAL')) like lower('%mobile%') then
select/*+ INDEX(a cis_logon_log_s)*/
count(1) into vCnt
from
v$session s
join V$process p on (s.pADDR = p.addr )
join cis_logon_log a on ( a.AUDSID = s.AUDSID and a.SESSIONID = s.SID and a.SERIAL = s.SERIAL# )
where a.ip = SYS_CONTEXT('userenv', 'IP_ADDRESS')
and s.status != 'KILLED';
if vCnt > 0 then
RAISE_application_error(-20000,'Нельзя запустить более двух сессий одновременно!');
end if; -- if vCnt > 0 then
end if; -- if lower(SYS_CONTEXT('userenv', 'TERMINAL')) like lower('%mobile%') then
end trg_on_logon;
/
-- End of DDL Script for Trigger TST.TRG_ON_LOGON
/
BEGIN
DBMS_NETWORK_ACL_ADMIN.CREATE_ACL (
acl => 'smtp_mail.xml',
description => 'Permissions to access smtp_mail',
principal => '*USERNAME*', -- ИМЯ пользователя БД
is_grant => TRUE,
privilege => 'connect');
COMMIT;
END;
create role role_smtp_mail;
/
BEGIN
DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE (
acl => 'smtp_mail.xml',
principal => 'ROLE_SMTP_MAIL',
is_grant => TRUE,
privilege => 'connect',
position => null);
COMMIT;
END;
/
grant role_smtp_mail to *USERNAME*;
/
BEGIN
DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL (
acl => 'smtp_mail.xml',
host => '192.168.4.2'); -- smtp сервер!!!!
COMMIT;
END;
/
==Добавить другого пользователя в ACL лист (если пользователей БД, использующих отправку писем - несколько)==
BEGIN
DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE(
acl => 'smtp_mail.xml',
principal => '*USERNAME2*', --имя второго пользователя
is_grant => TRUE,
privilege => 'connect');
END;
/
Установка Oracle Client
Правка пакетов
ПЕРЕД ЗАПУСКОМ СЛУЖБЫ ИЛИ CWMS3000 обязательно изменить пакеты kk_rep,kk_lang :
kk_rep:
procedure assign(name varchar2, value varchar2) is
begin
dbms_session.set_context('ctx_rep', name, value);
END assign;
kk_lang:
procedure assign(name varchar2, value varchar2) is
begin
dbms_session.set_context('ctx_lang', name, value);
END assign;
Установка CWMS3000
Необходимые условия для разворачивания
Подготовка резервного сервера
hint: Для удобства навигации между RDP-подключениями основного и резервного серверов, рекомендуется установить в качестве "обоев" рабочего стола резервного сервера ярко-красный фон.
Установка СУБД oracle и создание резервной БД.
Запускаем инсталлятор, выбираем метод установки - advanced, нажимаем "next"
тип установки - Enterprise, нажимаем "next"
В следующем окне - Name оставляем по умолчанию, Path должен быть идентичен пути установки БД на основном сервере
В пунктах, имеющих статус "error", проставляем галочки.
Статус должен поменять на " user verified", нажимаем "next"
В следующем окне выбираем "Create a Database", нажимаем "next".
В следующем окне выбираем Advanced, жмем "next".
В следующем окне оставляем значения по умолчанию, жмем "next".
В следующем окне проверяем правильность введённых параметров и нажимаем "Install"
После окончания установки автоматически откроется Database Configuration Assistant. В первом окне выбираем General Purpose, нажимаем "next".
В следующем окне вводим Global Database и SID. Они должны быть ИДЕНТИЧНЫ основной базе.
В следующем окне оставляем всё без изменения.
В следующем окне вводим пароль для системных учётных записей oracle. Он должен быть ИДЕНТИЧЕН паролю на основной базе. Нажимаем "next".
В следующем окне оставляем все данные без изменения, нажимаем "next".
В следующем окне снимаем галочку "Specify Flash Recovery Area", ставим галочку "Enable Archiving, нажимаем кнопку Edit Archive Mode Parameters
В открывшемся окне указываем ПОЛНЫЙ путь к папке с архивными логами. Путь должен быть идентичен пути к папке на основном сервере. Если папки для архивных логов на резервном сервере не существует - её необходимо создать. Имя папки и её местонахождение на локальном диске должны быть полностью идентичными имени и местонахождению на основном сервере. Нажимаем "ok" и "next".
В следующем окне снимаем галочку "Sample Schemas", нажимаем "next"
В следующем окне ставим флаги Custom и Manual.
Единицы измерения ВЕЗДЕ проставляем M Bytes. Рекомендуемые значения:
Shared Pool: 128 M Bytes
Buffer Cache: Указываем размер, исходя из оставшейся свободной оперативной памяти, за вычетом памяти, необходимой для корректной работы операционной системы. Для резервного сервера, имеющего 4 Гб оперативной памяти (как на скриншоте), оптимальным размером Buffer Cache будет 2 Гб, для сервера, имеющего, например, 32 Гб оперативной памяти, оптимальным будет 25 Гб.
Java Pool: 128 M Bytes
Large Pool: 512 M Bytes
PGA Size: 256 M Bytes
Далее на вкладке Character Sets устанавливаем флаг "Choose from the list of character sets", Утанавливаем параметры, согласно скриншоту. Нажимаем кнопку "next".
В следующем окне оставляем все значения по умолчанию и нажимаем next.
В следующем окне оставляем все значения по умолчанию и нажимаем Готово.
В процессе создания БД и применения настроек, может появиться ошибка старта БД. Не пугаемся, нажимаем ОК.
По завершению установки, нажимаем next, в следующем окне - exit.
Далее заходим в диспетчер служб, проверяем, чтобы службы oracle были созданы, и их состояние было как на скриншоте.
Запускаем командную строку, вводим команду sqlplus. Логин sys as sysdba, пароль - указанный при установке. Если все вышеописанные действия были проведены верно - мы увидим информацию о версии СУБД и строку ввода команд SQL.
Прописываем уникальное имя базы, по которому data guard broker будет её идентифицировать, для резервного сервера это bwms. Для этого вводим команду:
alter system set db_unique_name='bwms' scope=spfile;
Включаем data guard broker. Для этого вводим команду:
alter system st dg_broker_start=true scope=both;
Останавливаем БД. Для этого вводим команду
shutdown immediate
Удаляем все файлы из каталога БД
Останавливаем службу OracleOraDb10g_home1TNSListener
Редактируем файл E:\oracle\product\10.2.0\db_1\NETWORK\ADMIN\tnsnames.ora согласно тексту ниже, указываем реальные ip-адреса
WMS =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = ip-адрес основного сервера)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = WMS)
)
)
BWMS =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = ip-адрес резервного сервера)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = bwms)
)
)
wms_XPT =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = ip-адрес основного сервера)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = wms)
)
)
wms_DGB =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = ip-адрес основного сервера)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = wms)
)
)
wms_DGMGRL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = ip-адрес основного сервера)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = wms)
)
)
)
Редактируем файл E:\oracle\product\10.2.0\db_1\NETWORK\ADMIN\listener.ora
Значения, которые необходимо изменить выделены красным
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = bwms_DGMGRL)
(ORACLE_HOME = D:\oracle\product\10.2.0\db_1)
(SID_NAME = bwms)
)
(SID_DESC =
(GLOBAL_DBNAME = bwms_XPT)
(ORACLE_HOME = D:\oracle\product\10.2.0\db_1)
(SID_NAME = bwms)
)
(SID_DESC =
(GLOBAL_DBNAME = bwms_DGB)
(ORACLE_HOME = D:\oracle\product\10.2.0\db_1)
(SID_NAME = bwms)
)
(SID_DESC =
(GLOBAL_DBNAME = SID БД)
(ORACLE_HOME = D:\oracle\product\10.2.0\db_1)
(SID_NAME = SID БД)
)
(SID_DESC =
(GLOBAL_DBNAME = bwms)
(ORACLE_HOME = D:\oracle\product\10.2.0\db_1)
(SID_NAME = bwms)
)
)
LISTENER =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = ip-адрес резервного сервера)(PORT = 1521))
)
)
Стартуем службу OracleOraDb10g_home1TNSListener
На основном сервере запускаем sqlplus, логин sys as sysdba
Вводим команду
ALTER DATABASE FORCE LOGGING;
Создаём REDO логи, которые в последствии будет использовать резервный сервер. Для этого вводим команду, где указываем путь к папке с ораклом:
ALTER DATABASE ADD STANDBY LOGFILE GROUP 10 ('P:\oracle\product\10.2.0\oradata\VPI\log1c.rdo','P:\oracle\product\10.2.0\oradata\VPI\log2c.rdo','P:\oracle\product\10.2.0\oradata\VPI\log3c.rdo') SIZE 50M;
Прописываем уникальное имя базы, по которому data guard broker будет её идентифицировать, для основного сервера это wms. Для этого вводим команду:
alter system set db_unique_name='wms' scope=spfile;
Включаем data guard broker. Для этого вводим команду:
alter system st dg_broker_start=true scope=both;
Останавливаем службу OracleOraDb10g_home1TNSListener
Редактируем файл E:\oracle\product\10.2.0\db_1\NETWORK\ADMIN\tnsnames.ora согласно тексту ниже, указываем реальные ip-адреса
WMS =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = ip-адрес основного сервера)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = wms)
)
)
bwms =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = ip-адрес резервного сервера)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = bwms)
)
)
bwms_XPT =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = ip-адрес резервного сервера)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = bwms)
)
)
bwms_DGB =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = ip-адрес резервного сервера)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = bwms)
)
)
bwms_DGMGRL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = ip-адрес резервного сервера)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = bwms)
)
)
)
Редактируем файл E:\oracle\product\10.2.0\db_1\NETWORK\ADMIN\listener.ora
Значения, которые необходимо изменить выделены красным
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = wms_DGMGRL)
(ORACLE_HOME = D:\oracle\product\10.2.0\db_1)
(SID_NAME = wms)
)
(SID_DESC =
(GLOBAL_DBNAME = wms_XPT)
(ORACLE_HOME = D:\oracle\product\10.2.0\db_1)
(SID_NAME = wms)
)
(SID_DESC =
(GLOBAL_DBNAME = wms_DGB)
(ORACLE_HOME = D:\oracle\product\10.2.0\db_1)
(SID_NAME = wms)
)
(SID_DESC =
(GLOBAL_DBNAME = SID БД)
(ORACLE_HOME = D:\oracle\product\10.2.0\db_1)
(SID_NAME = SID БД)
)
(SID_DESC =
(GLOBAL_DBNAME = wms)
(ORACLE_HOME = D:\oracle\product\10.2.0\db_1)
(SID_NAME = wms)
)
)
LISTENER =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = ip-адрес основного сервера)(PORT = 1521))
)
)
Стартуем службу OracleOraDb10g_home1TNSListener
Принудительно создаём логи, чтобы в них записались последние транзакции. Для этого вводим команду:
alter system switch logfile; Для надежности - три раза, и СРАЗУ ЖЕ останавливаем базу командой:
shutdown immediate
Стартуем базу в режиме mount. Для этого вводим команду:
startup mount
Создаём контрол-файл для резервного сервера. Для этого вводим команду:
ALTER DATABASE CREATE STANDBY CONTROLFILE AS 'C:\boston.ctl'
Дважды клонируем полученный файл и переименовываем его.
В результате из файла boston.ctl' должно получиться 3 идентичных файла: CONTROL01.CTL, CONTROL02.CTL, CONTROL01.CTL.
Они нам пригодятся чуть позже.
Останавливаем БД. Для этого вводим команду:
shutdown immediate
Останавливаем службу OracleService
Копируем всё содержимое папки E:\oracle\product\10.2.0\oradata\Имя_Инстанса КРОМЕ ФАЙЛОВ С РАСШИРЕНИЕМ .CTL в аналогичную папку резервного сервера.
Далее в ту же папку РЕЗЕРВНОГО сервера копируем контрол-файлы, полученные в результате создания и клонирования файла boston.ctl (см. выше)
Запускаем службу OracleService
Подготовка основной БД закончена, можно продолжать работу в ней в штатном режиме.
Создание и настройка конфигурации data guard broker
Запускаем БД на РЕЗЕРВНОМ сервере. Для этого вводим команду:Создаём конфигурацию, добавляем в конфигурацию наши базы, устанавливаем свойства, благодаря которым при добавлении файлов в основную базу, они автоматически будут создаваться на резервной.
Для этого выполняем скрипт:
CREATE CONFIGURATION 'SID БД_BACKUP' AS
PRIMARY DATABASE IS 'wms'
CONNECT IDENTIFIER IS wms;
ADD DATABASE 'bwms' AS
CONNECT IDENTIFIER IS bwms
MAINTAINED AS PHYSICAL;
EDIT DATABASE 'bwms' SET PROPERTY 'StandbyFileManagement'='AUTO';
EDIT DATABASE 'wms' SET PROPERTY 'StandbyFileManagement'='AUTO';
Для того, чтобы убедиться в том, что конфигурация успешно создалась, вводим команду:
show configuration
Далее включаем конфигурацию, вводим команду:
enable configuration
После этого начнется процесс копирования логов с основного сервера на резервный и их применение. Процесс может занимать различное время, в зависимости от того, насколько основная база "убежала вперед" от резервной, после её включения (окончание П.2).
Проверяем валидность конфигурации командой:
show configuration
При успешной синхронизации серверов команда должна возвратить "SUCCESS"
Далее смотрим очередь на применение логов к резервной базе(она должна быть пустая), для этого вводим команду:
SHOW DATABASE 'bwms' 'RecvQEntries';
И очередь на передачу логов с основного сервера(должно быть одно значение):
SHOW DATABASE 'wms' 'SendQEntries'