Betrifft SQL*Plus und Copy Autor Peter Jensch Art der Info Technische Background Info (Mai 2005) Quelle Aus unserer Schulungs- und Beratungstätigkeit Einleitung Wie oft hatte man bereits die folgende Aufgabenstellung? Kopieren einer Tabelle ohne viel Aufwand, einfache Syntax und wenn möglich sollten keine größere Schwierigkeiten erwartet werden. Mit einfachsten Hilfsmitteln eine Tabelle reorganisieren oder Testdaten einzelner Tabellen aus dem Produktiv-System ins Test-System oder Entwicklungs-System kopieren. Zudem eine beliebte Fragestellung in unseren Oracle-Kursen. Für die unterschiedlichen Vorgaben und Voraussetzungen stehen die verschiedensten Tools und Funktionen zur Verfügung. Allerdings muß an dieser Stelle bemerkt werden: Es eignet sich nicht jedes Tool für die unterschiedlichsten Vorgaben! - Export / Import ALTER TABLE <table-name> move Oracle-Package dbms_redefinition CTAS (Create Table As Select) Kostspielige Tools Die einfachste Lösung Gesucht wird eine einfache Möglichkeit eine Tabelle incl. Inhalt zu kopieren. Zusätzlich soll der Kopiervorgang über Datenbanken hinweg funktionieren! Mit dem Oracle-Tool SQL*Plus steht ein einfacher COPY-Befehl zur Verfügung. Der COPY Befehl ist kein SQLBefehl, d.h. die Funktion steht lediglich im Oracle-Tool SQL*Plus zur Verfügung. Mit der Syntax-Beschreibung der Online-Hilfe erhält man einen Überblick über die Funktionalität und die Möglichkeiten: SQL*Plus starten, den connect durchführen und mit „help copy“ die Online-Hilfe aktivieren: SQL> help copy COPY ---- COPY copies data from a query to a table in a local or remote database. COPY {FROM database | TO database | FROM database TO database} {APPEND|CREATE|INSERT|REPLACE} destination_table [(column, column, column, ...)] USING query where database has the following syntax: username[/password]@connect_identifier Für den Kopiervorgang über Datenbanken hinweg ist lediglich der Connect über SQL*Net notwendig. Ggf. die Definition der Datenbank in der TNSNAMES.ORA ergänzen und schon geht’s los: SQL> copy from scott/tiger@db10g – > to scott/tiger@db92 – > replace emp_copy using – > select * from emp; Array fetch/bind size is 15. (arraysize is 15) Will commit when done. (copycommit is 0) Maximum long size is 80. (long is 80) Table EMP_COPY dropped. Table EMP_COPY created. 14 rows selected from scott@db10g. 14 rows inserted into EMP_COPY. 14 rows committed into EMP_COPY at scott@db92. Der Bindestrich am Ende einer Zeile definiert lediglich die Zeilenfortsetzung eines SQL*Plus Befehls. Natürlich läßt sich der Befehl in eine Zeile schreiben. Für einen schnellen und einfachen Daten- bzw. Wissens-Transfer, oder zu anderen Themen finden Sie Informationen auf der Trivadis Webseite oder besuchen Sie einen unserer Kurse ☺. Peter Jensch Trivadis GmbH Peter Jensch Max – Lang – Str. 59 70771 Leinfelden - Echterdingen Internet: http://www.trivadis.com Mail: [email protected] Tel: +49 +711 90 36 32 30 Fax: +49 +711 90 36 32 59