Von Gitlab zu Gitea

Probleme

In letzter Zeit, sind die langen Anfangsladezeiten der Website von Gitlab immer häufiger aufgetreten. Sowie wurde die ganze Website immer langsamer und fast nicht mehr bedienbar. Daher habe ich mir das ganze auf meine Vserver etwas genauer angeschaut. Dabei hat sich herausgestellt, das Gitlab immer Ressourcen-hungriger wird. In meinem Fall waren es fast 1,4 GB Ram + 2-3 GB im Swap. Bei gerade 2 GB Hauptspeicher ist das nun doch etwas zu viel. Laut Gitlab wird derweilen auch empfohlenen, dass man 2 CPU Cores und 8 GB RAM benötigt (stand 01.07.2018), siehe hier https://docs.gitlab.com/ee/install/requirements.html.

Durch Zufall bin ich auf Gitea gestoßen, welches ich gleich ausprobieren musste. Und siehe da, die Funktionalität auf der Website ist genau das was ich benötige und noch etwas mehr. Des Weiteren benötigt es aktuell um die 300-500 MB Arbeitsspeicher und die ganze Anwendung besteht aus einer 50 MB großen Datei. Des Weiteren ist die Installation denkbar einfach und es kann der vorhandene MySQL-Server genutzt werden, oder auch SqlLite als Datenbank-Backend.

Installation

So und hier nun die Installation für Gitea (Im groben hab ich mich dabei an die Original-Anleitung von Gitea gehalten mit ein paar kleinen Anpassungen):

Vorbereitung

Hiermit wird die Anwendung in der Version 1.4.3 heruntergeladen und entsprechend umkopiert, so kann ohne weiteres auch die Anwendung aktualisiert werden:

wget -O gitea https://dl.gitea.io/gitea/1.4.3/gitea-1.4.3-linux-amd64
chmod +x gitea
cp gitea /usr/local/bin/gitea

Hiermit wird die Ordnerstrukturen erzeugt:

adduser --system --shell /bin/bash --gecos 'Git Version Control' --group --disabled-password --home /home/gitea gitea
mkdir -p /var/lib/gitea/{custom,data,indexers,public,log}
chown gitea:gitea /var/lib/gitea/{data,indexers,log}
chmod 750 /var/lib/gitea/{data,indexers,log}
mkdir /etc/gitea
chown root:gitea /etc/gitea
chmod 770 /etc/gitea

Gitea als Dienst

Nun noch den Dienst für Gitea einrichten, dafür nachfolgenden Code in die Datei „/etc/systemd/system/gitea.service“ eintragen:

[Unit]
Description=Gitea (Git with a cup of tea)
After=syslog.target
After=network.target
After=mysqld.service
[Service]
# Modify these two values and uncomment them if you have
# repos with lots of files and get an HTTP error 500 because
# of that
###
#LimitMEMLOCK=infinity
#LimitNOFILE=65535
RestartSec=2s
Type=simple
User=gitea
Group=gitea
WorkingDirectory=/var/lib/gitea/
ExecStart=/usr/local/bin/gitea web -c /etc/gitea/app.ini
Restart=always
Environment=USER=gitea HOME=/home/gitea GITEA_WORK_DIR=/var/lib/gitea GITEA_CUSTOM=/var/lib/gitea/custom
# If you want to bind Gitea to a port below 1024 uncomment
# the two values below
###
#CapabilityBoundingSet=CAP_NET_BIND_SERVICE
#AmbientCapabilities=CAP_NET_BIND_SERVICE
#StandardOutput=syslog # Ist der Default
#StandardError=syslog # Ist der Default
SysLogIdentifier=gitea
[Install]
WantedBy=multi-user.target

Danach den Dienst aktivieren und starten:

systemctl enable gitea
systemctl start gitea

Wenn man die Datei verändert hat, benötigt man erst ein nachladen vom systemd damit alles wieder funktioniert:

systemctl daemon-reload

Nacharbeiten

Nun geht man auf die Website und richtet Gitea ein. Danach sollte man noch die Konfigurationsdateien gegen Veränderung schützen:

chmod 750 /etc/gitea
chmod 644 /etc/gitea/app.ini

Die Konfigurationsdatei kann auch per Hand verändert werden, danach muss Gitea aber einmal neugestartet werden:

systemctl restart gitea

Diagnose

Um sich die Logausgaben, die von Gitea auf SdtOut geschrieben werden, anzuschauen, benutzt man journalctl:

journalctl -u gitea
journalctl -f -u gitea # Live log

Hinter dem Apache verstecken

Da ich als Haupteinstiegsserver einen Apache-Server am laufen habe, benötige ich nun noch eine Proxy-Konfiguration, um die Anfrage weiterzuleiten (Der angegebene Port, ist der Standard-Port von Gitea. Wenn man diesen angepasst hat, muss er hier ebenfalls angepasst werden!):

# unverschlüsselte Verbindung
<VirtualHost w.x.y.z:80>
  ServerName gitea.example.com
  ServerAdmin hostmaster@example.com
  # Umleiten auf HTTPS
  <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteRule ^/(.*) https://gitea.example.com/$1
  </IfModule>
  Redirect / https://gitea.exmaple.com/
</VirtualHost>
# SSL Konfiguration
<VirtualHost w.x.y.z:443>
  ServerName gitea.example.com
  ServerAdmin hostmaster@example.com
  SSLEngine On
  SSLHonorChipherOrder On
  SSLCipherSuite ...
  SSLVerifyDepth 10
  SSLCertificateFile /../...pem
  SSLCertificateKeyFile /../...key
  SSLCertificateKeyFile /../...crt
  SSLCertificateKeyFile /../...csr
  ...
  # Internes weiterleiten an den nginx
  <IfModule mod_proxy.c>
    ProxyVia On
    ProxyRequests Off
    ProxyPass / http://127.0.0.1:3000/
    ProxyPassReverse / http://127.0.0.1:3000/
    ProxyPreserveHost On
    <Proxy *>
      Options FollowSymLinks MultiViews
      AllowOverride All
      Order allow,deny
      allow from all
    </Proxy>
    # Notwendig, damit die https-Verbindung auf http weitergeleitet werden kann
    RequestHeader set Host "gitea.example.com"
    RequestHeader add X-Forwarded-Ssl on
    RequestHeader set X-Forwarded-For %{REMOTE_IP}%
    RequestHeader set X-Forwarded-Proto "https"
  </IfModule>
</VirtualHost>

Jetzt benötigt man noch die Proxy-Module und einen neuladen des Apache-Server:

a2enmod proxy
a2enmod proxy_http
service apache2 reload #oder restart wenn man möchte

Starten mit React

Einleitung

Da ich nun auch mal wieder in die Web-Entwicklung mit einsteigen wollte, habe ich mir erst mal angeschaut, welche Wege es nun gibt. Dabei ist mir Angular JS und React vor die Füße gelaufen. Nach längerem ausprobieren, hab ich mich nun für React entschieden, da mir dort die Vorgehensweise einfach besser gefällt.

Vorbereitung

Um ein Unterstützung durch Highlighting und IntelitiySense zu bekommen, hab ich mir zuerst Visual Studio Code installiert und zusätzlich noch NodeJS, mit welchen React am angenehmsten zu Entwickeln ist. Bei NodeJS benutze ich die aktuelle und nicht die LTS Version. Und damit das erzeugen der Projekte einfacher von der Hand geht, hab ich gleich das Packet „create-react-app“ installiert:

npm install -g create-react-app

Projekt erstellen

Mit create-react-app wird die Projektmappe erstellt und es kann direkt die erste Oberfläche betrachtet werden:

create-react-app example-app
cd example-app
npm start

Nach kurzem kompilieren wird der Webbrowser geöffnet und direkt auf die Website navigiert. npm kann mit [Strg]+ unterbrochen werden, dies muss noch mit [j] bestätigt werden. Danach können wir nun weitere notwendige Packet installieren. Die Installation wird immer mit folgende Befehl, bei dem man im Hauptverzeichnis des Projektordners stehen muss, durchgeführt:

npm install --save <packet(e)>

Hierbei wird dem npm gesagt das er die angegebenen Packet installieren soll, sowie die Packete in der package.json zu hinterlegen sind. Dadurch kann man jederzeit den Zustand der Packete wieder herstellen.

Meine verwendeten Packete

PacketnameBeschreibung
bootstrap@4.0.0-betaBootstrap selbst für die CSS-Dateien
reactstrapImplementierung von Klassen für direkte Verwendung in React
react-addons-transition-groupWird von reactstrap als mit zu installieren definiert
react-addons-css-transition-groupWird von reactstrap als mit zu installieren definiert
react-router-domDarüber werden die Urls und ihre Darstellungen definiert, wenn mehr als eine Seite benötigt wird
react-loadableZum zerteilen der Javascript-Dateien, damit beim Start nicht mehr alles geladen wird
react-iconsVielerei an Icons fürs Web, hier noch ein Icon-Viewer zum ermitteln welche vorhanden sind

Proxy wegen CORS

Für die Datenbeschaffung wird hier häufig mit RESTfuly Anfragen gearbeitet. Diese sind nicht immer mit in der Website integriert, sondern werden oft von anderen Stelle her konsumiert. Dabei reicht schon ein anderer Port auf dem gleichen Computer und man landet in einem CORS-Fehler.

Damit diese Probleme für den einen REST-Dienst nicht auftritt, kann man im Webpack einen Proxy einrichten. Die Einstellungen werden in der package.json, die im Wurzelverzeichnis zu finden ist, auf der ersten Ebene direkt hinterlegt, z.B:

{
  "name": "example-app",
  "version": "0.1.0",
  ...
  "proxy": ...
}

Alle folgenden Angaben, beziehen sich auf den Eintrag „proxy“, der entsprechend belegt wird.

Single-Proxy

Der einfachste Weg ist es, alle Anfragen die von der React-Seite nicht bearbeitet werden an den Proxy zu schicken. Dafür wird die Url des Proxy direkt angegeben, und es wird die komplette Url der Anfrage direkt am Proxy angefragt:

  "proxy": "http://example.com:12345",

Bei dieser Konfiguration würde eine Anfragen an den eigenen Server in dieser Form „http://ownserver/api/v1/view/component“ an dem Proxy-Server in dieser Form überstetzt werden: „http://example.com:12345/api/v1/view/component“.

URL per Proxy

Um es etwas weiter zu spezifieren, kann man auch Url-Präfixe angeben, die explizit an den Proxy weitergeleitet werden. Dafür wird der Präfix und das Ziel angegeben:

  "proxy": {
    "/api": {
      "target": "http://example.com:12345",
      "ws": true
    }
  }

In diesem Fall werden nur noch Anfragen die mit „/api“ beginnen an den Proxy weitergeleitet, dabei bleibt die URL ebenso gleich wie beim „Single Proxy“.

Projekt verwalten

Nach dem nun das Projekt erstellt wurde und alle notwendigen Packete installiert sind, wird das Projekt nun im Visual Studio Code über „Datei -> Ornder öffnen“ geöffnet. Nach dem öffnen werden uns 3 Ordner und ein paar Dateien erscheinen:

node_moduleHierhin werden alle lokal installierten Packet abgelegt, welche über den „import“-Befehl eingebunden werden können
publicHier liegen die statischen Elemente, wie z.B. die index.html. Alles was direkt in der Index.html eingebunden werden soll, muss in diesem oder einem Unterordner gelegt werden
srcHier liegen die eigentlichen Quellen, die später die Anwendung definieren. Die noch zu erstellenden Unterordner sind eine häufig zu findene Konvention
src/componentsIn sich abgeschlossene Komponenten, für wiederkehrendes oder für Trennung von Hauptbestandteilen. Hier könnten z.B. Sidebar oder der Header liegen
src/containers
src/viewsDie Ansichten im Hauptfenster, die durch unterschiedliche URL’s angesteuert werden können

Private Packete

Zum Gliedern von Elementen kann man diese in Unterordner packen und mit einer „package.json“-Datei versehen, damit wird beim Import in den anderen Dateien nur noch der Unterordner angeben und alles weitere wird über die package.json definiert. Hier ein Beispiel einer solchen Datei:

{
  "name": "Sidebar",
  "version": "0.0.0",
  "private": true,
  "main": "./sidebar.jsx"
}

In diesem Fall wird das Packet mit den Namen „Sidebar“ betitelt und liegt in der Verison 0.0.0 vor. Der Parameter private sorgt dafür, dass diese Packet nur innerhalb des Projektes verwendet wird. Und welche Datei als Einstieg benutzt werden soll, wird über „main“ definiert, was in diesem Fall die sidebar.jsx ist.

Vorlage Themes

FAQ (oder Bootstrap und seine Tücken)

Fixed Header liegt über den Body

Damit bei einem Fixed Header der Content nicht hinter dem Header steht, muss am umschließenden Div bzw. Body vom Nav und Content ein „padding-top“ von „50px“ eingetragen.

Linux System mit Arch Linux

Installation

Hier soll eine Sammlung von Programmen entstehen, die ich aktuell nicht mehr auf meinen Rechner missen möchte und eine bestimmte Grundausstattung besitzen. Dieser Artikel wird immer wieder aktualisiert, wenn neue wichtige Programme hinzukommen.

Grundinstallation

Als Linux-System wird hier Manjaro verwendet, was auf dem Arch-Linux aufbaut. Vorteil von Manjaro ist der graphische Installer gegenüber dem reinen Arch-Linux.

Und wieso wurde es ein Arch-Linux?

Zum einen sind die meisten vorhanden Packete schon aktueller als in den anderen Distributionen und zusätzlich gibt es noch yaourt, mit dem die aktuellsten Sourcen der meisten Packete direkt übersetzen lassen und die Packete im Anschluss installieren.

Grapische Oberfläche

SDDM – Login-Manager – https://wiki.archlinux.org/index.php/SDDM

PacketnameTypBezugsquelle
SDDMLogin-Managerhttps://wiki.archlinux.org/index.php/SDDM
OpenboxWindows Manager
SynapseProgrammstarter
RemminaRDP (mstsc)http://www.remmina.org/wp/
KRDCRDP (mstsc) KDEhttps://www.kde.org/applications/internet/krdc/

Audioausgabe (mit AirPlay)

Damit die Ausgabe des Linux-System über AirPlay-fähige Geräte gestreamt werden kann, hab ich folgende 2 Pakete benötigt:

  • pulseaudio-raop2: Streamen der Ausgabe an AirPlay Geräte.
  • pavucontrol: damit wird die Ausgabe des Audiostreams eingestellt (Umschalter für z.B. MPlayer auf AirPlay-Gerät)

Nach dem Installieren müssen folgende Befehle ausgeführt werden:

sudo systemctl start avahi-daemon #startet den Dienst
avahi-browse -t --all #Zeigt alle AirPlay Geräte im Netz an
sudo systemctl enable avahi-daemon #aktiviert den Dienst für Autostart

Weitere Informationen findet man auch hier: AirTunes.

 

Weitere Programme:

PacketnameTypBezugsquelle
Visual Studio CodeEditorMicrosoft
AtomEditoryaourt

Logitech K350 MediaKeys mit AIMP und MPC-HC

Nach dem ich mir nun die K350 von Logitech zugelegt habe, hatte ich zuerst schon bedenken, dass ich wieder vom AIMP-MediaPlayer zu Winamp oder gar Windows Media Player wechseln muss, da im AIMP die MediaKeys von der Tastatur nicht funktionierten.

Glücklicherweise fand ich aber im Internet die Lösung, und zwar muss in der Player-Ini des SetPoint-Programmes AIMP nur nachgetragen werden. Wichtig dabei ist darauf zu achten, welche Version von AIMP installiert ist. Hatte hier ein paar Probleme da ich mit einer falsche Version gearbeitet hatte.

Die Ini findet man nach der Standard-Installation unter folgenden Pfad:

%ProgramFiles%\Logitech\SetPointP\players.ini

Die INI muss um die Zeilen 2-4 erweitert werden, die der Sektion „Players“ hinzugefügt werden müssen:

[Players]
AIMP2=cmd,AIMP2.exe,Winamp v1.x,xxx,xxx,40045,40046,40047,40044,40048,0,1,WinAmp 5
AIMP3=cmd,AIMP3.exe,Winamp v1.x,xxx,xxx,40045,40046,40047,40044,40048,0,1,WinAmp 5
AIMP4=cmd,AIMP.exe,Winamp v1.x,xxx,xxx,40045,40046,40047,40044,40048,0,1,WinAmp 5
mplayerc=wac,mpc-hc64.exe,MediaPlayerClassicW,Windows Media Player,xxx,xxx,xxx,xxx,xxx,xxx,0,1,Media Player Classic
...

Alle anderen Einträge müssen nicht angepasst werden. Die markierte Zeile 5 zeigt, wie der Eintrag definiert ist, damit der Media Player Classic (MPC-HC) von der SetPoint-Software zu erkennen wird.

VMware Player 6 unter Windows 10

Nach dem erfolgreichen Update von Windows 8.1 auf Windows 10 hat leider der VMware Player nicht richtig funktioniert.

Zuerst konnte die VM’s zwar gestartet werden, aber keine der gestarteten VM’s ist mehr ins Netzwerk gekommen. Bei „Configure Adapaters“ bei der Bridge-Einstellung, war auch keine der Netzwerkkarten mehr anzuwählen. Nach etwas Recherche bin ich darauf gestoßen, dass der Bridge-Dienst nicht mehr auf der Netzwerkkarte installiert ist.

Um dies zu beheben, muss man zu den Netzwerkeinstellungen. Öffnet dort das Eigenschaftsfenster der physikalischen Netzwerkkarte und dort kann man über die Schaltfläche „Installatieren…“ neue Komponenten einrichten. Nach dem Klick auf die Schalftfläche „Dienst“ auswählen und mit „Hinzufügen…“ bestätigen. Dann unter dem Hersteller VMware den „VMware Bridge Protocol“ Eintrag auswählen und mit „OK“ bestätigen. Nach dem installieren, können dann die Netzwerkkarten bei Bridge wieder konfiguriert werden und eine Verbindung ins Netzwerk ist wieder möglich.

Nach einen Neustart des Host ist dann ein andere Fehler aufgetaucht, und zwar wurde beim versuch eine VM zu starten die Fehlermeldung „error while powering on: internal error“ angezeigt.

Um diese Problem zu lösen, muss der Dienst „VMware Authorization Service“ manuell nach gestartet werden. Er steht zwar auf Automatisch, ist beim hochfahren aber nicht gestartet worden oder wieder abgestürzt. Nach dem Start des Dienstes funktioniert jede VM wieder

Arch Linux Single User Mode

Um bei Arch Linux in den Single User Mode zu kommen ist fogendes notwendig:

  1. Im Grub den Eintrag des zu startenden Linux auswählen und die Taste [E] drücken
  2. Im angzeigten Skript die nachfolgende Stelle suchen:
    ... rw  quiet splash
  3. „quiet splash“ entfernen und „single“ einsetzen
  4. Nun mit [Strg]+[X] das starten des Linux initieren
  5. nach kurzer Wartezeit, wird das root-Passwort verlangt, dies bitte eingeben
  6. nun kann man die notwendigen Änderungen durchführen damit das System wieder richtig startet, z.B. einen lightdm deaktivieren und lxdm wieder aktivieren:
    systemctl disable lightdm
    systemctl enable lxdm
  7. Wenn alles fertig ist, kann durch „exit“ der Single User Mode verlassen werden, und der Startvorgang läuft weiter.

GitLab konfigurieren

Für die Konfiguration des GitLab mit dem Omnibus-Package ist nur eine Datei notwendig, diese ist die „/etc/gitlab/gitlab.rb“. Ein Beispiel:

# URL die im Browser eingegeben wird. (Es scheint so, das am Ende kein / stehen darf)
external_url "https://gitlab.example.com"
# Einstellungen für nginx
nginx['listen_address'] = '127.0.0.1'
nginx['listen_https'] = false
nginx['listen_port'] = 880
nginx['redirect_http_to_https'] = true
# Ist notwendig, damit die richtige URL bei den Projekten steht. Gerade bei Sub-Sub-Domains, z.B: gitlab.mydomain.example.com.
gitlab_rails["gitlab_host"] = 'gitlab.example.com'
# EMail-Adresse die als Absender eingetragen wird
gitlab_railse["gitlab_email_from"] = 'gitlab@example.com'
# Für neuere Version, wird mehr Arbeitsspeicher benötigt (recommended 4 GB), um diese etwas zu umgehen kann die
#   Unicorn-Arbeitsthread verringer, die typischerweise auf Anzahl Cores + 1 eingestellt sind:
#   Weitere Info: https://docs.gitlab.com/ce/install/requirements.html#unicorn-workers
unicorn['worker_processes'] = 2
unicorn['worker_timeout'] = 60

Nach jeder Änderung in der Konfiguration muss gitlab rekonfiguriert werden, das macht man mit folgenden Befehl:

gitlab-ctl reconfigure

Wenn nginx nicht starten kann, weil ein anderer Webserver schon läuft, dann kann man das wie folgt lösen. Zuerst muss man nginx umkonfigurieren, damit dieser auf einen anderen Port lauscht. In der Datei „/etc/gitlab/gitlab.rb“ die nachfolgenden Einträge hinzufügen:

# Einstellungen für nginx
nginx['listen_address'] = '127.0.0.1'
nginx['listen_https'] = false
nginx['listen_port'] = 880
nginx['redirect_http_to_https'] = true

Da hier ein interne Verbindung benutzt wird, um von dem einen Webserver auf den anderen zu kommen, reicht hier http völlig aus. Das „:880“ definiert den Port an dem nginx lauschen soll. Sollte nach dem Re-konfigurieren von gitlab, nginx noch nicht am angegeben Port lauschen, was mit nachfolgenden Befehl nachgeprüft werden kann:

netstat -pant

Dann sollte man nginx per Hand stoppen und starten:

gitlab-ctl stop nginx
gitlab-ctl start nginx

Nun muss der andere Webserver noch als Proxy eingerichtet werden. Beim Apache (ab Version 2.0) müssen zuerst die Proxy-Module aktiviert werden:

a2enmod proxy
a2enmod proxy_http

In der VHost-Konfiguration zum Gitlab-Server sollte dann ungefähr so ausschauen:

# unverschlüsselte Verbindung
<VirtualHost w.x.y.z:80>
  ServerName gitlab.example.com
  ServerAdmin hostmaster@example.com
  # Umleiten auf HTTPS
  <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteRule ^/(.*) https://gitlab.example.com/$1
  </IfModule>
  Redirect / https://gitlab.exmaple.com/
</VirtualHost>
# SSL Konfiguration
<VirtualHost w.x.y.z:443>
  ServerName gitlab.example.com
  ServerAdmin hostmaster@example.com
  SSLEngine On
  SSLHonorChipherOrder On
  SSLCipherSuite ...
  SSLVerifyDepth 10
  SSLCertificateFile /../...pem
  SSLCertificateKeyFile /../...key
  SSLCertificateKeyFile /../...crt
  SSLCertificateKeyFile /../...csr
  ...
  # Internes weiterleiten an den nginx
  <IfModule mod_proxy.c>
    ProxyVia On
    ProxyRequests Off
    ProxyPass / http://127.0.0.1:880/
    ProxyPassReverse / http://127.0.0.1:880/
    ProxyPreserveHost On
    <Proxy *>
      Options FollowSymLinks MultiViews
      AllowOverride All
      Order allow,deny
      allow from all
    </Proxy>
    # Notwendig, damit die https-Verbindung auf http weitergeleitet werden kann
    RequestHeader set Host "gitlab.example.com"
    RequestHeader add X-Forwarded-Ssl on
    RequestHeader set X-Forwarded-For %{REMOTE_IP}%
    RequestHeader set X-Forwarded-Proto "https"
  </IfModule>
</VirtualHost>

Und dann noch den Apache die Konfiguration erneut einlesen lassen, mit nachfolgenden Befehl:

service apache2 reload #oder restart wenn man möchte

Nun sollte man über den Zugriff „https://gitlab.example.com“ auf die GitLab anmelde Webseite kommen. Und bei den Projekten, sollten auch die richtigen URL’s erscheinen.

Weitere Informationen zu Einstellungen von GitLab findet man hier.

seed auf MS SQL Tabellen ermitteln bzw. setzen

Um den SEED auf einer MS SQL Server Tabelle zu setzen, sind folgende Befehle notwendig:

dbcc checkident (<tblname>, reseed, <newMaxSeed>)

Ein Beispiel:

-- create table tblMy (nKey identity(1, 1), ...)
declare @maxKey int
select @maxKey = max(nKey) from tblMy
dbcc checkident (tblMy, reseed, @maxKey)

Hier noch ein Befehl, mit dem man alle aktuellen Seeds der vorhanden Tabellen sieht, die auch eine Identity-Spalte besitzten:

select Seed            = ident_seed(TABLE_NAME)
     , Increment       = ident_incr(TABLE_NAME)
     , CurrentIdentity = ident_current(TABLE_NAME)
     , Table           = TABLE_NAME
from   INFORMATION_SCHEMA.TABLES
where  objectproperty(object_id(TABLE_NAME), 'TableHasIdentity') = 1
and    TABLE_TYPE = N'BASE TABLE'

Tabelle aus MS SQL Server exportieren und wieder einspielen

Um eine Tabelle komplett aus dem MS SQL Server zu exportieren benutzt man typischer Weise den BCP Befehl. Zum exportieren benutzt man folgenden Befehl:

bcp <db>.<schema>.<table> out <table-file> -S <sql-svr> -T -c

Um diese Tabelle wieder am anderen Server einzubuchen, sollte diese Tabelle am besten leer sein. Das Eintragen funktioniert dann mit folgenden Befehl:

bcp <db>.<schema>.<table> in <table-file> -S <sql-svr> -T -c

Die Bedeutung der Parameter am BCP-Befehl:

  • out (in): der Weg den die Daten gehen, heraus aus der DB in die Datei (von der Datei in die DB)
  • -S <sql-svr>: Darüber wird der MS-SQL-Server angegeben, mit dem gearbeitet wird
  • -T: Gesicherte Verbindung, wenn nicht möglich kann über „-U/-P“ ein Benutzer und das Password angegeben werden
  • -c: definiert die Zeichentypen, wenn dies nicht angegeben wird, muss für jede Spalte die Definition einzeln angegeben werden

Für weitere Hilfe, kann man noch hier bei Microsoft direkt nachschauen für weitere Parameter.