Aug 24

Automount unter Solaris 10

 Zuerst muss das Verzeichnis auf dem eigenen System angelegt werden.
Dann muss in der Datei

/etc/auto_direct

der notwendige Mountpoint eingerichtet werden.

<Verzeichnis auf dem eigenen System> -rw,soft,vers=3,intr,timeo=36000,acregmax=10,rsize=8192,wsize=8192 <Quellrechner>:<Quellverzeichnis>

Ggf. müssen noch die Parameter angepasst werden.
Anschließend muss mit dem Kommando

automount

dem System noch mitgeteilt werden, dass sich an der Konfiguration etwas geändert hat.
Fertig.

Dez 14

Accounts unter Solaris

Einen User das Login entziehen:

Als User root kann folgender Befehl genutzt werden um einen User zu sperren.

passwd -l <user>

Anschließend ist der Account nicht mehr von außen sowie von innen erreichbar. Einzige Ausnahme ist der User root des entsprechenden Systems. Dieser User kann sich immer noch mit dem Umweg

su - <user>

auf den gesperrten Accounts einloggen.

Okt 08

BTRFS Kommandos

BTRFS ist ein mächtiges Filesystem, das zu dem auch noch sehr leicht zu administrieren ist.
Mit dem BTRFS ist eine Einrichtung eines Raid-Verbundes ebenso möglich, wie Erweiterung des Root-Filesystems im laufenden Betrieb. Ebenso können einzelne Verzeichnisbäume gezielt erweitert (Subvolume), als auch Snapshots erstellt werden.

Hier einige Kommandos:

 

Anzeigen der BTRFS Partitionen

btrfs filesystem show

oder abgekürzt:

btrfs fi sh

 

Detaillierte Informationen über den Platzverbrauch anzeigen

btrfs fi df /

 

Zusätzliche Partition bzw. Platte (Chunk) an ein BTRFS anhängen

btrfs device add /dev/sdc /

Hier wird die komplette dritte Festplatte /dev/sdc an das Root-Filesystem angehängt.

 

BTRFS ausballancieren um alle Chunks auszunutzen

btrfs fi balance start /

 

Platte bzw. Chunk aus einem BTRFS entfernen

btrfs device delete /dev/sdc /

Hierfür muss natürlich auf den übrig gebliebenen Chunks genügend Speicher zur Verfügung stehen.

 

Komplettes BTRFS auf RAID0 setzen

btrfs balance start --force -sconvert=raid0 -mconvert=raid0 -dconvert=raid0 /

 

Mrz 04

IPTABLES Black- und Whitelist

Iptables Whitelist
Bei diesem einfachen Beispiel der iptables-Datei (unter CentOS 6 /etc/sysconfig/iptables) werden alle Verbindungen gekappt. Die einzigen Ausnahmen bilden dabei zwei IP-Adressen: 192.168.0.17 und 192.168.0.22. Diese IP-Adressen können sowohl einkommend als auch ausgehend für icmp, tcp und udp bedient werden.

# Generated by iptables-save v1.4.7 
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [166:25321]
 
#192.168.0.17 erlauben
-A INPUT -s 192.168.0.17/32 -p icmp -m icmp -j ACCEPT
-A INPUT -s 192.168.0.17/32 -p tcp -m tcp -j ACCEPT
-A INPUT -s 192.168.0.17/32 -p udp -m udp -j ACCEPT
-A OUTPUT -d 192.168.0.17/32 -p icmp -m icmp -j ACCEPT
-A OUTPUT -d 192.168.0.17/32 -p tcp -m tcp -j ACCEPT
-A OUTPUT -d 192.168.0.17/32 -p udp -m udp -j ACCEPT
 
#192.168.0.22 erlauben
-A INPUT -s 192.168.0.22/32 -p icmp -m icmp -j ACCEPT
-A INPUT -s 192.168.0.22/32 -p tcp -m tcp -j ACCEPT
-A INPUT -s 192.168.0.22/32 -p udp -m udp -j ACCEPT
-A OUTPUT -d 192.168.0.22/32 -p icmp -m icmp -j ACCEPT
-A OUTPUT -d 192.168.0.22/32 -p tcp -m tcp -j ACCEPT
-A OUTPUT -d 192.168.0.22/32 -p udp -m udp -j ACCEPT
 
#localhost erlauben
-A INPUT -s 127.0.0.1 -p icmp -m icmp -j ACCEPT
-A INPUT -s 127.0.0.1 -p tcp -m tcp -j ACCEPT
-A INPUT -s 127.0.0.1 -p udp -m udp -j ACCEPT
-A OUTPUT -d 127.0.0.1 -p icmp -m icmp -j ACCEPT
-A OUTPUT -d 127.0.0.1 -p tcp -m tcp -j ACCEPT
-A OUTPUT -d 127.0.0.1 -p udp -m udp -j ACCEPT
 
COMMIT

IPTABLES-Blacklist
Bei diesem Beispiel wird allen IP-Adressen außer der 192.168.0.17 und 192.168.0.22 erlaubt über icmp, tcp und udp zu kommunizieren.

# Generated by iptables-save v1.4.7 
*filter
:INPUT ACCEPT [42930:57785664]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [42884:57880741]
 
#192.168.0.17 verbieten
-A INPUT -s 192.168.0.17/32 -p icmp -m icmp -j REJECT --reject-with icmp-host-unreachable
-A INPUT -s 192.168.0.17/32 -p tcp -m tcp -j REJECT --reject-with icmp-host-unreachable
-A INPUT -s 192.168.0.17/32 -p udp -m udp -j REJECT --reject-with icmp-host-unreachable
-A OUTPUT -d 192.168.0.17/32 -p icmp -m icmp -j REJECT --reject-with icmp-host-unreachable
-A OUTPUT -d 192.168.0.17/32 -p tcp -m tcp -j REJECT --reject-with icmp-host-unreachable
-A OUTPUT -d 192.168.0.17/32 -p udp -m udp -j REJECT --reject-with icmp-host-unreachable
 
#192.168.0.22 verbieten
-A INPUT -s 192.168.0.22/32 -p icmp -m icmp -j REJECT --reject-with icmp-host-unreachable
-A INPUT -s 192.168.0.22/32 -p tcp -m tcp -j REJECT --reject-with icmp-host-unreachable
-A INPUT -s 192.168.0.22/32 -p udp -m udp -j REJECT --reject-with icmp-host-unreachable
-A OUTPUT -d 192.168.0.22/32 -p icmp -m icmp -j REJECT --reject-with icmp-host-unreachable
-A OUTPUT -d 192.168.0.22/32 -p tcp -m tcp -j REJECT --reject-with icmp-host-unreachable
-A OUTPUT -d 192.168.0.22/32 -p udp -m udp -j REJECT --reject-with icmp-host-unreachable
 
COMMIT

Feb 27

Tomcat-Installation unter CentOS7

Am einfachsten ist die Installation über yum:

yum install tomcat tomcat-webapps tomcat-admin-webapps

Nachdem die Installation abgeschlossen wurde, sollten die notwendigen User/Rollen in der Datei /usr/share/tomcat/conf/tomcat-users.xml angepasst und aktiviert werden.

<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<role rolename="manager-jmx"/>
<role rolename="manager-status"/>
<role rolename="admin-gui"/>
<role rolename="admin-script"/>
<user username="admin" password="xxx" roles="manager-gui,manager-script,manager-jmx,manager-status,admin-gui,admin-script"/>

Anschließend noch den Tomcat neustarten

systemctl restart tomcat.service

-> fertig.

Jul 02

Speicherverbraucher Top10 der Oracle-Objekte

Top10 der Speicherverbraucher einer Oracle-DB ermitteln:

SELECT *
  FROM (  SELECT *
            FROM dba_segments
        ORDER BY bytes DESC)
 WHERE ROWNUM <= 10

TOP10 der größten Lobsegmente mit zugehöriger Tabellen-/Spaltenzuordnung

SELECT *
  FROM (  SELECT l.owner,
                 l.table_name,
                 l.column_name,
                 l.segment_name,
                 l.tablespace_name,
                 l.index_name,
                 ROUND (s.bytes / 1024 / 1024) "SIZE IN MB"
            FROM dba_lobs l, dba_segments s
           WHERE     s.segment_type = 'LOBSEGMENT'
                 AND l.segment_name = s.segment_name
        ORDER BY s.bytes DESC)
 WHERE ROWNUM <= 10;

Jun 17

vi als Hex-Editor

Manchmal benötigt man einen Hex-Editor. Der vi bringt dazu alles notwendige mit.

Um in den Hex-Modus zu wechseln gibt man im Befehlsmodus einfach folgendes ein:

:%!xxd

Um den Hex-Modus wieder zu verlassen, dieses:

:%!xxd –r

Apr 15

Benötigter Platz für Undo-Tablespace berechnen

Um die Größe des Undo-TS zu bestimmen/prüfen, ist folgendes SQL-Statement sehr hilfreich:

SELECT d.undo_size/(1024*1024) "ACTUAL UNDO SIZE [MByte]",
       SUBSTR(e.value,1,25) "UNDO RETENTION [Sec]",
       (TO_NUMBER(e.value) * TO_NUMBER(f.value) *
       g.undo_block_per_sec) / (1024*1024) 
      "NEEDED UNDO SIZE [MByte]"
  FROM (
       SELECT SUM(a.bytes) undo_size
         FROM v$datafile a,
              v$tablespace b,
              dba_tablespaces c
        WHERE c.contents = 'UNDO'
          AND c.status = 'ONLINE'
          AND b.name = c.tablespace_name
          AND a.ts# = b.ts#
       ) d,
      v$parameter e,
       v$parameter f,
       (
       SELECT MAX(undoblks/((end_time-begin_time)*3600*24))
         undo_block_per_sec
         FROM v$undostat
       ) g
 WHERE e.name = 'undo_retention'
  AND f.name = 'db_block_size';

Jan 16

Oracle Tablespace bzw. Databasefiles verkleinern

Um einen Tablespace auf ein Minimum zu reduzieren, kann folgendes SQL-Kommando genutzt werden:

SELECT DECODE (
    end_block_1,
    NULL,    'ALTER TABLESPACE '
          || TABLESPACE_NAME 
          || ' DROP DATAFILE '''
          || FILE_NAME
          || ''';',
       'ALTER DATABASE DATAFILE '''
          || FILE_NAME
          || ''' RESIZE '
          || CEIL ( (NVL (END_BLOCK_1, 1) * 8192) / 1024 / 1024)
          || 'M;')
    RESIZE_COMMAND
FROM (SELECT FILE_NAME,
             TABLESPACE_NAME,
             FILE_ID,
             FILE_BLOCKS,
             SEGMENT_NAME SEGMENT_NAME_1,
             START_BLOCK START_BLOCK_1,
             END_BLOCK END_BLOCK_1,
             LEAD (SEGMENT_NAME, 1)
                  OVER (PARTITION BY FILE_NAME ORDER BY START_BLOCK DESC)
                  SEGMENT_NAME_2,
             LEAD (START_BLOCK, 1)
                  OVER (PARTITION BY FILE_NAME ORDER BY START_BLOCK DESC)
                  START_BLOCK_2,
             LEAD (END_BLOCK, 1)
                  OVER (PARTITION BY FILE_NAME ORDER BY START_BLOCK DESC)
                  END_BLOCK_2,
             LEAD (SEGMENT_NAME, 2)
                  OVER (PARTITION BY FILE_NAME ORDER BY START_BLOCK DESC)
                  SEGMENT_NAME_3,
             LEAD (START_BLOCK, 2)
                  OVER (PARTITION BY FILE_NAME ORDER BY START_BLOCK DESC)
                  START_BLOCK_3,
             LEAD (END_BLOCK, 2)
                  OVER (PARTITION BY FILE_NAME ORDER BY START_BLOCK DESC)
                  END_BLOCK_3,
             POSITION
         FROM (SELECT FILE_NAME,
                      TABLESPACE_NAME,
                      FILE_ID,
                      FILE_BLOCKS,
                      SEGMENT_NAME,
                      BLOCK_ID START_BLOCK,
                      BLOCK_ID + BLOCKS - 1 END_BLOCK,
                      POSITION
                   FROM (SELECT DISTINCT
                                DDF.TABLESPACE_NAME,
                                DDF.FILE_NAME,
                                DDF.FILE_ID,
                                DDF.BLOCKS FILE_BLOCKS,
                                DE.SEGMENT_NAME,
                                DE.BLOCK_ID,
                                DE.BLOCKS,
                                ROW_NUMBER ()
                                OVER (PARTITION BY DDF.FILE_NAME
                                    ORDER BY DE.BLOCK_ID DESC)
                                    POSITION
                             FROM DBA_DATA_FILES DDF, DBA_EXTENTS DE
                             WHERE   DDF.FILE_ID = DE.FILE_ID(+)
                                         AND DDF.TABLESPACE_NAME LIKE 'TS_%')
                   WHERE POSITION <= 3))
         WHERE POSITION = 1
         ORDER BY FILE_ID;

Dabei muss der entsprechende Tablespace-Name angegeben bzw. korrigiert werden (im Beispiel in der viertletzten Zeile: TS_%). Die erzeugte Ausgabe enthält dann die Änderungsbefehle, um die Databasefiles zu verkleinern bzw. zu löschen:

ALTER DATABASE DATAFILE '/home/oracle/datenbanken/DB/TS_ABC/abc_1.dbf' RESIZE 2048M;
ALTER DATABASE DATAFILE '/home/oracle/datenbanken/DB/TS_ABC/abc_2.dbf' RESIZE 740M;

ACHTUNG: Wenn die Kommandos ohne Kontrolle abgesetzt werden, kann der geänderte Tablespace so klein werden, dass keine Inserts mehr möglich sind. Also kann unter Umständen die Datenbank stehen bleiben. Daher bitte immer die abgesetzten Kommandos manuell prüfen!!!

Jan 16

Oracle-Databasefiles unter SAP verkleinern

Databasefiles werden mit Hilfe der brtools verkleinert.

Um die maximal mögliche Verkleinerung zu erzielen, kann folgendes SQL-Kommando genutzt werden:

SELECT DECODE (
    end_block_1,
    NULL,    'brspace -c force -f dfalter -a drop  -f '''
          || FILE_NAME
          || '''',
       'brspace -c force -f dfalter -a resize -f '''
    || FILE_NAME
    || ''' -s  '
    || CEIL ( (NVL (END_BLOCK_1, 1) * 8192) / 1024 / 1024))
    RESIZE_COMMAND
FROM (SELECT FILE_NAME,
             FILE_ID,
             FILE_BLOCKS,
             SEGMENT_NAME SEGMENT_NAME_1,
             START_BLOCK START_BLOCK_1,
             END_BLOCK END_BLOCK_1,
             LEAD (SEGMENT_NAME, 1)
                  OVER (PARTITION BY FILE_NAME ORDER BY START_BLOCK DESC)
                  SEGMENT_NAME_2,
             LEAD (START_BLOCK, 1)
                  OVER (PARTITION BY FILE_NAME ORDER BY START_BLOCK DESC)
                  START_BLOCK_2,
             LEAD (END_BLOCK, 1)
                  OVER (PARTITION BY FILE_NAME ORDER BY START_BLOCK DESC)
                  END_BLOCK_2,
             LEAD (SEGMENT_NAME, 2)
                  OVER (PARTITION BY FILE_NAME ORDER BY START_BLOCK DESC)
                  SEGMENT_NAME_3,
             LEAD (START_BLOCK, 2)
                  OVER (PARTITION BY FILE_NAME ORDER BY START_BLOCK DESC)
                  START_BLOCK_3,
             LEAD (END_BLOCK, 2)
                  OVER (PARTITION BY FILE_NAME ORDER BY START_BLOCK DESC)
                  END_BLOCK_3,
             POSITION
         FROM (SELECT FILE_NAME,
                      FILE_ID,
                      FILE_BLOCKS,
                      SEGMENT_NAME,
                      BLOCK_ID START_BLOCK,
                      BLOCK_ID + BLOCKS - 1 END_BLOCK,
                      POSITION
                   FROM (SELECT DISTINCT
                                DDF.FILE_NAME,
                                DDF.FILE_ID,
                                DDF.BLOCKS FILE_BLOCKS,
                                DE.SEGMENT_NAME,
                                DE.BLOCK_ID,
                                DE.BLOCKS,
                                ROW_NUMBER ()
                                OVER (PARTITION BY DDF.FILE_NAME
                                    ORDER BY DE.BLOCK_ID DESC)
                                    POSITION
                             FROM DBA_DATA_FILES DDF, DBA_EXTENTS DE
                             WHERE   DDF.FILE_ID = DE.FILE_ID(+)
                                         AND DDF.TABLESPACE_NAME LIKE 'PSAPSR3')
                   WHERE POSITION <= 3))
         WHERE POSITION = 1
         ORDER BY FILE_ID;

Die Ausgabe kann dann auf der Kommandozeile ausgeführt werden. Man sollte aber bedenken, dass (falls im Vorfeld die gesamte DB reorganisiert wurde) anschließend kaum noch Platz für neue Daten zur Verfügung steht. Also sollte man die Ausgaben dieses SQL-Statements mit Vorsicht genießen und ggf. noch etwas Kapazität aufschlagen.

Ausgabebeispiel:

brspace -c force -f dfalter -a resize -f '/oracle/X01/sapdata1/sr3_1/sr3.data1' -s  5240
brspace -c force -f dfalter -a resize -f '/oracle/X01/sapdata1/sr3_2/sr3.data2' -s  5140
brspace -c force -f dfalter -a resize -f '/oracle/X01/sapdata1/sr3_3/sr3.data3' -s  5140
brspace -c force -f dfalter -a resize -f '/oracle/X01/sapdata1/sr3_4/sr3.data4' -s  5060
brspace -c force -f dfalter -a resize -f '/oracle/X01/sapdata1/sr3_5/sr3.data5' -s  5000
brspace -c force -f dfalter -a resize -f '/oracle/X01/sapdata1/sr3_6/sr3.data6' -s  7740
brspace -c force -f dfalter -a resize -f '/oracle/X01/sapdata1/sr3_7/sr3.data7' -s  7053

Die hier ausgegebenen Werte werden in GB angegeben.

Ältere Beiträge «