Export / Import APEX application, DDL and dataOdpowiedz

avatar
Rejestracja: 14/02/11
Posty: 15
05/06/2014, 13:16
1
Witam,
Proszę mi wytłumaczyć jak prostemu chłopu w jaki sposób mam przenieść swój cały projekt (aplikacje, strukture tabel itp, dane z tabel) z jednego komputera na inny nowy. Aplikacje tworzyłem w APEX 4.0. Teraz na nowym komputerze zainstalowałem Oracle Database 11XE oraz zrobiłem update Apexa do 4.1 i nawet działa.
Pogoglowałem troche i export/import robie tak:
"Step 1—_
You need DDL for database objects. You can follow any of the following 2 methods:-
Method 1
• In APEX Go to Home .
• Click on Utilities
• Click on Generate DDL
• Click on Create Script button
• Select the Schema and Click on next
• For output select Save as Script File and the objects types which you want to include in the script and click on next
• Check the individual object name which you want include in the script and click on Generate DDL.
• Download the Script File you generated to you Hard Drive.

Method 2
• Using SQL Developer Export the Schema and save the file you hard drive. (I use this method as it is easy and i can copy the data as well)
Step 2 –_
• Go to the application which you want to export
• Click on Supporting Objects.
• Click on Installation Script.
• Click on Create From File.
• Enter name of Installation script and click Next
• Browse the file which you downloaded in Step 1 and Click on Create Script
• Now Click on Export/Import Link on the Application Home Page
• Click on Export
• In the Export Preference Select Export Support Object Definition and Click on Export"

Step 1 - Export zrobiony z tym, że po uruchomieniu skryptu na docelowej maszynie"
"You have requested to run a script containing statement(s) SQL Workshop will ignore. Please confirm your request.
Script Name export2.sql
Created on 06/05/2014 12:12:19 PM by NOWY
Updated on 06/05/2014 12:12:20 PM by NOWY
Number of Statements 545
Script Size in Bytes 181,425

Line Number Unknown Statement
959 SET DEFINE OFF
961 SET DEFINE OFF
963 SET DEFINE OFF
965 SET DEFINE OFF " itd....

Nie wiem co robie źle że tak się dzieje, robiłem export zarówno z apexa jak i z narzędzia SQLdeveloper. Po ręcznym usunięciu tych wpisów jest ok,
status wykonania skryptu jest COMPLETE, ale w rezultatach:
Na początku było:
"1 0.00 CREATE SEQUENCE "NOWY3"."DB_AREA_SEQ" MINVALUE 1 MAXVAL ORA-01031: insufficient privileges - " itd....
oraz
"17 0.01 CREATE TABLE "NOWY3"."DB_AREA" ( "ARE_ID" NUMBER, ORA-01918: user 'NOWY3' does not exist" itd...
"32 0.00 Insert into NOWY3.DB_AREA (ARE_ID,ARE_NAME) values ('21','WŁ ORA-00942: table or view does not exist " itd...

więc stworzyłem na nowym komputerze taki sam Workspace, user i default Schema, żeby było tak samo jak na starym (Workspace: NOWY3, user: NOWY, Default Schema NOWY3)
Po tym troche sięzmieniło, ale wcale nie na lepsze:

"
17 0.01 CREATE TABLE "NOWY3"."DB_AREA" ( "ARE_ID" NUMBER, ORA-01950: no privileges on tablespace 'USERS'
" itd.....
oraz
"
32 0.01 Insert into NOWY3.DB_AREA (ARE_ID,ARE_NAME) values ('21','WŁ ORA-00942: table or view does not exist -
" itd... - co wynika zapewne z pierwszego błędu
znowu pogoglowałem,
zrobiłem:
"
ALTER USER username QUOTA 100M ON tablespace name
GRANT UNLIMITED TABLESPACE TO username
"
gdzie username to nowy, a tablespace name to users,
niestety wyniki bez zmian, chyba troche przekąbinowałem co robie źle :(???
a może da się to jakoś inaczej zrobić ?
Prosze o wyrozumiałość robie to pierwszy raz.
Pozdrawiam
avatar
Rejestracja: 10/07/19
Posty: 213
05/06/2014, 13:33
2
Po kolei :)
Na początek należy rozróżnić dwie rzeczy. Aplikacja APEX to jedno - schemat w bazie to drugie.

Widzę, że masz problem ze schematem więc tym się zajmę.
Najłatwiej będzie jak stworzysz schemat wg tego skryptu (do znalezienia w dokumentacji APEX'a):

-- USER SQL
CREATE USER nazwa_schematu IDENTIFIED BY password1
DEFAULT TABLESPACE USERS
TEMPORARY TABLESPACE TEMP;

-- ROLES
GRANT "CONNECT" TO nazwa_schematu;
ALTER USER nazwa_schematu DEFAULT ROLE "CONNECT";
ALTER USER nazwa_schematu ACCOUNT UNLOCK;

-- SYSTEM PRIVILEGES
GRANT CREATE SESSION to nazwa_schematu;
GRANT CREATE SNAPSHOT to nazwa_schematu;
GRANT CREATE INDEXTYPE TO nazwa_schematu;
GRANT CREATE DIMENSION TO nazwa_schematu;
GRANT CREATE TABLE TO nazwa_schematu;
GRANT CREATE CLUSTER TO nazwa_schematu;
GRANT CREATE TRIGGER TO nazwa_schematu;
GRANT CREATE SYNONYM TO nazwa_schematu;
GRANT CREATE MATERIALIZED VIEW TO nazwa_schematu;
GRANT CREATE JOB TO nazwa_schematu;
GRANT CREATE SEQUENCE TO nazwa_schematu;
GRANT CREATE OPERATOR TO nazwa_schematu;
GRANT CREATE TYPE TO nazwa_schematu;
GRANT CREATE VIEW TO nazwa_schematu;
GRANT CREATE PROCEDURE TO nazwa_schematu;
GRANT UNLIMITED TABLESPACE TO nazwa_schematu;


Następnie zrobisz pełen eksport w SQL Developerze (Tools -> Database Export)
Odznacz takie rzeczy jak Schema, Storage, Grnats i Dropts.
Utworzy ci się skrypt DLL, który powinien pójść - utworzyć elementy schematu. Jak to pójdzie to możesz importować dane.

Daj znać czy ten proces skutkuje.
Pozdrawiam
piotr


avatar
Rejestracja: 13/02/26
Posty: 192
06/06/2014, 00:23
3
Pewnie Piotr radzi dobrze ale osobiście u siebie robię taki banalny wręcz prymitywny jednak działający myk przenosząc całą zawartość bazy z apexem i z aplikacją na inną maszynę poprzez zwykłe Backup database (dostępne w Menu Windowsa). Potem przerzucam katalog c:\oraclexe\app\oracle\fast_recovery\data\XE do analogicznego na drugiej maszynie i uruchamiam Restore database (też dostępne w Menu Windowsa) i po kilku minutach mam całość na drugim komputerze. Czasami Restore database trzeba robić 2 razy ale ... tak czy siak to działa. Oczywiście zabieram "wszystko z całym dobrodziejstwem inwentarza" ale jak coś zrobię w aplikacji na drugiej maszynie i chcę uaktualnić aplikację na pierwszej to tylko export/import aplikacji i temat załatwiony. Oczywiście nie modyfikuje zawartości samej bazy a tylko aplikację.

Może to pigwie wystarczy tongue Pozostał by tylko upgrade apexa.
avatar
Rejestracja: 14/02/11
Posty: 15
09/06/2014, 08:37
4
Dziękuję za zainteresowanie,
Nieśmiało zapytam czy zamiast nazwa_schematu nie powinna być nazwa_usera?
-- USER SQL
CREATE USER nazwa_user IDENTIFIED BY password1
DEFAULT TABLESPACE USERS
TEMPORARY TABLESPACE TEMP;

-- ROLES
GRANT "CONNECT" TO nazwa_user;
ALTER USER nazwa_user DEFAULT ROLE "CONNECT";
ALTER USER nazwa_user ACCOUNT UNLOCK;

-- SYSTEM PRIVILEGES
GRANT CREATE SESSION to nazwa_user;
GRANT CREATE SNAPSHOT to nazwa_user;
GRANT CREATE INDEXTYPE TO nazwa_user;
GRANT CREATE DIMENSION TO nazwa_user;
GRANT CREATE TABLE TO nazwa_user;
GRANT CREATE CLUSTER TO nazwa_user;
GRANT CREATE TRIGGER TO nazwa_user;
GRANT CREATE SYNONYM TO nazwa_user;
GRANT CREATE MATERIALIZED VIEW TO nazwa_user;
GRANT CREATE JOB TO nazwa_user;
GRANT CREATE SEQUENCE TO nazwa_user;
GRANT CREATE OPERATOR TO nazwa_user;
GRANT CREATE TYPE TO nazwa_user;
GRANT CREATE VIEW TO nazwa_user;
GRANT CREATE PROCEDURE TO nazwa_user;
GRANT UNLIMITED TABLESPACE TO nazwa_user;

zresztą za parę godzin sprawdzę :)
Cytat:
Następnie zrobisz pełen eksport w SQL Developerze (Tools -> Database Export)
Odznacz takie rzeczy jak Schema, Storage, Grnats i Dropts.
Utworzy ci się skrypt DLL, który powinien pójść - utworzyć elementy schematu. Jak to pójdzie to możesz importować dane.

Stworzyłem plik wg. po wyższych wskazówek i dla sprawdzenia odpaliłem go na "starym" kompie i nadal mam:
Line Number Unknown Statement
"234 SET DEFINE OFF
246 SET DEFINE OFF " itd.... najwyżej usunę to ręcznie.
Cytat:
Utworzy ci się skrypt DLL, który powinien pójść - utworzyć elementy schematu. Jak to pójdzie to możesz importować dane.
A ja tworze skrypt w którym od razu mam dane "Export Data" może tak być ?
avatar
Rejestracja: 10/07/19
Posty: 213
09/06/2014, 11:00
5
Ogólnie jeśli chodzi o tworzenie schematu to masz rację - tak naprawdę jest to tworzenie użytkownika bazy danych. Schemat to tenże użytkownik i wszystko co jego (tabele, funkcje procedury itp.) Na co dzień używam tych nazw zamiennie i może stad to nieporozumienie :)

Dalej. Jeśli chodzi o "SET DEFINE OFF" to odpal to jako polecenie przed odpaleniem skryptu a ze skryptu usuń je - nie powinno już sprawiać problemu.
Skrypt może być z danymi :)

Jak dalej będziesz miał problemy to może spróbuj podejścia zulu. Nigdy tego nie używałem ale wydaje się dużo prostsze od mojego.

pozdrawiam
piotr
avatar
Rejestracja: 14/02/11
Posty: 15
10/06/2014, 10:30
6
Dziękuje bardzo za pomoc udało się :)

Sposób zulu próbowałem, ale przy wykonywaniu procesu restore i wskazaniu ścieżki gdzie umieściłem backup C:\oraclexe\app\oracle\fast_recovery_area\XE wyskakiwało mi: "no AUTOBACKUPS found in the recovery area Autobackup search witch format "%F" not attempted because DBID was not set RMAN-06172: no AUTOBACKUP found or specified handle is not a valid copy or piece" - nie zagłębiałem się jeszcze dlaczego tak jest.

W każdym razie Twoja pomoc i rady Piotrze zadziałały, za co jeszcze raz bardzo dziękuję.
avatar
Rejestracja: 13/02/26
Posty: 192
10/06/2014, 12:04
7
Dziwne że masz taki komunikat ale ....
Jeżeli na jednej maszynie zrobisz backup (może nie było backupu ?) potem skopiujesz zawartość tego katalogu i wrzucisz do analogicznego na drugiej maszynie (nadpisując wszystko co tam ma. może nie nadpisałeś ?) to nie powinno być problemu. Osobiście nigdy z tym nie miałem problemu a robiłem to bardzo dużą ilość razy (chyba już koło 100). Czasami przy restore pokazał że mu się nie udało wczytać ale przy ponownej próbie było już ok. To bardzo prosta metoda nie wymagająca od użytkownika żadnego zachodu.

Czy na obu maszynach masz identyczne ścieżki do katalogu XE ?
avatar
Rejestracja: 14/02/11
Posty: 15
10/06/2014, 12:26
8
na obu maszynach mam taką samą strukturę katalogów
C:\oraclexe\app\oracle\fast_recovery_area\XE\
Domyślnie w C:\oraclexe\app\oracle\fast_recovery_area\XE był katalog ONLINELOG,
po zrobieniu backupu utworzył się katalog AUTOBACKUP oraz BACKUPSET (i w nim jest plik z backupem).
Po zrobieniu backupu przekopiowałem wszystko co było w C:\oraclexe\app\oracle\fast_recovery_area\XE czyli 3 katalogi z zawartością i wrzuciłem na nową maszyne.
Na nowej maszynie katalog który tam był ONLINELOG przemianowałem na ONLINELOG_old i dopiero wrzuciłem ten nowy.(zresztą próbowałem z nowym i ze starym).
avatar
Rejestracja: 13/02/26
Posty: 192
10/06/2014, 14:35
9
Mimo wszystko dziwne. Tak jak by nie mógł znaleźć backupu. Naprawdę robię to niemal codziennie i nie ma z tym problemu. Po prostu całą zawartość XE po backupie wrzucam do XE na drugiej maszynie. Nadpisuje wszystko jeżeli o to zapyta i zostaje tylko restore.

Całość zajmuje raptem kilka minut i nie stwarza żadnych problemów.
Musisz być zalogowany aby wykonać tę akcję.