a dbms_output az egy utility amivel tudsz plsql-bol kimenetet irni. a set serveroutput on az a szokasos oracle toolokban annak bekapcsolasa hogy a kliens ki is irja a dolgot. sqlplusban vagy sqldeveloperben mukszik tutira, nem szokott kelleni hozza speci jogosultsag. milyen hibauzenetet ad?
set serveroutput on declare d date; begin for s in (select table_name from user_tables where rownum<6) loop begin execute immediate 'select scn_to_timestamp(max(ora_rowscn)) from '||s.table_name into d; dbms_output.put_line(s.table_name||' '||to_char(d)); exception when others then dbms_output.put_line(s.table_name||' no luck: '||sqlcode); end; end loop; end; /
-- jo lassu a nagy tablakra
-- van benne egy rownum<6 hogy csak az elso 5 tablat mutassa
-- ha regi az scn, nem tudjuk megmondani a pontos datumot
Sok táblánál kellene ez az adat, így a unionozásnál hátha lenne szebb megoldás..
Esetleg valamilyen ciklussal/cursorral végig lehetne lépkedni a táblákon (mondjuk egy adott user/schema alá tartozókon) és táblánként kiíratni ezt a frissítési adatot?
síma select-el lehívva ugyan megkapható a teljes táblanév, (pl user||'.'||táblanévŰ) ám azt nem eszi meg a rowscn-el együtt..
select to_char (scn_to_timestamp(max(ora_rowscn)), 'YYYY.MM.DD HH24:MI:SS') AS Utolso_TABLANEV1 from TABLANEV1
union
select to_char (scn_to_timestamp(max(ora_rowscn)), 'YYYY.MM.DD HH24:MI:SS') AS Utolso_TABLANEV2 from TABLANEV2
union
select to_char (scn_to_timestamp(max(ora_rowscn)), 'YYYY.MM.DD HH24:MI:SS') AS Utolso_TABLANEV3 from TABLANEV3;
A dolog azon alapul, hogy minden block header-ben ott van utolsó módosításának az SCN-je.
Még azt is meg lehet(ett volna) csinálni, hogy a táblákat rowdependencies enabled attribútummal hozod létre és akkor még azt is tudod, hogy melyik sor lett utoljára piszkálva.
és a harmadik:
audit insert, update, delete, select on TABLANEV1;
audit insert, update, delete, select on TABLANEV2;
audit insert, update, delete, select on TABLANEV3;
Ahh... pivot-al végül könnyedén meglett a megoldás, amit előzőleg azzal hibáztam el, hogy túl sok adatot hívtam le a pivot select részében... Tanulópénz..
1-2 napja foglalkozom az Oracle termékeivel. Van egy Oracle 11.2.0.3-as db-nk. A kérdésem pedig az, hogy .NET, illetve C# fejlesztés esetén elég-e ODAC telepítése (ami tartalmaz instant klienst) vagy pedig szükséges klienst is telepítenem?
(Off: Esetleg iskola/egyetem/tudományos intézet? Azokról esetleg el tudom képzelni, hogy a megtakarítás jegyében elfogadnak kisebb-nagyobb üzemszüneteket, átállási gondokat, funkcionalitás-csökkenést.)
Igen view-kra gondoltam aztán végül én is, mert hogy akkor azokat szépen lehetne grantolni adatszótárlekérdezés alapján.
Talenddel szépen le lehet capture-ölni a view-kat, az egyetlen megoldandó feladat )ekkora méreteknél), hogy jó sorrendben kell ezt megtenni a beágyazott view előbb jöjjön létre a PostgreSQL-oldalon.
És igen: nem lesz gyors. ;)
Olyan trükkök persze már előjöttek, hogy userenv-lekérdezéssel rákérdez a LANG(nyelvre), hogy ennek megfelelő nyelven jöjjön a select-resultset,ilyenből van nem is kevés. :)
(Off: Ez komoly? Volt olyan felelős vezető, aki erre rábólintott? Normálisan egy céges rendszerben egy-egy Oracle alverzióváltást is hosszas 'merjük-ne-merjük' rinyálások előznek meg, mert mindenki tudja, hogy mennyi akna lehet elásva abban is... Na de ez... Még jó, hogy nem sqlite-ra...)
Nem hasznaltam meg pgrest sosem, tenyleg nincs benne szinonima? Akkor helyettuk view-kat kell csinálni?
Mivel plsql-ben vagyok otthon, valoszinuleg nekiallnek plsql-ben irni egy generatort, ami olvassa az adatszotart meg a dbms_ddl-t, es fossa ki a pgres ddl-t. Aztan apro lepesenkent tesztelni. Nyilvan elotte jo lenne atlatni hogy van esely arra hogy az egesz mukodjon. Gbyte DDL az durva, mindenkeppen baromi sokaig fog futni.
Aki hasznal tervezoeszkozoket, vajon tud olyat aminek lenne eselye lecapture-olni az oracle db-t, es siman legeneralni a pgres ddl-t?
Topik: Oracle szinonimák migrálása PostgreSQL alá (ahol nincs is ilyen ugye)
Az adatbázis brutál nagy: többszáz user, soktízezer (egymásba is ágyazott, private és public szinonimákra is hivatkozó) VIEW-t tartalmaz (csak a VIEW-definiciók text-állománya GB-os nagyságrendű)
Nehezítés: VIEW és ctid(PostgreSQL-specifikus ORACLE ROWID) együttes menedzselése.
Amit lehet géppel kéne csinálni, nem kézzel, értelemszerűen.
Ki hogy fogna hozzá? Én ott tartok, hogy egyelőre kaparom össze magamat a romokból, miután letaglózott a kérdés. ;)
Továbbá, ha már ide jut a szituáció, akkor azért egyéb kérdések is felmerülnek. Pl., "jó-e" az adatbázis. Megvannak a kulcsok, indexek?
Ha igen, akkor lehet retrofitelni egy ERD-t, ami a Designerben valahol a fogalmi és logikai modell között van, mindenképpen jobb képet ad a dolog felépítéséről mint a tábla diagram, márpedig az eredeti kérdés azt hiszem főleg az áttekintésre irányul.
Ha kulcsok hiányában a retrofit béna, azokat úgyis erősen tanácsos pótolni.
Egy tábla/séma diagramon ugyan látszanak a konkrét kulcsok/indexek, de inkább csak a káoszt fokozzák. (Nem véletlenül kapcsolható ki-be az összes függelék.)
Én ilyen esetekben igyekszem visszajutni ERD-re, ott szüttyögni, majd ismét "előre" a reprezentáció felé.
Normális db-n működik ez a módszer, de sajnos nagyon sokan nem adatbázist terveznek, hanem csak táblákat hánynak egymásra.
Eszköz. A Designer félholt. A Oracle Data Modeler félig-meddig tudja pótolni.
A 3D megjelenítés nem nagyon megy, az az Asimov-féle Alapítvány hogyishívják-eszköze:-)
Lehet színekkel csoportosítani, kézzel elrendezni egy nagyméretű diagramon sok táblát, és kisebb diagramokra elosztani az entitásokat/táblákat. Ez utóbbi esetben nyilván a szétszedett kapcsolatokra figyelni kell.
az ember vizualis. viszont a tajekozodasa elegge statikus. tehat idovel jol kiismeri magat egy 3d strukturaban, felteve hogy az a struktura allando. 2D struktura detto. tehat egy olyan abra, ami allandoan talakul, morfolodik annak megfeleloen hogy mit teszel kozepre kiismerhetetlen. automatikusan generalni egy olyat, amin elsore minden ugy van egymas mellett ahogy logikus, az megteljesen eselytelen.
azert erzi az ember elveszettnek magat, mert nem latja at az egeszet. es azert nem latja at, mert nagy, es egyszerre csak kis reszet latja. valahogy particionalni kell. a particiok egyesevel mar atlathatobbak, egymashoz valo magasszintu viszonyuk szinten megertheto. a faba rendezes egy egyszeru particionalasi modszer.
en korabban ilyen problemakat designerrel kezeltem. capture, behuzom az osszes tablat es FK-t. Feldobja egyetlen diagrammra, oriasi makaroni az egesz. Keresek egy tablat amirol tudom mi, kiteszem a szelere, es a referenciai alapjan elkezdem huzogatni melle a baratait. mikozben kibogozom es atlathatova teszem, kicsit meg is ertem. es vegul is az a cel hogy ertsem.
persze minden eset mas, en meg csak itt visszaemlekezem a szep idokre.
Hosszasan ecsetelni lehetne mi hogy nőtt túl.. igen kb ilyesmi...
Lehet kérdezni hogy minek 3D, meg tessék csak beállni fát vágni, de szerintem nem ez a hozzáállás visz előre. Szerintem könnyebben megérthetővé tenné az adatbázis felépítését / az adattáblák egymáshoz kapcsolódó viszonyát, ha pl egy 3D-s hálót mindig oda forgathatnál amelyik táblának a többiekhez való kapcsolódását (és egyéb infóit: index, kulcs, stb) láthatnád.
Nem ertem minek 3D. A szokasos sema diagrammok miert nem jok? Par szaz tablara hasznaltam mar sokat, eltart amig kitalalod a megfelelo elrendezest, de kozben pont megerted a tortenetet. Azt meg hogy megertsd nem lehet elkerulni. Idealis esetben persze forditott a sorrend, elobb van a diagramm, es utanna az adatbazis.