Installer MDH på din egen server – Trin for trin

Seks megasvære skridt

1. Opret views i Oracle databasen

Oprettes i DDETerm med SQL-Plus. Se beskrivelse her.
Hent script til oprettelse af views her. (Oracle.scripts.MDH-Views.rar)

2. Opret MySQL database + tabeller

Installér Oracle Instant Client
For at få linux-serveren til at snakke sammen med Oracle, skal der installeres Oracle Instant Client. Oracle Instant Client kan hentes her.

Opret en ny MySQL database med PHP og dansk tegnsæt

CREATE DATABASE $db CHARACTER SET latin1 COLLATE latin1_danish_ci

--- php start ---
$host = "localhost";
$user = "brugernavn";
$passwd = "kodeord";
$db = "databasenavn";

$con = mysql_connect($host,$user,$passwd);
if (!$con) die('Could not connect: ' . mysql_error());

if (mysql_query("CREATE DATABASE $db CHARACTER SET latin1 COLLATE latin1_danish_ci",$con))
echo "Database '$db' created";
else
echo "Error creating database '$db': " . mysql_error();
mysql_close($con);
--- php slut ---

Se beskrivelse af metoden her.

Hent SQL fil her og importer den til din database
Vi har lavet et dump af vores tabeller uden data.  Du kan hente SQL filen her. Importer den til din database, så er tabellerne oprettet.

3. Download, udpak og FTP

4. Tilret filerne med lokale oplysninger

A) Indtast Oracle database brugernavn, kodeord og adresse i flg. fil:
/cronjobs/sql_functions.php - linie 52-54

B) Indtast MySQL database brugernavn, kodeord, adresse og navn i flg. filer:
/cronjobs/4_update_titleshistory.php - linie 8-9
/cronjobs/5_update_subjectshistory.php - linie 17-18
/cronjobs/6_cache_glemteskatte.php - linie 32-33
/cronjobs/7_cache_aldrigudlaant.php - linie 17-18
/cronjobs/8_update_grafhistory.php - linie 8-9
/cronjobs/cron_test.php - linie 9-10
/cronjobs/sql_functions.php - linie 27-28
/Graf2/make_list_10_mest_udlaante_emner.php – linie 20-21
/inc/config.php - linie 4-7

5. Opret importrutiner (cron jobs) på Apache webserveren

Du skal have den tekstbaserede Lynx browser installeret på serveren.
Erstat domain.tld/sti-til-mdh-scripts/ i nedenstående med dine egne oplysninger

lynx -dump http://domain.tld/sti-til-mdh-scripts/cronjobs/1_import_items.php

lynx -dump http://domain.tld/sti-til-mdh-scripts/cronjobs/2_import_itemshistory.php

lynx -dump http://domain.tld/sti-til-mdh-scripts/cronjobs/3_import_titles.php

lynx -dump http://domain.tld/sti-til-mdh-scripts/cronjobs/4_update_titleshistory.php

lynx -dump http://domain.tld/sti-til-mdh-scripts/cronjobs/5_update_subjectshistory.php

lynx -dump http://domain.tld/sti-til-mdh-scripts/cronjobs/6_cache_glemteskatte.php

lynx -dump http://domain.tld/sti-til-mdh-scripts/cronjobs/7_cache_aldrigudlaant.php

6. Lad hele molevitten stå natten over og test det grundigt dagen efter

Afrapportering, Dokumentation Skriv en kommentar

MDH Views & “Glemte skatte”.

MDH-projektet baserer sig på en MySQL-database, der opbygges af data fra ddeLibras Oracle-database.

Hele MySQL-basen re-initieres i Horsens pt totalt hver nat: datatabeller tømmes og nye data importeres fra ddeLibras Oraclebase :

lynx -dump http://domain.tld/sti-til-mdh-scripts/cronjobs/1_import_items.php
lynx -dump http://domain.tld/sti-til-mdh-scripts/cronjobs/2_import_itemshistory.php
lynx -dump http://domain.tld/sti-til-mdh-scripts/cronjobs/3_import_titles.php
lynx -dump http://domain.tld/sti-til-mdh-scripts/cronjobs/4_update_titleshistory.php
lynx -dump http://domain.tld/sti-til-mdh-scripts/cronjobs/5_update_subjectshistory.php
lynx -dump http://domain.tld/sti-til-mdh-scripts/cronjobs/6_cache_glemteskatte.php
lynx -dump http://domain.tld/sti-til-mdh-scripts/cronjobs/7_cache_aldrigudlaant.php

De 3 centrale import_*.php-rutiner (1_import_items, 2_import_itemshistory, 3_import_titles) arbejder på basis af 3 Oracle-views og importerer data herfra til 3 tilsvarende tabeller i MySQL-basen.

Da datafiler tømmes og fyldes hver nat er vedligehold relativt uproblematisk, men ved hvert årsskifte (og initiering af en ny statistik-tabel i ddeLibra) skal derkøres en årsrulning, så der til stadighed vises data fra indeværende samt foregående år.

Oracle views

Importrutinerne kaldes fra php-scripts, der baserer sig på 3 Oracle-views (”vinduer” til ddeLibra-basen). Det drejer sig om:

1)      Titelniveau: MDH_TITLES (Oracletabellen txtif)

2)      Eksemplarniveau: MDH_ITEMS (Oracletabellen holdings + loan)

3)      Statistiktransaktioner indeværende samt foregående år MDH_ITEMSHISTORY (pt. stat2010 og stat2009)

Disse 3 views kreeres fra SQL-plus, der lettest kaldes fra DDETerm-menuen:  1.Systemadministration => 3.Operativsystem => 3.SQL-plus .

Enten kan disse kommandoer afgives manuelt eller (lettere) kan de tilsvarende sql-filer (vedlagt /placeret i scripts-subdirectory) indkopieres til eget home-directory på unix-serveren og afvikles fra SQL-plus med kommandoerne:

@ make_MDH_titles.sql
@ make_MDH_items.sql
@ make_MDH_itemshistory.sql

Sidstnævnte opretter mdh_itemshistory på basis af de 2 statistik-tabeller stat2010 og 2009:


create or replace view MDH_ITEMSHISTORY as
select  copyno itemID, type transType, stdate transDate from stat2009 sl,mdh_items i
where type in ('1','3')and sl.copyno=i.itemID
union select copyno itemID, type transType, stdate transDate from stat2010 sn,mdh_items i
where type in ('1','3')and sn.copyno=i.itemID
;

Efter årsskiftet 2010/2011 og oprettelse af en ny stat2011-tabel i ddeLibra skal dette justeres med denne kommando (filen make_MDH_itemshistory_2011.sql ):

create or replace view MDH_ITEMSHISTORY as
select  copyno itemID, type transType, stdate transDate from stat2010 sl,mdh_items i
where type in ('1','3')and sl.copyno=i.itemID
union select copyno itemID, type transType, stdate transDate from stat2011 sn,mdh_items i
where type in ('1','3')and sn.copyno=i.itemID
;

Import

Herefter køres komplet reimport af  mdh_itemshistory fra Oracle til MySQL (evt. af alle 3 tabeller/views). Eller også afventes blot nattens kørsel.

Modifikationen og reimporten af  mdh_itemshistory udgør tilsammen den nødvendige årsrulning.

Fokus har indtil videre i høj grad været “Glemte skatte”.

P.t.  afventes TinX:

- Denne måneds 10 mest udlånte emner (10 søjler)
- Forrige måneds 10 mest udlånte emner (10 søjler)
Altså ændringer i udlånets sammensætning.

Downloads:

mdh.sql: Generering af MDH-base
Oracle.scripts.MDH-Views.rar: Generering af MDH-views i Oracle-database
mdh_v_0_1.rar: PHP-scripts til display af data fra MySQL-base

Dokumentation 1 kommentar

Lidt om tegnsæt

Noget af det, der giver problemer, når data skal importeres fra en DDE biblioteksdatabase i Oracle til MySQL, er tegnsættet. I første forsøg fik vi i outputtet vist alle ÆØÅ som ?. Det dur ikke, hvis skidtet skal være læsbart.

Tegnsættet i DDE biblioteksdatabasen er iso-8859-9. Dette tegnsæt understøttes imidlertid ikke i MySQL 5.x og skal konverteres til UTF8. Således vil det også umiddelbart kunne anvendes i php-baserede websider, der som udgangspunkt ofte vil have UTF8 som tegnsæt.

Torben Sørensen fortæller om fremgangsmåden:
(NB! Lad være med at kopiere og indsætte koden, som den er. WordPress laver alle citationstegn om, så de ikke forstås af dine PHP filer.)

1. Opret databasen med php og dansk tegnsæt:

CREATE DATABASE $db CHARACTER SET latin1 COLLATE latin1_danish_ci
--- php start ---
$host = "localhost";
$user = "brugernavn";
$passwd = "kodeord";
$db = "databasenavn";

$con = mysql_connect($host,$user,$passwd);
if (!$con) die('Could not connect: ' . mysql_error());

if (mysql_query("CREATE DATABASE $db CHARACTER SET latin1 COLLATE latin1_danish_ci",$con))
echo "Database '$db' created";
else
echo "Error creating database '$db': " . mysql_error();
mysql_close($con);
--- php slut ---

2. Opret tabeller med dansk tegnsæt (“character set latin1″):

CREATE TABLE `ITEMS` (
`ItemID` varchar(14) NOT NULL,
`TitleID` varchar(15) default NULL,
`PublicationYear` int(4) default NULL,
`Status` int(1) default NULL,
`Branch` varchar(3) default NULL,
`Department` varchar(3) default NULL,
`Location` varchar(8) default NULL,
`Sublocation` varchar(6) default NULL,
`Collection` varchar(6) default NULL,
`AccessionDate` date default NULL,
`AjourDate` date default NULL,
PRIMARY KEY  (`ItemID`)
) ENGINE=MyISAM DEFAULT character set latin1;

CREATE TABLE  `TITLESHISTORY` (
`TitleID` varchar(15) NOT NULL,
`Author` varchar(100) default NULL,
`Title` varchar(100) default NULL,
`DK5` varchar(100) default NULL,
`Subjects` varchar(100) default NULL,
`MaterialType` varchar(2) default NULL,
`PublicationYear` int(4) default NULL,
`Note` varchar(100) default NULL,
`AjourDate` date default NULL,
`Count` int(4) default NULL,
PRIMARY KEY  (`TitleID`),
KEY `Title` (`Title`,`DK5`,`MaterialType`),
FULLTEXT KEY `ft_` (`Author`,`Title`)
) ENGINE=MyISAM DEFAULT character set latin1;

CREATE TABLE `ITEMSHISTORY` (
`ItemID` varchar(14) default NULL,
`TransType` varchar(1) default NULL,
`TransDate` date default NULL
) ENGINE=MyISAM DEFAULT character set latin1;

3. Alle kald til Oracle views fra php SKAL ske med tegnsæt = “WE8ISO8859P1″ (hvis ikke, tages OS tegnsæt – fordi vi køre igennem Instant Client)
Læs mere: http://www.bernzilla.com/item.php?id=784
Instant Client: http://www.oracle.com/technology/software/tech/oci/instantclient/index.html

--- php start ---
$username = "brugernavn";
$password = "kodeord";
$db = "//ip-adresse/db";

$conn = oci_connect($username, $password, $db,"WE8ISO8859P1");
if (!$conn) {
$e = oci_error();
print htmlentities($e['message']);
exit;
}

--- php slut ---
Dokumentation, Konsulenter Skriv en kommentar

Første widget er færdig og forsøgsvis i drift

Der er blevet knoklet med udvikling af de nødvendige scripts henover sommeren, men nu kører det og første script er forsøgsvis sat i drift på bibliotekets hjemmeside.

Torben Sørensen (TinX) har fået lov at svede over opgaven i sommervarmen og har udarbejdet en stak scripts, der evt. kan tilrettes men i princippet hentes direkte ind på bibliotekets website med almindelig php include.

Den første widget, der forsøgsvis er sat i drift, beskrives i projektets Ide 4 med titlen “Aktuelle Emner”. Den er udformet som en tag cloud over de emneord fra biblioteksdatabasen, der har haft den største udlånsstigning over den seneste måned. Der linkes naturligvis til en søgning på det enkelte emne i bibliotekets OPAC. Interessant nok ændrer resultatet sig fra dag til dag.

Ide 3a og 3b med titlerne “De glemte skatte” og “Aldrig udlånte materialer” er ligeledes kodet færdig i henhold til aftalen med TinX, men endnu ikke taget i brug. I Ide 3a “De glemte skatte” har vi imidlertid glemt at tage højde for, at biblioteket faktisk kunne have lukket for 365 dage siden, hvorfor resultatet vil blive 0. Derfor skal der foretages nogle rettelser, før scriptet kan tages i brug. Se arbejdsscriptet her.

Ide 3b “Aldrig udlånte materialer” vurderer vi fortsat brugbarheden af. Derfor er dette script endnu ikke taget i brug. Se arbejdsscriptet her.

Design & udførelse, Drift Skriv en kommentar

Referat fra projektmøde med Tinx/dk

Mandag d. 18. maj afholdtes projektmøde med datamatiker Torben Sørensen fra Tinx/dk. Torben står for den mere langhårede side af projektet, udtræk af data fra Oracle databasen og kodning af diverse PHP og AJAX scripts.

1. Gennemgang af ideer

Ideerne  med arbejdstitlerne “De glemte skatte” (ide 3) og “Aktuelle emner” (ide 4) blev gennemgået og skitseret. Dernæst blev datatyper, tabel- og feltnavne gennemgået enkeltvis mhp. at analysere, hvor data skal komme fra samt hvordan de skal behandles for at opnå den ønskede præsentation.

Ide 3 “De glemte skatte”:
Der ønskes en liste opdelt på faneblade for materialetyperne skønlitteratur, faglitteratur, musik, film og spil. Posterne vises med forfatter, titel, note (beskrivelse), emneord, forsidebillede (eller ikon) samt “reservér”-link (åbnes evt. med jQuery Thickbox). Der sidenumereres for hver 20. post (bladrefunktion). Ide 3a (materialer, der netop nu sidst blev afleveret for præcis et år siden) laves med AJAX og opdateres løbende hvert minut. Ide 3b (materialer, der aldrig har været lånt ud) opdateres ved browser reload i tilfældig orden.

Ide 4 “Aktuelle emner”:
Der ønskes en liste med links over de emneord, der har haft den største udlånsstigning indenfor den seneste måned. Når der klikkes på linket, får man en søgning på det pågældende emneord i OPAC’en. Listen skal kunne vises hhv. som liste og som “cloud” (der tildeles classes til list items).

Scripts laves som php include med mulighed for at sætte forskellige parametre som variable (f.eks. hvor mange poster skal vises) som HTML output. PHP filerne kan inkluderes direkte i WordPress theme filer. Opstår behovet senere, kan det evt. laves som XML output.

2. Datawarehouse

Det blev drøftet hvorvidt det er nødvendigt at importere data til et selvstændigt datawarehouse. Selvom SUN serveren i praksis har rigeligt med kræfter og Oracle er verdens hurtigste database, vurderes det dog som nødvendigt at importere og lagre data i en selvstændig MySQL database aht. Axiells politik om, at hvis der udvikles op imod Oracle databasen, bortfalder oppetidsgarantien.

3. Tidshorisont og opgaver

Nu:
Morten:

  • Finder ud af hvor og hvordan forsidebilleder kan kaldes.
  • Fremskaffer liste over udlånsregler (Tabellen ITEMS – feltet Collections).
  • Fremsender allerede eksisterende link-generator-script mhp. opbygning af link-struktur til OPAC. (Links til OPAC skal opbygges af id nr. (nr=1234567890))
  • Opretter MySQL DB med tabeller og felter, der afspejler Axiells datamodel.

15. – 26. juni 2009:
Torben (Tinx):

  • Import af data fra Oracle til MySQL.
  • Kodning af SQL sætninger og scripts.

> 26. juni 2009:

  • Aftestning.

juli 2009:

  • Implementering.
Design & udførelse, Konsulenter 1 kommentar

Om projektet “Make the Data Work Harder”

Projektets formål er at underholde og inspirere til brug af bibliotekets materialer. Ved at høste "hændelser" i det fysiske bibliotek og data fra bibliotekets it-systemer produceres nye data og "live-feeds". Disse skal præsenteres og eksponeres på nettet og virke som inspirationskilde for bibliotekets brugere.

Projektet støttes af Styrelsen for Bibliotek og Medier.