goo blog サービス終了のお知らせ 

こんにちは、ねこです。

自称プログラマのおばちゃんのブログです。いろいろあるよねぇ~。

OCP#5/Configuring Oracle Net Servicesのビデオを見てみた。

2020-05-16 21:41:30 | プログラム 勉強

【Net Services】

OracleNETとは、Broker Communication Toolsが入っているサーバーとクライアントの中間コミュニケーション・ツールの総称。

必要なものは以下

1.クライアントとサーバーのどちらにもインストールされていること

2.ネットワークがること

3.インターネットがあること

4.(クラウドの開発環境)

何をマネジメントするのか

Communication

Scalability(バンドワイズなど)

Security

Performance(Scalabilityも関係してきますね)

主なツールの種類

1.Location Transparency / Service Repository ➡ これでディレクトリをつくってDNSサーバーのようにアクセスさせることができる。

2.LDAP ➡ 属性(個人名や部署名)で構成するエントリ(関連属性のまとまり)の検索、追加、削除の操作が可能になるので、一か所にデータを保存して、セントラル・マネジメントが可能になる。

3.Firewall Access Control ➡ フィルタリング可能なため、ユーザーのアクセス管理ができる。

 

【Listnerってなに?どう使うの?】サーバサイド

クライアントとサーバーのコミュニケーションのためには、まず実際にクライアントからの要求をきいてやる仕組みを設定しなくちゃなりません。そのためのListner Utility(lsnrctl Utility)です。

設定の仕方

場所:$ORACLE_HOME/network/admin/listner.ora

設定関係:テキストベースでHOSTとPORT、NET MANAGERと一緒に設定できる

Listner =
  ( DESCRIPTION_LIST =
    ( DESCRIPTION =
      ( ADDRESS = ( PROTOCOL = TCP ) ( HOST = localhost ) (POSRT = 1522 ))
      ( ADDRESS = ( PROTOCOL = TCP ) ( KEY = EXTPROC1522 ))
    )
  )

テストの仕方:

Easy コネクトを使ってみましょう。

sqlplus
disconnect
connect system/pa33w0rd//localhost:1522/orcl2 ➡ ユーザー/パスワード//ホスト名:ポートナンバー/DB名
これでオッケー

設定変更

他のポート(8025)でも使えるようにしましょう。

Listner =
  ( DESCRIPTION_LIST =
    ( DESCRIPTION =
      ( ADDRESS = ( PROTOCOL = TCP ) ( HOST = localhost ) (POSRT = 1522 ))
      ( ADDRESS = ( PROTOCOL = TCP ) ( HOST = localhost ) (POSRT = 8025 ))
      ( ADDRESS = ( PROTOCOL = TCP ) ( KEY = EXTPROC1522 ))
    )
  )

 

テストの仕方:

またEasy コネクトを使ってみましょう。

sqlplus
disconnect
connect system/pa33w0rd//localhost:1522/orcl2 ➡ ユーザー/パスワード//ホスト名:ポートナンバー/DB名
これでオッケーじゃないっ!

Listenerを再起動させなきゃならんばい。

 

Listener再起動:

1.コマンドラインから

lsnrctl stop listener
lsnrctl start listener

2.WindowsのサービスマネージャーからTNSListenerを再起動

3.直接マシーンを強制的に再スタートさせる

 

【Registrationってなに?どう使うの?】サーバサイド

Registrationってのは、Listenerの前に「このネットワークをつかうんだよー」ってネットワークを登録してやるこどですね。なので、これをしなければ、Listenerもクライアントからの情報はうけれません。

Registrationする2つの方法

Static - SIDs

LISTSTATIC = ↩ これリスナー
  ( DESCRIPTION_LIST =
    ( DESCRIPTION =
      ( ADDRESS = ( PROTOCOL = TCP ) ( HOST = localhost ) (POSRT = 1522 ))
      ( ADDRESS = ( PROTOCOL = TCP ) ( HOST = localhost ) (POSRT = 8025 )) ↩ これ、ポート増やしただけ。リスナー増やしたわけじゃない。
      ( ADDRESS = ( PROTOCOL = TCP ) ( KEY = EXTPROC1522 ))
    )
  )

上のリスナーを登録するためのRegistration

SID_LIST_LISTSTATIC = ↩ これRegistration ➡ listの名前が最後に来ます。(ほんまかいな。。。)
  ( SID_LIST =
    ( SID_DESC =
      ( SID_NAME = SIDStatic) ➡ どのリスナーが登録されるのか
      ( ORACLE_HOME = C:\app\benfi\virtual\product\12.2.0\dbhome_2 ➡ ホームディレクトリ、どこに実際のファイルがあるか
    )
  ) 
そのほかにもPROGRAMやENVISなどある。

Dynamic - PMON

LISTDYNAMIC = ↩ これリスナー
  ( DESCRIPTION_LIST =
    ( DESCRIPTION =
      ( ADDRESS = ( PROTOCOL = TCP ) ( HOST = localhost ) (POSRT = 2156))
    )
  )

上のリスナーを登録するためのRegistration

sqlplus

alter system set local_listeners=`(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=2156))` scope=both;  ➡ バッククォート
system altered.

disconnect
lsnrctl start LISTDYNAMIC
connect system/pa33w0rd//localhost:2156/orcl2 ➡ ユーザー/パスワード//ホスト名:ポートナンバー/DB名
connected

*そして新しいリスナーを登録すると、当たり前だのクラッカー🎉に、古いリスナーの登録はなくなる。お、この登録とはRegistrationのことです。

 

【Local Namingってなに?どうつかうの?】クライアントサイド

正直言って、まだよーわかりません。。。

とにかく、クライアントサイドにネットワークの主導権を持たせるわけにいかんので、代わりに名前を付けてやってTNSNAMES.oraで名前を管理してやるということです。なので便利だけど、これがなくともデータベースにつながります。

TNSNAMESの種類:

$ORACLE_HOME/network/admin/tnsnames.ora ➡ Windows

$TNS_ADMIN/tnsnames.ora ➡ Windows

$HOME/.tnsnames.ora ➡ Linux

 

設定の仕方:

ORCL2=   ( DISCRIPTION =
    ADDRESS = ( PROTOROL=TCP)(HOST=localhost ) ( PORT=0152 )
       ( CONNECT_DATA =
       ( SERVER = DEDICATED )
      (SERVICE_NAME = orcl2)
    )
  )

もし新しくサービスをくわえるならこのまま上をコピペして名前を変える

MYNEWSERVICE=   ( DISCRIPTION =
    ADDRESS = ( PROTOROL=TCP)(HOST=localhost ) ( PORT=0152 )
       ( CONNECT_DATA =
       ( SERVER = DEDICATED )
      (SERVICE_NAME = orcl2)
    )
  )

 

コネクションの仕方:

sqlplus
connect system/pa33w0rd@MYNEWSERVICE
connected

Dynamic Registration

1.リスナーを書く
LISTENER_ORCL2=
(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))

2.レジスターする
alter system set local_listener='LISTENER_ORCL2' scope=both;

 

【さて、接続をテストしましょ】

1.Loopo Back Test 

NET MANAGERからテストします。

2.tnsping Utility

cmdからtnsping.exeを走らせます。

tnsping mydb 8 ➡ 8回、mydbデータベースへコネクションテストします。

 


OCP#4/Moving Dataのビデオを見てみた。

2020-05-16 02:15:55 | プログラム 勉強

ほんま、すんませんでした。

初日までぎりぎり自由を楽しもうと何もしてませんでしたが、本日、金曜日あと初出勤まで10日と迫り、やっと我に返りました。にゃごなご。

  • Using External Tables
  • Using Oracle Data Pump
  • Using SQL*Loader

【ETL Tool(ETLに使用するツール)】

1.ETLとは、Extract, Transform, Load のBulk Formatデータです。大量のデータをやり取りすることですな。

2.Data Pumpは、Oracle<->Oracleのやり取り。ややこしい設定なしで、ネットワークでやり取りできたりするので、ステージングのディスクが必要ないこともある。

3.SQL Loaderは、Oracle<->何か他のデータウェア(SQL Serverなど)コントロールファイルが必要で、データストラクチャーなどの詳細をそこに書いておく。次に使いまわしがきく分良い。

 

【Date Pump】

主に、『Conventional』と『Direct』、そして『External Table』のメソッドがある。

『Conventional』➡Insertステートメントで書いている。これも、まぁ、プログラミングで書くとすれば、融通が利いて悪くもない。

『Direct』➡直接的にファイルを移植してしまう方法。

『External Table』➡暫定的に外にテーブルを作ってデータ移植を行う方法。

Pumpはバイナリを使います。そしてOracle的にはSQLLoaderよりも早いです。

 

使い方
SQLPlusにPLSQLで書く方法
expdp(Export)とimpdp(Import)コマンド
DBMS_DATAPUMP/DBMS_METADATA

パフォーマンスに関して Master processes ⇔ Worker Processes これらがパラレルでやってくれる。限度は最低でも『1プロセス』がはしっていること。 Master Processesの部分にはMaster Tableを使う。
これが捨てられるときは、以下の3状況
1.プロセスが成功した場合。(KEEP_MASTER=YESをのぞく)
2.KILL_JOBされた場合
3.JOBが走る前にJOBをストップした場合

進行状況を見る
V$SESSION_LONGOPSをつかう。

SELET OPONAM, TARGER_DESC, SOFAR,
TOTALWORK, MESSAGE
FROM V$SESSION_LONGOPS

 

【Data Pumpをつかいましょう】

Export and Importコマンド

cmd ....\bin
expdp dumpfile=target.dmp table=target_table
user:system
password:
-----------
impdp dumpfile=target.dmp table_exists_action=append  
➡新しいのでたーっ! スキーマやテーブルがすでにdmpファイルに入ってて、外部を選択する必要がないからこちらを使いましょう。 既にあるテーブルに対して以下の3つをしてくれます。
table_exists_action=append (追記)
table_exists_action=trancate (データ消してインサートする)
table_exists_action=replace(一度ドロップして跡かたなくして改めて書いてくれる)

 

【SQL*Loader】

いろんなデータのやり取りができる。たとえば。。。SQLserverなど
なぜなら、テキストベースだから。なので、Pumpとは違いバイナリじゃないからもちろん遅い。設定はコントロールファイルを作って行う。何度も使えるから便利。

後で説明するけど、設定すれば以下のファイルが付いてくるし、必要なものもある。
1.データファイル(CVS、TARなどなど。)
2.Control File
3.Bad File(設定漏れなどで移行できなかったデータが書かれる)
4.Discard File(設定であえて必要とされてなくって、捨てられたデータが書かれる)
5.LogFile

ConventionalとDirect Path
Pumpだと勝手によいものを選んでくれるけど、SQLLoaderは自分で選ぶ。

 

【SQl*Loaderを使いましょう】

コントロールファイルに書きましょう(場所c:\data\loader.ctl)
load data
infile 'c:\data\data.csv'
into table targetdata
fields terminated by ","
(id, name, address, college, company)

では走らせましょう
sqlldr userid=system control=c:\data\loader.ctl
password:

と、ベースはこれだけ。

では、設定をします。

同じテーブルにAPPEND(データ追加)する場合(場所c:\data\append.ctl)
load data
infile 'c:\data\data.csv'
append
into table targetdata
fields terminated by ","
(id, name, address, college, company)

条件を与える場合(場所c:\data\when.ctl)
load data
infile 'c:\data\data.csv'
into table targetdata
when college='NYU'
fields terminated by ","
(id, name, address, college, company)

c:\data\when.ctlを走らせて、その条件ではじかれたデータを見る場合
sqlldr userid=system control=c:\data\when.ctl discard=c:\data\discard.txt
ログファイルでも見れます。

 

【External Table】

まぁ、これは実際に移行されたものではないです。データベースのテーブルにのっとって、テキストベースのCSVファイルなんかをOracleのシステムで見せてくれるというか。Read-Only!

必要なのは、「Directry」と「Table」だけ。

External Tableを使いましょう
まずはSQLPlusを開きます。

CREATE DIRECTRY external_dir AS 'C:\data';
Directry created

CREATE TABLE targetOracleTable (
ID CHAR(10),
NAME CHAR(40),
ADDRESS CHAR(40),
COLLEGE CHAR(25)
)

ORGANIZATION EXTERNAL (
DEFAULT DIRECTORY external_dir
LOCATION ('targetCSVTxt.csv')
);

 

次回は