Adatbázis: SQL, XML DB

MongoDB es hasonlok

MongoDB-vel vagy mas, hasonlo key-value tarolasi modot megvalosito dokumentum alapu es/vagy OO szemleletu DBMS-l volt valakinek dolga? Ha igen, mi es mik voltak a tapasztalatai vele?

- Rugalmassag?
- Megbizhatosag?
- Teljesitmeny?
- Platformfuggetlenseg?
- Tamogatottsag kulonbozo nyelvek/platformok reszerol?
- Valos eletben mennyire hasznalhato (es hol, ha nem titkos)?
- Es mire nem hasznalhato?
- Adminisztralas egyszerusege? (Mennyire macera adminisztralni, mennyire nehez egy admint atszoktatni ra, stb.)
- Uzletileg mennyire elfogadott a hasznalata?
- Userek korlatozhatosaga adatbazison belul? (Mennyire lehet tobb usert hostingolni egy szerveren)
- stb. random, ami hirtelen nem jutott eszembe.

Nem akartam flame topicba rakni, orulnek, ha on-topic keretek kozott maradna a dolog (tudom, naiv elkepzeles :).

MSSQL Instance átnevezés

Lenne egy gyors kérdésem, a google-t már turkáltam, ott azt írják uninstall/install, de talán van egyszerűbb megoldás.

Adott egy gép aminek a nevét ceg-dssa56456asd -ről ceg-konyvelo -re változtattam. Az SQL indítás után sikít, hogy nem tudja elindítani önnön magát. Ezt hogy lehetne vele gyorsan megbeszélni, hogy semmi pánik csak a gép neve változott? :-)

[megoldva/félig] Oracle LAST_INSERT_ID()

Sziasztok!

Nem vagyok sajna eléggé tapasztalt a témában, ezért kérem a segítségeteket. Hogyan tudom azt a rekordot kivenni az adatbázisból, amit beszúrtam, és egy szekvenciával kapott primary key-t?

Eddig odáig jutottam, hogy a "SELECT seq.* FROM all_sequences seq WHERE ..." visszaadja a LAST_NUMBERT, de mivel van egy cache-ja a dolognak, így ez a szám a cachelt értéken túli első "szabad" szám. A "SELECT * FROM foo WHERE id = (select MAX(id) FROM foo)"-val az a bajom, hogy ha időközben volt másik insert, akkor nem jó rekordot kapok vissza. Próbálkoztam az "INSERT INTO ... RETURNING id INTO x" de ez nem akarta az igazságot.

Tudom széjjelrágott csont, de bénaságomból adódóan nem találok normális megoldást egy ideje.

Előre is köszi a segítségeteket.

MySql INDEX

Sziasztok.
Van egy pár dolog amit próbálgatok, több millió akár milliárd soros táblákból való lekérdezésénél. Van egy pár dolog amit nem igazán tudtam megmagyarázni.

Nézzük az elsőt:

CREATE TABLE `art` (
`id` int(11) NOT NULL auto_increment,
`feed_id` int(11) NOT NULL,
`link` varchar(80) NOT NULL,
`text` text NOT NULL,
PRIMARY KEY (`id`),
KEY `feed_id` (`feed_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

Van ez a teszt tábla 1970k sor, a feed_id értékei 0-19ig.

A következő egyszerű selektet nézzük.

SELECT id, link, text FROM art WHERE feed_id=15

És most jön az ami meglepett ha a fenti táblastruktúra van, vagyis létrehozok egy INDEXet a feed_id -ra a lekérés (ugyan nem sokkal) de 1-2%-al lassabb mintha nem indexelem a feed_id -t csak a Primary key szerinti indexet használom.
Arra gyanakszom, hogy a feed_id túl "gyenge" szűrési feltétel, vagyis mivel értékei túl kis intervallumból veszi ezért a B-fa felépítése ebben az esetben nem lesz optimális.
Kíváncsian várom véleményeteket.

Hogy kicsit áttekinthetőbb legyen néhány dolog amiről már volt szó.

    • Néztem EXPLAINT nem full table scant csinál. Íme az eredménye:

      select_type table type possible_keys key key_len ref rows Extra
      SIMPLE art1 ref feed_id feed_id 4 const 36941

      alanyze table, optimize table volt futtatva de nem észleltem utána sem változást.
      Beállítások:
      myisam_max_sort_file_size=8G
      myisam_max_extra_sort_file_size=8G
      myisam_sort_buffer_size=256M
      key_buffer_size=512M
      read_buffer_size=128K
      read_rnd_buffer_size=256K
      sort_buffer_size=256K
  • Szabadon elérhető SQL szerver?

    Hail!
    Kollégámnak a főiskolai gyakorlatához kellene egy otthonról is elérhető, szabadon használható SQL szerver. Létezik ilyen? Tud valaki címet? Ja igen, msSQL-lel szeretne dolgozni, ha ez számít.
    Köszön minden segítséget.
    Tovább szerkesztem: Szóval neki olyan szerver kell, amire az otthoni cuccával fel tud kapcsolódni. Vagy valami ilyesmi, nem igazán értek hozzá, csak próbálok segíteni neki.

    Apache + MYSQL + Charset + Collation

    Üdv!

    A problémám a következő:

    Van egy adatbázisom (MYSQL szerveren) alapból utf8-as volt minden beállításom a szerveren, ezért a php+html kódot is UTF8-ban írtam, gondoltam minden egyezik szuper lesz. Ment is minden rendesen míg nem eljutottam ahhoz a ponthoz, hogy selectet kell írnom. Ekkor ha például van két rekordom: name=Alma és name=Álma és elküldök a szervernek egy ilyet: SELECT * FROM tanulok WHERE name='Álma' akkor fogja és kiprinteli azt a sort is ahol Alma a name. Ekkor az okosok azt mondták hogy a COLLATION-al lesz a baj mert van ugye a bináris összehasonlítás meg a nem bináris. Mivel az egész php+html kód utf8 ba volt gondoltam elég annyi, hogyha ezt beállítom a MYSQL szerveren collation utf_hungarian_ci, hát sajnos ezt beállítva sem működött, jó akkor rakjuk at az egeszet latin2-re ezzel szenvedtem egy kis időt (fél napot) de végül átállítottam az sql szervernek a karakterkódolását latin2-re és a COLLATIONT latin2_bin-re. Szuper, akkor ugye most az egész php+html kódot is át kell írni mert az meg utf8 ba van és a mysqlnek ha így küld ékezetes betűket akkor ez lesz: �. Tehát elkezdtem átírni az egészet ISO-8859-2-re metakat átírni plusz mivel netbeansben dolgozom project kódolást átrakta ISO-ra na akkor szépen elb... elromlott az összes ékezet a kódban, jó még ezeket is kijavítottam. Na akkor nézzük most mi történik? Insertnél az ékezetig küldi el a karaktereket pl János nal a name az lesz hogy J... Szuper akkor most tartok ott hogy elég ideges vagyok és nem tudom milyen karakterkódolást állítsák, hogy jó legyen.

    Ezzel foglalkozó thread-ek:

    http://hup.hu/node/15651
    http://hup.hu/node/23532

    ui: Elkeseredésemben hozzá adtam ezt a sort: AddDefaultCharset ISO8859-2 a httpd.conf-hoz de ez sem segített...

    acess distinct

    Heló!

    MS Accessben kell egy feladatot megoldanom. Leegyszerűsítve van egy táblázat két oszloppal (A és B). Alkontom kéne egy queryt, ami listázza az A-kat (duplikák nélkül) és az A-hoz tartozó különféle B-ket megszámolja.
    Eddig jutottam:

    SELECT A, Count( DISTINCT B) FROM table GROUP BY A;

    Ugye ez nem fog működni, mert az access nem tud DISTINCT-et count()-on belül.
    Valakinek ötlete?

    szerk: Valószínűleg egyszerűen grafikusan is megoldható, mivel közgazdászoknak szól a feladat, én meg ugye infós fejjel gondolkozom...

    Foreign key dupla path

    MS SQL alatt ütköztem az alábbi problémába:
    adott Person és Address tábla
    Person.Address -> Address
    Person.FAddress -> Address

    Tehát van a Personban 2 idegen kulcs az Address-re. Ha ezekre CASCADE DELETE beállítást alkalmazok, akkor hibát ad:
    "Introducing FOREIGN KEY constraint 'PersonAddress' on table 'Person' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints.\r\nCould not create constraint. See previous errors."

    Ha leveszem az egyik kulcsról a CASCADE-t, akkor minden rendben lefut.
    Találkoztatok hasonlóval? Hogy lehetne feloldani?

    oracle hs unicode odbc szoveges mezok eltunnek

    Sziasztok,

    oracle 10 express-ből próbálok postgresql-hez kapcsolódni odbc-n keresztül. (unicode-os oracle és unicode-os postgres adatbázis) Ehhez az oracle heterogeneous services-t kéne használnom, de bárhogy állítom be, benne marad egy bosszantó hiba a rendszerben.
    Kétféle ODBC-s postgres driver létezik: unicode és ansi. Mindkét driverrel létrejön a kapcsolat, de ha az ansi drivert használom, akkor az ékezetes karakterek nem mennek át, és valami egzotikus ORA-xxxx hibával elszállnak az sql utasítások. (Ez végül is logikus.) A unicode driver esetében meg egyszerűen kihagyja a lekérdezések eredményeiből a szöveges mezőket, mintha ott sem lennének.
    Nem a postgres odbc driverrel van gond, mert külső odbc nézegetővel látom a kimaradó oszlopokat is.

    Miután az odbc kapcsolatot a postgreshez windows alatt létrehoztam (és külső nézegetővel leteszteltem, hogy jól működik-e), a következőeket állítottam be oracle alatt:

    $ORACLE_HOME\hs\admin\initPG.ora

    
    HS_FDS_CONNECT_INFO = PG # az odbc kapcsolat neve
    #HS_NLS_NCHAR = HUNGARIAN_HUNGARY.AL32UTF8
    #HS_LANGUAGE = HUNGARIAN_HUNGARY.AL32UTF8
    HS_FDS_TRACE_LEVEL = ON
    #HS_FDS_REPORT_REAL_AS_DOUBLE = TRUE
    
    

    $ORACLE_HOME\NETWORK\ADMIN\listener.ora

    
    SID_LIST_LISTENER =
      (SID_LIST =
        (SID_DESC =
          (SID_NAME = PG)
          (ORACLE_HOME = C:\oraclexe\app\oracle\product\10.2.0\server)
          (PROGRAM = hsodbc)
        )
        (SID_DESC =
          (SID_NAME = PLSExtProc)
          (ORACLE_HOME = C:\oraclexe\app\oracle\product\10.2.0\server)
          (PROGRAM = extproc)
        )
        (SID_DESC =
          (SID_NAME = CLRExtProc)
          (ORACLE_HOME = C:\oraclexe\app\oracle\product\10.2.0\server)
          (PROGRAM = extproc)
        )
      )
    
    LISTENER =
      (DESCRIPTION_LIST =
        (DESCRIPTION =
    #      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC_FOR_XE))
          (ADDRESS = (PROTOCOL = IPC)(KEY = PNPKEY))
          (ADDRESS = (PROTOCOL = TCP)(HOST = freelancer)(PORT = 1521))
        )
      )
    
    DEFAULT_SERVICE_LISTENER = (XE)
    
    

    $ORACLE_HOME\NETWORK\ADMIN\tnsnames.ora (részlet)

    
    PG =
      (DESCRIPTION =
        (ADDRESS = (PROTOCOL = TCP)(HOST = freelancer)(PORT = 1521))
        (CONNECT_DATA =
          (SID = PG)
        )
        (HS = OK)
      )
    
    

    Ezek után az oracle-ben futtatva:

    
    CREATE PUBLIC DATABASE LINK "PG"
      CONNECT TO "postgresuser" IDENTIFIED BY "postgrespassword" USING 'PG';
    
    ...
    
    SELECT * FROM "postgres_test_table"@pg;
    
    

    Mindezt ez alapján a tutorial alapján.
    Tudna valaki segíteni?

    Üdv,
    kl223

    Oracle 11g import/export/új szerverre költözés

    Sziasztok!

    Segítséget szeretnék kérni az Oracle 11gR1 import/export parancsainak használatában.
    Történetesen az éles Oracle 11gR1 (Oracle Linux 5.2 OS-n) 3db. instance-ről már van napi export mentésem és innen el kell költözzek.


    export ORACLE_HOME=/oracle/product/11.1.0/DB ; sid ; /oracle/product/11.1.0/DB/bin/exp userid=system/passwd@sid file=${BACKUPDIR}/${DATABASE}/${DATABASE}_${HOST}_${DATE}.dmp log=${BACKUPDIR}/${DATABASE}/${DATABASE}_${HOST}_${DATE}.log full=y statistics=none

    A cél az, hogy egy újonnan telepített Oracle 11gR1 (Oracle Linux 5.2 OS-n) adatbázison az import parancs lefusson.
    Létrehoztam a dbca segítségével a 3db. instance-t (a megfelelő sys/system userekkel), megvan az import parancs;


    imp userid=system/passwd@sid file=/tmp/SID_host_DATUM.dmp log=/tmp/imp.log full=y statistics=none

    és itt meg is állt a tudomány.
    Hogyan készüljek fel a továbbiakra?

    Üdv:
    Ádám (aki nem OracleDBA)