Posts

Es werden Posts vom 2018 angezeigt.

OBIEE 12 - Tabs und Subpages zu Dashboard hinzufügen

Bild
nach Dashboard bearbeiten findet sich ein Icon zum Hinzufügen von Dashboard-Seiten und (neu) Unterseiten: Quelle und mehr Details: https://performancearchitects.com/new-obiee-12c-feature-dashboard-subpages/

ODI-Prozesse per Webservice z.B. von APEX aus starten

Ziel Bei Nutzung des ODI ist es hilfreich, ODI-LoadPlans etc. aus einer Anwendung heraus starten zu können. Mit APEX und ODI-Webservices (WS) ist das ganz einfach. Techn. Voraussetzungen - ODI Im ODI muss der entsprechende Webservice eingerichtet und URL, User und PWD des WS bekannt sein. Techn. Umsetzung - APEX   In APEX selbst erfolgt der eigentliche Aufruf über eine PL-Procedure: #OWNER#.ODI_RUN.LP_DAM18_LOADER(P_PARTITION_KEY => :P3_PARTITION_KEY); Techn. Umsetzung - PL - Bau des WS-Envelope In dieser Proc wird zu einen der Aufruf des Webservices erstellt: Webservice-Call: -- *** WS-Call bauen *** -- Anfang (Kopf/Head)   c_req_head :=             '<?xml version = ''1.0'' encoding = ''UTF-8''?>' ;   c_req_head := c_req_head|| '<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.w3.org/2005/08/addressing" xmlns:ns2="xmlns.oracle.com/od

Create Table-Script (inkl. DROP und Abfangen des ORA-942)

Blueprint für Create Table-Script (inkl. DROP und Abfangen des ORA-942) BEGIN    EXECUTE IMMEDIATE 'DROP TABLE myTab'; EXCEPTION    WHEN OTHERS    THEN       IF SQLCODE = -942       THEN          NULL;       ELSE          RAISE;       END IF; END; / CREATE TABLE myTab (     P_KEY         NUMBER NOT NULL,     myTab_KEY     NUMBER NOT NULL,     myTab2_KEY    NUMBER NOT NULL,     myNr          NUMBER (1),     myStr         VARCHAR2 (100 CHAR),     CONSTRAINT myTab_PK PRIMARY KEY (P_KEY, myTab_KEY) USING INDEX LOCAL,     CONSTRAINT myTab_UK PRIMARY KEY (P_KEY, myNr) USING INDEX LOCAL,     CONSTRAINT myTab_FK1 FOREIGN KEY (P_KEY, myTab2_KEY)         REFERENCES myTab2 (P_KEY, myTab2_KEY) ) TABLESPACE TS_MYDATA LOGGING PARTITION BY LIST (P_KEY)(PARTITION P_0 VALUES (0) LOGGING COMPRESS BASIC TABLESPACE TS_MYDATA) COMPRESS BASIC MONITORING;

SQL Plan Execution / DBMS_XPLAN / SQL Monitor

Zur Analyse von Ausführungsplänen gibt es verschiedenste Möglichkeiten. Gerade bei langlaufenden Statements kann es hilfreich sein zu sehen, was in welcher Reihenfolge ausgeführt wird. Hint:  GATHER_PLAN_STATISTICS -> zum Sammeln von Laufzeitinformationen bei der Ausführung Um nur den Plan zu sehen: set linesize 250 pagesize 0 trims on tab off long 1000000 explain plan for INSERT /*+ APPEND PARALLEL GATHER_PLAN_STATISTICS */        INTO myTab_Ziel (                 C1,                 C2,                 C3 )     SELECT /*+ PARALLEL */            'A',            2,            sysdate       FROM myTab_Quelle      WHERE (1 = 1); SELECT * FROM table(DBMS_XPLAN.DISPLAY (FORMAT=>'ALLSTATS LAST ALL +OUTLINE')); Um  aktuelle Session  zu sehen: set linesize 250 pagesize 0 trims on tab off long 1000000 SELECT * FROM table(DBMS_XPLAN.DISPLAY_CURSOR(             SQL_ID=>'dx1zj8p29p27t',              CURSOR_CHILD_NO=>1,             

Parallel DML in 12c => /*+ parallel enable_parallel_dml */

Eine sehr gute Erklärung zum PARALLEL Insert ab 12.1.0.2 findet sind hier: Quelle:  https://blog.dbi-services.com/parallel-dml-in-12c/ aus dem Post: ----------------------------------------------------------------------------------------------- | Id  | Operation                | Name      | Starts | E- Rows | A- Rows |   A- Time    | Buffers | ----------------------------------------------------------------------------------------------- |   0 | INSERT STATEMENT         |          |      1 |        |      0 |00:00:17.40 |   24311 | |   1 |  LOAD TABLE CONVENTIONAL | DEMO2    |      1 |        |      0 |00:00:17.40 |   24311 | |   2 |   PX COORDINATOR         |          |      1 |        |   1000K|00:00:04.49 |       5 | |   3 |    PX SEND QC (RANDOM)   | :TQ10000 |      0 |   1000K|      0 |00:00:00.01 |       0 | |   4 |     PX BLOCK ITERATOR    |          |      0 |   1000K|      0 |00:00:00.01 |       0 | |*  5 |      TABLE ACCESS FULL    | DEMO1    |   

Zufallszahlen und -text generieren - DBMS_RANDOM

Um für Testzwecke etc. "zufällige" Zahlen / Strings zu erzeugen, gibt es in Oracle die Funktion dbms_random . In Verbindung mit connect by kann so sehr einfach eine beliebige Menge an Zeilen mit Zufallswerten erzeugt werden: SELECT dbms_random.value(1,1000) Z       , dbms_random.string('a',20) Txt   FROM DUAL CONNECT BY level < 101; * DBMS_RANDOM.VALUE(low, high)   + low -> untere Grenze   + high -> obere Grenze * DBMS_RANDOM.STRING(opt, len)   + opt -> Definiert, was für ein String erzeugt wird   + len -> Länge des String   + Details zu opt: 'u', 'U' - returning string in uppercase alpha characters 'l', 'L' - returning string in lowercase alpha characters 'a', 'A

ALTER TABLE MODIFY COLUMN - Datentypänderung bei großen Tabellen mit virtueller Spalte

Typänderungen bei großen Tabellen können ein Problem sein. Wenn alter table modify column nicht geht oder zu lange dauert (aus diversen Gründen), kann eine (von mehreren) Alternativen sein, mit virtuellen Spalten zu arbeiten. Bsp. Helden der Datenmodellierung haben die Spalte Postleitzahl als number(5) definiert. (logisch, ist ja eine Zahl; blöd nur dass ganz Sachsen führende 0er in der PLZ haben) alter table modify column würde aus 1187 aber auch kein 01187 für Dresden machen. Dazu bräuchte es noch ein Update, was ggfs. richtig aufwändig wird. Alternative mit virtueller Spalte: A) Umbenennen der bestehenden Spalte: ALTER TABLE tbl RENAME COLUMN ANSCHRIFT_PLZ TO ANSCHRIFT_ PLZ_N ; B) Neue, virtuelle Spalte anlegen: ALTER TABLE tbl ADD ANSCHRIFT_PLZ VARCHAR2(5 char) GENERATED ALWAYS AS (LPAD(ANSCHRIFT_PLZ_N,5,'0')) VIRTUAL Fall es Probleme beim umbenennen der bestehenden Spalte gibt, ggfs hier nachschauen: https://frankschmidt.blogspot.com/2018/10/hidden-columns

Hidden Columns "entdecken" - ORA-54032

Ab Oracle 12(?) kann es passieren, dass über die "extended statistics" unsichtbare Spalten angelegt werden. Um zu prüfen, ob es hidden columns gibt, für die entsprechende Tabelle dieses SQL abfragen: select table_name, column_name, data_default, hidden_column  from   user_tab_cols where  hidden_column = 'YES' order  by table_name; Bei Spaltenänderungen, die zu einem ORA-54032 führen, prüfen, ob und welche hidden columns angelegt wurden. Durch exec dbms_stats.drop_extended_stats(user, 'TBL', '(a, b)'); werden alle entsprechenden Spalten gelöscht und die Spalte kann geändert werden. Beachten: user_tabl_cols liefert: ("a","b") drop_extended_stats benötigt: '(a,b)' Man beachte die verschiedenen Hochkomma...

APEX - Download vorgegebenes Format

In APEX gibt es eine Reihe bereits mitgelieferter Download-Möglichkeiten: - im Classic-Report - im Interactiv Report Manchmal reichen diese allerdings nicht aus. Z.B. wenn die Darstellung in APEX und der Download abweichen, oder die Download-Performance ein Problem ist. Auf Basis der Vorlage SCOTT SPENDOLINI (URL  https://spendolini.blogspot.de/2006/04/custom-export-to-csv.html ) schaut meine Lösung wie folgt aus: Auf der eigentlichen Seite einen Button (Region Button) erstellen, mit einem Redirect zu einer neuen, leeren, eigens für den Download angelegten Seite verweist. Auf dieser Download-Seite (diese bekommen bei mir immer eine Seiten-Nummer höher als die Button-Seite) wird im BEFORE HEADER ein Process vom Typ PL/SQL angelegt. Dieser Process übernimmt den eigentlichen Download. Aufbau des PL-Blocks: declare   v_quartal number; begin -- Set the MIME type owa_util.mime_header('text/csv', false, 'ISO-8859-1'); --Dateinamen flexibilisieren SEL

HYBRID TSM/HWMB in Explain plan

Ab 12c stellt Oracle im Plan mehr Infos zum internen Space-Management bereit. -------------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | TQ |IN-OUT| PQ Distrib | -------------------------------------------------------------------------------------------- | 0 | INSERT STATEMENT | | 39 | | | | | 1 | PX COORDINATOR | | | | | | | 2 | PX SEND QC (RANDOM) | :TQ10000 | 39 | Q1,00 | P->S | QC (RAND) | | 3 | LOAD AS SELECT (HYBRID TSM/HWMB)| T1 | | Q1,00 | PCWP | | | 4 | OPTIMIZER STATISTICS GATHERING | | 39 | Q1,00 | PCWP | | | 5 | PX BLOCK ITERATOR | | 39 | Q1,00 | PCWC | | | 6 | TABLE ACCESS FULL | T | 39 | Q1,00 | PCWP