Schlagwort-Archiv: shell

SQL Schema Dump erstellen und in neues Schema einspielen unter Oracle

Problem:
Ich habe ein Datenbank auf dem Oracle welche für die Entwicklung geclont werden soll

Lösung:
Über die Kommandozeile wird ein „Oracle Data Pump“ erstellt.
Ich melde mich als Systemuser an, erstelle ein Backup Directory und erstelle darin den Dump

sqlplus SYSTEM/oracle@ORCL
## Ab hier in SQLPLUS
SQL> desc DBA_DIRECTORIES
Name Null? Type
----------------------------------------- -------- ----------------------------
OWNER NOT NULL VARCHAR2(30)
DIRECTORY_NAME NOT NULL VARCHAR2(30)
DIRECTORY_PATH VARCHAR2(4000)

SQL> CREATE DIRECTORY tmp as '/home/oracle/EXPORTS' ;

Directory created.
SQL> exit
Disconnected from Oracle Database 11g
## Ab hier wieder in der Shell

# dieser Dump wird nun in /home/oracle/EXPORTS erstellt
expdp USER/PASS schemas=USER directory=tmp dumpfile=myDB.dmp logfile=myDB.log

Das Backup ist nun vom gewünschten Schema erstellt worden, nun wird der neue User erstellt und der Dump in ein neues Schema eingespielt. Wichtig ist hier das Remappen beim Importieren!!

sqlplus SYSTEM/oracle@ORCL
##Ab hier SQL Plus
SQL> CREATE USER TESTUSER IDENTIFIED BY TESTUSER;
SQL> GRANT CREATE SESSION TO TESTUSER;
SQL> exit
## Ab hier wieder in der Shell
impdp TESTUSER/TESTUSER schemas=USER directory=tmp dumpfile=myDB.dmp remap_schema=USER:TESTUSER

Das müsste es auch schon gewesen sein

MySQL Backupskript für Linux

Nichts geht über konsistente Backups. Vorallem im Datenbankbereich.
Zu diesem Zweck greife ich gerne auf das Script „automysqlbackup“ zurück.

Es handelt sich hierbei um ein Sourceforge Projekt, man findet es unter http://sourceforge.net/projects/automysqlbackup/.

Nach dem Download muss man das Paket entpacken, die install.sh ausführen und im Anschluss die Datei /etc/automysqlbackup/myserver.conf nach eigenem Belieben modifizieren.

Die README in /etc/automysqlbackup sollte man noch anschauen und entsprechend ein Script in /usr/local/sbin erstellen.

Einmal testweise ausführen und das Ergebnis prüfen. Schaut gut aus? Ok, nun noch ein Cronjob definieren, und fertig ist!

SheevaPlug – Open uboot Update

Wie schon im letzten Artikel über das SheevaPlug, wird auch diesmal wieder das u-boot Image upgedatet.
Nur mit einem Unterschied – wir kompilieren uns die aktuellste Variante selbst. In diesem Artikel wird der Vorgang beschrieben.
Los geht’s!

Die aktuelle u-boot Version auf meinem Plug:

Marvell>> version
U-Boot 1.1.4 (Jul 19 2009 – 16:03:28) Marvell version: 3.4.19

Zuerst muss man die Buildumgebung einrichten. Man benötigt in jedem Fall den GCC für die ARM Architektur. Die Binaries befinden sich innerhalb des SheevaPlug_Host_SWsupportPackageLinuxHost.zip Paket. Entweder man lädt das Paket von hier herunter oder verwendet das von der mitgelieferten CD. In diesem Fall werde ich das Paket von der CD nutzen, denn der Versionsstring auf der genannten Downloadseite zeigt aktuell 1.1.0 (Februar 2009)- auf der CD jedoch befindet sich das Paket in Version 1.2 (April 2009)

Ich entpacke das Paket in welchem sich gcc.tar.bz befindet. Diese Datei entpacke ich nun in den Ordner meiner Wahl, welchen ich anschließend exportieren und für die dauerhafte Verwendung an die PATH Variable in der .bashrc anhänge.

sudo mkdir -p /usr/local/sheevaplug
sudo tar xjf /pfad/zur/gcc.tar.bz2 -C /usr/local/sheevaplug
export PATH=$PATH:/usr/local/sheevaplug/gcc/bin
echo „#SheevaPlug – GCC Pfad“ >> ~./bashrc
echo „export PATH=$PATH:/usr/local/sheevaplug/gcc/bin“ >> ~/.bashrc

Nach diesem Eingriff sind im Terminal einige Befehle namens arm-none* verfügbar.

Jetzt müssen noch ein paar Dinge installiert werden, nämlich git-core und openocd. Das ist schnell erledigt mit

sudo aptitude install openocd git-core

Einen TFTP Server benötigt man für die spätere Installation, Putty oder cu für den seriellen Zugriff. Diese Dinge setze ich jetzt einfach mal voraus.
Jedenfalls ist jetzt das Benötigte beisammen und das Cross Compilen, wie man so schön sagt, kann beginnen.

Ich lege mir nun einen Ordner an und lade die Open U-Boot Sourcen runter wie auf der Seite beschrieben.

mkdir -p ~/.sheevaplug/open-uboot
cd ~/.sheevaplug/open-uboot
git clone git://git.denx.de/u-boot-marvell.git u-boot-marvell.git

Die Ausgabe von git quittiert den Download

remote: Counting objects: 107270, done.
remote: Compressing objects: 100% (20780/20780), done.
remote: Total 107270 (delta 87565), reused 105564 (delta 85876)
Receiving objects: 100% (107270/107270), 30.94 MiB | 1.61 MiB/s, done.
Resolving deltas: 100% (87565/87565), done.
Checking out files: 100% (6386/6386), done.

Nun wechsel ich in den von git erstellten Ordner und führe einen Checkout durch

cd u-boot-marvell.git
git checkout -b testing origin/testing

welcher ebenfalls quittiert wird

Branch testing set up to track remote branch testing from origin.
Switched to a new branch ‚testing‘

Jetzt kommt das eigentliche Cross Compilen… saubermachen, config erstellen & compilen!

make mrproper
make sheevaplug_config
make u-boot.kwb CROSS_COMPILE=arm-none-linux-gnueabi-

Der Wert von CROSS_COMPILE orientiert sich an dem Namen der neuen ARM GCC in /usr/local/sheevaplug/gcc/bin, hier heißen alle Dateien so, auch der gcc.
Der Kompiliervorgang ist schnell erledigt und präsentiert uns auch gleich das Ergebnis

Preparing kirkwood boot image to boot from nand
Nand ECC mode = default
Nand page size = 0x800
Image Type: Kirkwood Boot from NAND Flash Image
Data Size: 174124 Bytes = 170.04 kB = 0.17 MB
Load Address: 00600000
Entry Point: 00600000

Wie in dem zu Beginn erwähnten Artikel zu lesen ist, wird jetzt testweise das ELF Image hochgeladen und getestet ob es auch funktioniert.

file u-boot*

zeigt, welche Datei benutzt werden muss 😉

Nun werden 3 Terminalfenster benötigt:
In Fenster 1 wird nun openocd gestartet, den auf der Seite genannten Pfad musste ich dazu anpassen.

sudo openocd -f /usr/share/openocd/scripts/board/sheevaplug.cfg

Es steht folgendes im Fenster 1:

Open On-Chip Debugger 0.3.1 (2009-11-25-12:22)
$URL$
For bug reports, read
http://openocd.berlios.de/doc/doxygen/bugs.html
2000 kHz
trst_and_srst separate srst_gates_jtag trst_push_pull srst_open_drain
jtag_nsrst_delay: 200
jtag_ntrst_delay: 200
dcc downloads are enabled
Warn : use ‚feroceon.cpu‘ as target identifier, not ‚0‘
Info : clock speed 2000 kHz
Info : JTAG tap: feroceon.cpu tap/device found: 0x20a023d3 (mfg: 0x1e9, part: 0x0a02, ver: 0x2)
Info : Embedded ICE version 0

In Fenster 2 verbinde ich mich wie gewohnt über /dev/ttyUSB0

cu -s 115200 -l /dev/ttyUSB0

In Fenster 3 starte ich eine Telnetsession, der Verbindungsaufbau wird in Fenster 1 quittiert.

telnet localhost 4444

Dann wollen wir mal…
In Fenster 3, also der Telnetsitzung, werden nun folgende Befehle abgesetzt

sheevaplug_init
load_image /pfad/zur/kopilierten/elfdatei/u-boot
resume 0x00600000

Nach absetzen des letzten Befehls bootet das Gerät neu mit der selbstkompilierten u-boot wie man in Fenster 2 beobachten kann. Hier erkundige ich mich gleich nach der Version – schaut gut aus!

Marvell>> version
U-Boot 2009.11-00922-g1103196 (Feb 19 2010 – 13:36:10)
Marvell-Sheevaplug

Fenster 3 beende ich mit „exit“, Fenster 1 wird mit Strg+C beendet und anschließend in Fenster 2 ein „reset“ eingetippt.
SheevaPlug bootet dann wieder mit dem installierten u-boot.

Im letzten Schritt will ich die selbstkompilierte Version auf den Speicher installieren. Dazu geht man ahnlich vor wie im ersten u-boot Update Artikel. Zuerst muss die kompilierte u-boot.kwb (also NICHT die elf-binary!!) ins TFTP Verzeichnis kopiert und der Updatevorgang wie gehabt durchgeführt werden.
In der Kürze auf der SheevaPlug:

Marvell>> setenv ipaddr 192.168.254.39
Marvell>> setenv serverip 192.168.254.108
Marvell>> tftp 0x6400000 u-boot.kwb
Using egiga0 device
TFTP from server 192.168.254.108; our IP address is 192.168.254.39
Filename ‚u-boot.kwb‘.
Load address: 0x6400000
Loading: ###################################
done
Bytes transferred = 174640 (2aa30 hex)
Marvell>> nand erase 0x0 0x40000
NAND erase: device 0 offset 0x0, size 0x40000
Erasing at 0x20000 — 100% complete.
OK
Marvell>> nand write 0x6400000 0x0 0x40000
NAND write: device 0 offset 0x0, size 0x40000
262144 bytes written: OK
Marvell>> reset

Nun bootet die SheevaPlug neu und ich kontrolliere den Erfolg

Marvell>> version
U-Boot 2009.11-00922-g1103196 (Feb 19 2010 – 13:36:10)
Marvell-Sheevaplug

Sehr schön!

bootchart

Bootchart – darüber bin ich kürzlich mal gestolpert.

Es halndelt sich dabei um eine Applikation, welche im Stande ist, die Zeit des Bootens unter Linux festzuhalten. Eine witzige Sache wie ich finde. Durchaus auch praktisch um zu sehen, für was das System während des Starts Ressourcen benötigt. Das Tool ist also durchaus brauchbar um den Systemstart durch gesunde Analyse zu beschleunigen!

Was muss man tun?

Grundsätzlich nur folgendes:

aptitude install bootchart

Es installiert das genannte Programm, aber damit ist es noch nicht im Einsatz.

Editiert die Config-Datei /etc/bootchartd.conf, dort sollte man2 Dinge definieren

PROCESS_ACCOUNTING=“yes“

AUTO_RENDER=“yes“

AUTO_RENDER_DIR=“/root“

Desweiteren muss man den Bootparameter in GRUB unter /boot/grub/menu.lst, d.h. #defoptions= muss „init=/sbin/bootchartd“ angehängt werden um es zu aktivieren.

Leider überschreibt das Programm bei jedem Bootvorgang die zuvor erstellte Grafik, also sichert, wenn nötig, die Datei!

Kleine Tuningmaßnahmen können direkt folgen. Installiert dash (ein Ersatz für die bash), readahead (erinnert an prefetch unter M$ Windows) und kompiliert die Hauptmodule in den Kernel mit ein. Ein schnelles Filesystem kann wohl auch Wunder wirken wie ich lesen konnte.

Nach der Installation von dash sollte man mittels „dpkg-reconfigure dash“ den /bin/bash ersetzen, für readahead genügt ein „touch /etc/readahead/profile-once“ um beim nächsten Start die Indizierung zu erwirken.

Letztlich kann man noch Services abschalten die nicht zwingend benötigt werden. Apache oder MySQL um mal 2 Kandidaten (für den Desktopbetrieb) zu nennen.

Happy Tuning!

chmod für Dateien und Ordner

Möchte man ein chmod auf eine Verzeichnisstruktur rekursiv anwenden, so ist es für Ordner erforderlich das Ausführbar-Flag zu setzen, sonst kann man diese nicht mehr öffnen. Gleichzeitig möchte man aber die Dateien nicht ausführbar machen.

Aus dem Grund muss man sich mit find zu helfen wissen. Man sucht also die Ordner rekursiv und wendet das chmod auf das Ergebnis an.

Für Ordner schaut das so aus:

find ./ -type d -print0 | xargs -0 chmod 0755

Für Dateien schaut das so aus:

find ./ -type f -print0 | xargs -0 chmod 0644

Damit kann man dann auch größere Strukturen korrekt behandeln