marmint hogy a keresett tabla nem abban a semaban van az exportfileban, mint amelyik semat importalod? O beimportalta azt, amit kertel. Nem sorolhatja fel hogy mik azok az objektumok, amiket nem kertel...
Újból egy kérdésem lenne, és ismét csak importálással kapcsolatos;-)
A héten kaptam legalább 20 kiexportált Oracle fájlt. Ezeknek a fele double-byte adatbázisból van, a másik fele normál. Az utóbbiakat sikerült is importálnom gond nélkül, viszont az előbbiekkel gondom akadt. Az UTF-8-as környezetet létrehoztam, és két idődimenzió forrásául szolgáló táblát importálni is tudtam, viszont többet nem. Amikor log file-t kérek, abban az található, hogy: "Az import sikeresen, figyelmeztetések nélkül fejeződött be."
Ilyen viszont nincs benne: "a következő tábla importálása:"CPOS_MDNE_TIME_PERD_CUBE" 2925 sor importálva "
És amikor megnézem az adatbázist, abban sem szerepel új tábla.
Két gépen is próbálkoztam, ugyanolyan eredménnyel.
Ha pl. letrehozok egy ugyfel tablara egy olyan policyt, hogy csak az "A" betuvel kezdodo ugyfelek jojjenek a selectbe, akkor a select jol muxik, a count csak az "A" betuvel kezdodo ugyfelek szamat adja vissza, de a Max(ugyfelnev) siman vissza adja az "XY Kft."-t.
Miert kellet sajat NLS? Migraltunk egy Sybase-s rendszert, es ott olyan sajat collate seq volt definialva, ahol a kis-nagybetuk nem voltak megkulonboztetve, es a program is ennek megfeleloen mukodott (http://forum.index.hu/EditArticle/ReplayEditArticle?a=49546315&t=1001339) Vegul is letre hoztunk egy HUNGARIAN2 a Local Builder-el es azzal allitottuk fel az adatbazist. Minden ok volt, kiveve a Min-Max, az tojt ra. Kaptunk egy athidalo megoldast a supporttol, de az olyan lassu volt, hogy elsirtam magam. Vegul sajat fuggvenyeket irtunk helyettuk.
Az a - remélem viszonylag könnyen megválaszolható - kérdésem volna, hogy ha importálni szeretnék egy dump file-t, de hibaüzenetként azt kapom, hogy a ... táblaterület nem létezik, holott már létezik, csak egy előző dump települt be oda, mi a teendő?
Ugyanazzal a névvel nem lehet több táblaterület, én meg a gugliban nem találtam meg számomra is érthető módon, hogy miként lehet más táblaterületre importálni (nagyon nem értek hozzá, de kényszerből az én feladatom lett). A file tartalmáról semmi konkrét infom nincs, tehát nem tudom előre létrehozni az adatbázist és utána feltölteni adatokkal.
Előre is köszi, ha valakinek van ötlete és kedve segíteni!
Ez a "min-max nagyon problémás" dolog nekem új. Olyanom már volt, hogy ha oszlopstatisztika gyűjtése közben nem binary-n volt a sort, akkor ora-600-at kaptam, de hogy ne is érdekelje, az azért elég durva :( Tudsz erre valami jó kis egyszerű példát mutatni?
Mit jelent az, hogy nem veszi figyelembe a szabályt? Azt tudom elképzelni, hogy egyszerűen a feltétele nem illeszkedik. Az más csúnya bug, ha adott helyzetben illeszkednie kellene. Erre is szivesen vennék egy példát, ha nem gond.
És hogy csináltatok saját NLS-t? Ilyesmiről még nem hallottam, viszont érdekesen hangzik. :)
Csak a dokumentálás kedvéért (FGAC): http://asktom.oracle.com/tkyte/article2/ http://www.orafusion.com/art_fgac.htm http://www.unix.org.ua/orelly/oracle/guide8i/ch08_01.htm http://www.praetoriate.com/oracle_tips_access_control.htm
Nem szall el, csak nem veszi figyelembe a szabalyt. Nem ujdonsag, elegge kehes a min-max, mar akkor kiirtottuk karakteres hasznalatat, amikor sajat nls filet kezdtunk hasznalni es kiderultek a problemai.. Most csak kiprobaltam :-)
Jól mondják itt az okos emberek, hogy erre a VPD van kitalálva.
De esetleg így is lehet próbálkozni egyszerűbb eszközökkel: 1) Két nézetet elkészíteni (teljes és korlátozott) 2) Az eredeti tábla publikus elérését megszüntetni 3a) Privilegizált felhasználók kapnak egy saját szinonimát + select jogot a teljes nézetre 3b) Mezei felhasználók kapnak egy saját szinonimát + select jogot a korlátozott nézetre 4) Ha írni is akarnak, nem csak olvasni, akkor pedig jöhetnek az Instead of triggerek.
Az lenne a kérdésem, hogy OCI-ból (pontosabban cx_Oracle-ből, de az is OCI-t használ) lehet-e úgy tárolt eljárást hívni, hogy PL/SQL RECORD ill. PL/SQL TABLE típusú argumentumai vannak az eljárásnak, és ezeket a hívó fél tölti?
Egy (RONDA) megoldásom van rá (TYPE xx_typ IS TABLE OF VARCHAR2 INDEX BY BINARY_INTEGER - azaz tömb típust tudok átadni; "csak" szészedem a rekordot ilyen tömbökre, és egy PL/SQL blokkba ágyazom a megfelelő típusú változó feltöltését ezekből).
Amíg nem volt VPD, addig leánykori nevén FGAC volt, ami neked kellhet: Fine Grained Access Controll. Ez session-infók + jogosultság alapján bővíti az sql where-feltételét a háttérben. Így hiába 100 rekordos a tábla -> a select count(*) from tabla az általad látott mondjuk 30-at fogja visszaadni, sql*plusban is (ennek a további Oracle általi where-szűkítésnek köszönhetően). A mögöttes implikáló elgondolás az volt, annó, hogy pl.: egy nagy könyvelőcég, aki több kis cégnek könyvel, teljesen szeparáltan tudja kezelni a könyvelendő cégeket egy adatbázison belül, "single instance" elv mentén...
VPD = Virtual Private Database Ha a userek azonosíthatók a bejelentkezéskor, egy logontriggerrel a sessionre vonatkozóan tudsz infókat tárolni, amiben megadod a user üzleti szerepkörét. Ezt az infót pedig a táblára rakott policy-vel felhasználhatod. A policy hozzáteszi a megfelelő where feltételt a táblára elhangzó összes selecthez. Biztos nem ez a világ legegyszerűbb megoldása, de ha nem connection poolt használ a kliensed, akkor biztos működik. Connection pool esetén a session-ben tárolt üzleti szerepkör infót az alkalmazásnak kell váltogatnia. Talán van rá valami automatizmus Oracle AS 10g-ben, de ebben nem vagyok nagyon otthon. Ha simán a user nevéből, vagy valami értelmes, a sessionből egyébként is elérhető paraméterből eldönthető, hogy ki mit lát, elég csak a policyt használnod, nem kell a logon triggerrel szenvedned. Ha nagyon intenzíven használják a táblát, akkor okozhat teljesítményromlást, hiszen a policy fv.-t le kell futtatni, hogy kitalálja, mi legyen a where feltétel. De erre is vannak beállítások, hogy milyen esetekben tudja cacheelni ezt az infót. Ha pl. egy oracle usernév alapján eldönthető feltételről van szó, elég sessionönként egyszer kiértékelni a fv-t, a többi alkalommal egyszerűen csak hozzácsapja és kész - marad a softparse, ami nem túl vészes költség ugyebár.