Keresés

Részletes keresés

KingFishR Creative Commons License 2007.08.03 0 0 2501
Ha meghívod a progit akár sqlplusból, hibára fut és nem kezeled le sehol a kódban, amúgyis megkapod a hibaüzenetet.

Természetesen a logikai hibákat kaphatod csak el, de működés szempontjából az ORA-600 és ORA-7445 hibák, amik a server process leállásával járnak nyilván nem számítanak :)
Előzmény: varjuvaj (2496)
KingFishR Creative Commons License 2007.08.03 0 0 2500
Bocsi, a hsz írása közben elhívtak, úgyhogy kicsit kiestem a szinkronból. Látom elöttem már mindent leírtak.
Előzmény: KingFishR (2499)
KingFishR Creative Commons License 2007.08.03 0 0 2499
Alapból tranzakcióban vagy. Tehát ha semmit nem csinálsz, akkor az az alapértelmezett működés, amit kértél. Arra vigyázni kell, hogy minden korábbi változás is elveszett, hiszen nem kezdtél új tranzakciót.
Némi problémát okozhat, hogy az a működési mehanizmus, hogy kapsz egy hibát, ami az álltalad megadott kódban nem kezelődik, tehát valaki majd vagy lekezeli, vagy hibára fut a hívás.
Ha teszel bele hibakezelést, akkor megkaphatod azt a viselkedést, amit szerintem szeretnél:

PROCEDURE xyz (n NUMBER) IS
BEGIN
BEGIN
DELETE from ...;
DELETE from ...;
DELETE from ...;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
ROLLBACK;
END;
END xyz;

Ha pontosan tudod, hogy milyen hiba esetén nem kellene commitálnod, de a program futhat tovább, akkor definiálnod kéne az exception-t a megfelelő hibakódhoz és azt elkapni a hibakezelésben.

Ha azt szeretnéd, hogy csak ez a 3 delete legyen tranzakcióban és a hívó DML-jeit nem szeretnéd rollbackelni vagy commitálni, akkor a defininálnod kell, hogy ez egy autonóm tranzakció a "PRAGMA AUTONOMOUS_TRANSACTION" sorral. Ehhez még heggesztettem egy kis egyedi hibakezelést is:

PROCEDURE xyz (n NUMBER) IS
PRAGMA AUTONOMOUS_TRANSACTION;
e_role_exists EXCEPTION;
PRAGMA EXCEPTION_INIT (e_role_exists, -1921);
BEGIN
BEGIN
DELETE from ...;
DELETE from ...;
DELETE from ...;
COMMIT;
EXCEPTION
WHEN e_role_exists
THEN
ROLLBACK;
END;
END xyz;

Ezesetben csak a saját kódjára nyit egy tranzakciót és csak azt fogja rollbackelni, ráadásul csak akkor, ha ORA-1921-es hibát kap (amit deletenél nem kapsz, de ez volt a kódomban: arra definiálod, amire akarod, csak negatív legyen a szám :)) Más hibákat nem kezel le, így azok feljebb adódnak és meghal a futás a hiba kódjával.
Előzmény: varjuvaj (2490)
varjuvaj Creative Commons License 2007.08.03 0 0 2498
Nagyon szepen koszonom!
Előzmény: NevemTeve (2497)
NevemTeve Creative Commons License 2007.08.03 0 0 2497
Igen, a BEGIN és az EXCEPTION közötti össze exception elkaphatod a WHEN OTHERS-ben

honnan lehet megtudni hogy egy insert vagy egy delete parancs milyen exceptiont dob?

Az SQLCODE és SQLERRM függvényekkel lehet lekérdezni, hogy milyen hiba lépett fel.

Bővebben lásd a PL/SQL leírásban.
hibalista
Előzmény: varjuvaj (2496)
varjuvaj Creative Commons License 2007.08.03 0 0 2496
ha az exceptiont igy irom

EXCEPTION
WHEN OTHERS.. ez minden hibara ervenyes?(akarmiben keletkezik hiba ez kifogja?)


honnan lehet megtudni hogy egy insert vagy egy delete parancs milyen exceptiont dob?
Előzmény: NevemTeve (2495)
NevemTeve Creative Commons License 2007.08.03 0 0 2495
Nem, a procedure egyáltalán nem számít a tranzakciókezelés szempontjából, a ROLLBACK vagy mindent visszacsinál, ami a legutóbbi COMMIT-óta történt, vagy azt ami a megadott SAVEPOINT óta történt...

Lehetséges megközelítések:

1. A procedure-ban nincs semmilyen tranzakciókezelés, a hívó a visszaadott értékből tudja meg, hogy sikeres volt-e, vagy sem, és ő majd COMMIT-ál vagy ROLLBACK-el saját belátása szerint.

2. A procedure-ban van COMMIT siker esetén, és ROLLBACK kudarc esetén.

3. Ugyanez, de autonóm tranzakciókezeléssel, mondjuk ha a procedure egy napló írása, amibe akkor is kell bejegyzést tenni, ha végül a művelet nem is történik meg.

4. Ha a procedure sikeres volt, akkor nincs semmi, majd a hívó COMMIT-ál,
Ha valami nem sikerült, akkor a procedure elején lévő SAVEPOINT-ig ROLLBACK-el.

Legfontosabb, hogy aki hívja a procedurádat, az tudjon arról, hogy az hogyan is működik, vö: "Bakker, ebben volt egy COMMIT?!"
Előzmény: varjuvaj (2494)
varjuvaj Creative Commons License 2007.08.03 0 0 2494
Ha nem teszek SAVEPOINT- okat akkor egesz a procedure elejeig csinalja a rollback-et?
Előzmény: NevemTeve (2491)
varjuvaj Creative Commons License 2007.08.03 0 0 2493
?
Előzmény: NevemTeve (2491)
varjuvaj Creative Commons License 2007.08.03 0 0 2492
az elejere nem kell valami START TRANSACTION...
Előzmény: NevemTeve (2491)
NevemTeve Creative Commons License 2007.08.03 0 0 2491
gondolom, a végére COMMIT, az EXCEPTION-be meg ROLLBACK... persze a hívóval is érdemes ezt egyeztetni... lásd még: SAVEPOINT és ROLLBACK TO
Előzmény: varjuvaj (2490)
varjuvaj Creative Commons License 2007.08.03 0 0 2490
Van nekem egy procedure - om.
hogy hasznalok benne transaction-t?

Procedure xyz (n NUMBER) is
Begin

DELETE from ...;

DELETE from ...;

DELETE from ...;

end xyz;

hogy teszem ezt egy egyszeru tranzakcio-ba? ha sikerul mindharom delete akkor commit s ha egy vagy tobb nem, akko rollback.
MartinIsti Creative Commons License 2007.07.31 0 0 2489
Szia Tomathos!

Köszi az eddigi segítséget, úgy néz ki, sikerült átvergődnöm a dolgon.

Az importnál készített log alapján kiderült, milyen tablespace-ek kellenek, és azt a kettőt létrehoztam TOAD-dal.

Ezután majd az lesz nagy falat (persze ha a többi normál adatbázis import sikeresen lezajlott), hogy koreai cuccok is vannak, amihez UTF-8-as karakterkészlet dukál.

Igaz, hogy ahhoz egy új Oracle instance-t kell telepíteni?

MI
Előzmény: Tomathos (2488)
Tomathos Creative Commons License 2007.07.30 0 0 2488

Mondjuk az OLAP kockát dimenziótábláit még viszonylag könnyen tudtam importálni, velük nem volt gond. Hanem a fact adatok már problémásabbak.

Biztos van más megoldás is (from_user – to_user vagy remap_schema), de a helyedben én elkérném a tablespace és user scripteket is, hozzáígazítanám az adatbázisom környezetéhez (elérési utak, adatfájlok mérete) és azután importálnám be az adatokat…

 

 

Előzmény: MartinIsti (2482)
varjuvaj Creative Commons License 2007.07.30 0 0 2487
bocsi en vagyok a mrha, nem adtam jogokat, most mar mukszik, koszike!
Előzmény: varjuvaj (2485)
NevemTeve Creative Commons License 2007.07.30 0 0 2486
Valami olyasmi, hogy "GRANT DELETE ON b.table FOR a"
Előzmény: varjuvaj (2485)
varjuvaj Creative Commons License 2007.07.30 0 0 2485

egy ilyen hibat ad ha igy probalom : "pl/sql: ORA-00942: table or view does not exists"

nem kell valami mast beallitani?

 

Előzmény: NevemTeve (2484)
NevemTeve Creative Commons License 2007.07.30 0 0 2484
DELETE FROM b.table WHERE condition;
Előzmény: varjuvaj (2483)
varjuvaj Creative Commons License 2007.07.30 0 0 2483
van ket schema-am(a es b), a-ban van egy procedure-om amivel kellene toroljek egy sort, egy b -ben levo tablabol. ennek kb hogy kellene neki kezdjek?
MartinIsti Creative Commons License 2007.07.30 0 0 2482
Sajnos nem elérhető az eredeti adatbázis.

Igazából külföldről kaptunk néhány exportált Oracle dmp fájlt, és mivel én nem értek hozzá, egy munkatársam segít nekem távolról (Skype-on keresztül), de az eddig vázolt hibaüzenetekkel ő sem nagyon tud mit kezdeni.

Első akadályként a szerverünkre telepített Oracle-nek a partitioning funkciója nem is volt engedélyezett, ezért én raktam egyet a saját gépemre. Most már a partitioning oké, de mindig csak jönnek és jönnek az új hibaüzik:-(

Mondjuk az OLAP kockát dimenziótábláit még viszonylag könnyen tudtam importálni, velük nem volt gond. Hanem a fact adatok már problémásabbak.

Ha valamennyit fel is importálom ugyanazon usernév alá, akkor ott ömlesztve lesznek a táblák/nézetek, vagy az importált fájl neve szerint (esetleg egy abban szereplő másik név szerint) csoportosítva?

Próbáltam, hogy hozok létre más usereket, ami sikerült is, de hozzájuk importálni már nem engedett.
Előzmény: Tomathos (2481)
Tomathos Creative Commons License 2007.07.30 0 0 2481

Elérhető az adatbázis amiről az export készült?

 

SELECT * FROM DBA_TABLESPACES;

 

Importnál:

remap_tablespace=FACT01S:TEST_TS

 

 

Előzmény: MartinIsti (2480)
MartinIsti Creative Commons License 2007.07.30 0 0 2480
Akkor az impot paramétereit kell módosítanom ezzel a plussz bejegyzéssel?

remap_tablespace

A hivatalos Oracle hibaoldalon ez volt:
"Enter the name of an existing tablespace. For a list of tablespace names, query the data dictionary."

Hogyan tudom ezt lekérdezni?
Előzmény: Tomathos (2479)
Tomathos Creative Commons License 2007.07.30 0 0 2479

ORA-00959: a(z) 'FACT01S' táblaterület nem létezik
Itt akkor lehet, hogy a dmp fájl a hibás?

 

Ahová be akarod importálni a dmp fájlt ott nem létezik ez a táblaterület.

--> remap_tablespace

 

 

Most meg már rá sem tudok csatlakozni a saját adatbázisomra (gépemre?), mert hiába írom be az eddig megfelelőnek bizonyult felh.nevet/jelszót, ezt kapom:

"ORA-12500: TNS: a figyelőnek nem sikerült elindítania a dedikált kiszolgálóprocesszt."

 

Nézd meg hogy fut-e a Listener:

lsnrctl

stat

 

esetleg

tnsping <sid>

Előzmény: MartinIsti (2478)
MartinIsti Creative Commons License 2007.07.30 0 0 2478
A partitioning-et már be tudtam állítani, az újabb hibaüzenet a következő:

ORA-00959: a(z) 'FACT01S' táblaterület nem létezik

Itt akkor lehet, hogy a dmp fájl a hibás?


Többször kaptam ilyen üzenetet az import végén:
"Az import sikeresen, de figyelmeztetéssel fejeződött be."

Ez azt jelenti, hogy amit tudott importált és az adatbázis adatai felkerültek? Ha igen,
hol tudom rendesen böngészni ezeket? Én valami hasonlóra számítottam, mint az SQL Serverben, de eddig nem sikerült olyasmit elérnem.

Most meg már rá sem tudok csatlakozni a saját adatbázisomra (gépemre?), mert hiába írom be az eddig megfelelőnek bizonyult felh.nevet/jelszót, ezt kapom:

"ORA-12500: TNS: a figyelőnek nem sikerült elindítania a dedikált kiszolgálóprocesszt."


Ha valakinek van esetleg valamilyen tippje, őszintén hálás lennék, ha megosztaná velem!

Előre is köszönöm!
Előzmény: Tomathos (2474)
tnsnames.ora Creative Commons License 2007.07.26 0 0 2477
>Nekem egy egyszeru kerdesem lenne, vissza lehet teriteni egy FUNCTION-ban egy egesz tablat, vagy tobb sort??

Hogyne,
A kulturált módja -> ref-cursor; egy hátránya van, oracle-instance-ok _között_ nem müxik, eléggé el nem ítélhető módon.
http://www.programmersheaven.com/mb/oracle/186193/186223/ReadMessage.aspx?S=B20000

A kevésbé kulturált módja (bár feldolgozásra amúgy melegen ajánlható) -> bulk collect into ... array
http://www.dba-oracle.com/oracle_tips_rittman_bulk%20binds_FORALL.htm
Előzmény: varjuvaj (2476)
varjuvaj Creative Commons License 2007.07.26 0 0 2476

Sziasztok

Nekem egy egyszeru kerdesem lenne, vissza lehet teriteni egy  FUNCTION-ban egy egesz tablat, vagy tobb sort??

MartinIsti Creative Commons License 2007.07.25 0 0 2475
Igen, Enterprise Editiont, de az SQL PLUS-t még nem sikerült próbálnom ma, mert felhasználót/jelszót kér, és szerintem a tnsnames.ora fájlomban valami nem helyesen van benne.

De holnap még szöszölök rajta, meg elvileg a serveren tegnap csináltam ilyet (csak azt most behalt, úgyhogy nem tudok rendesen felmenni rá).

Azért köszi az eddigi segítséget is!
Előzmény: Tomathos (2474)
Tomathos Creative Commons License 2007.07.25 0 0 2474

Kérdezd le sql plus-ból:

 

SELECT * FROM v$option where parameter = 'Partitioning';

 

Egyébként a verziószámok megegyeznek?

Mit raktál fel Enterprise Edition-t?

Előzmény: MartinIsti (2473)
MartinIsti Creative Commons License 2007.07.25 0 0 2473
De, valóban segített, csak nehezen találtam meg, hogy hol is lehet.

Gondoltam rá én is, de csak egy másik fórumon látott füles segítségével sikerült kiderítenem, hogy az Admin tools-ban lehet leállítani.

Viszont sajna a telepítés nem hozta meg azt a megoldást, amit szerettem volna tőle, ugyanis van egy szerverünk, amire fel kéne tenni egy adatbázist, viszont az importálás végén ez jelenik meg:

"IMP-00003: 439 sorszámú ORACLE hiba fordult el
ORA-00439: a szolgáltatás nincs engedélyezve: Partitioning"

Pedig a telepítésnél külön kiválasztottam, hogy ez is legyen benne, viszont nem tudom, hogy miként lehet engedélyezni?
Előzmény: Tomathos (2472)
Tomathos Creative Commons License 2007.07.25 0 0 2472
Az nem segít ha leállítod a service-t (ahogy kéri). :)
Előzmény: MartinIsti (2470)

Ha kedveled azért, ha nem azért nyomj egy lájkot a Fórumért!