こんにちは、ねこです。

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

OCP#6/働いてないのに、クビになったぁー!

2020-05-20 05:35:48 | プログラム 勉強

。。。ほんとです。

バックグラウンド・チェックまでして、勉強はじめて、で、くびになりました。。。

結構大きな日本のIT会社だったんです。

アメリカに本社があって、そこで働くようになってたんですが、日本の本社のコロナ不景気に対する経費削減が理由だそうです。

だから、クビってわけじゃないんですが、保留ですな。

でも、この人事のアメリカ人がちょっと腹立った。

「始める前でよかったじゃない。。。」だって。

あんた、この間にわたし一つ仕事断ってるがな!

Oracleなんかきらいや!!!

ってなことで、すまん。

これでこのブログのシリーズはおしまいです。

 

ねこよ、がんばれーっ!

コロナで職を失った方々、お気持ちお察しいたします。

どうか、頑張ってください。

もしかしたら、今は新しいアイデアも実現できる時期にあるのかもしれません。

 


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')
);

 

次回は


OCP#3/Managing Users, Roles and Privilegesのビデオを見てみた。

2020-05-01 02:34:47 | プログラム 勉強

#USER

#直接PRIVILEGE

#ROLE

#ROLEを介してのPRIVILEGE

#PROFILE

#PASSWORD認証

#TABLESPACE

#QUOTAでTABLESPACEのサイズを決定

 

【Userを作ろう】

権限を与えるのに2つの方法があります。『Directly』と『Role』です。そして『Role』を使うのが『RBAC(Role Bases Access Control)』

CREATE USER Beerneko
IDENTIFIED BY ねこねこぱすわーど
PASSWORD EXPIRE;

【Privilege-権限】

Users cannot connect until they have been granted the 'CREATE SESSION' privilege.ユーザーは、「CREATE SESSION」権限が付与されるまで接続できません。

GRANT CREATE SESSION TO Beerneko ->これで、セッションをつかってDBにアクセスすることができます。

*そしてぇっ!この『PASSWORD EXPIRE』のお陰でパスワードを新しく作ってもらうことができます。

 

sqlplus
Enter user-name: Beerneko
Enter password: yourpassword
ERROR: 

Systemでまずははいらなきゃ。

Enter user-name:system
Enter password:yoursystempassword
Last Successful login time:jFri Apr 9909999099:99:99:99 -99:99

Connected to:
.......

SQL> grant create sessio to Beerneko

セッションの権限をあたえてやらなきゃ。

Grant successded.

SQL>quit


sqlplus
Enter user-name: Beerneko
Enter password: yourpassword
ERROR:
....The password has expired

ここで新しいパスワードをいれてやる。

Changing password for Beerneko
New jpassword:
Retype new password:
Password chenge

....
Connected to:
....

といった具合です。

 

【Userに権限を与えよう】

RBAC!!!さっきやったよね。

一つ以上のROLEを与えることができるよ。

その前に、権限はユーザに与えられるものでなくって、「ROLE」に与えられるもの。その「ROLE」を与えられたユーザが「ROLE」に従って権限を持つことになるのさ。

 

GRANT CREATE SESSION TO Beerneko;

GRANT SELECT ANY TABLE TO Beerneko;

GRANT CREATE SESSION, SELECT ANY TABLE TO Beerneko;

とこんな感じです。

<object>テーブルごととか、コラムごととか、もっと細かく定義したい場合です。</object>

GRANT SELECT ON EMPO.EMPLOYEES TO Beerneko;

GRANT UPDATE (SALARY) ON EMP.EMPLOYEES TO Beerneko;

Views are generally regarded as a preferred method over individual column permissions.ビューは一般に、個々の列の権限よりも優先される方法と見なされています。

 

【Userに権限を与えよう➔もっと細かくね。】

A ROLE is a bundle of privileges that can be granted or revoked from a user as a single unit ROLEは、単一のユニットとしてユーザーから付与または取り消すことができる特権のバンドルです。

A key part of ROLE Based Access Control.

ROLES are not schema object but do share a namespace with users

If you already have a role with a name, you can't create a user with that same name. Creating a role is very straightforward. You use the create role DDL statement and simply supply the name of the role that you want to create that follows all the standard naming conventions and rules of the Oracle database.
But having done that, really what you want to do is assign privileges to that role. And that assignment is done in the exact same way that you assign privileges to users. It's the same statement. You just simply replace the user name with the role name.同じ名前のロールがすでにある場合、同じ名前のユーザーを作成することはできません。 ロールの作成は非常に簡単です。 create role DDLステートメントを使用して、Oracleデータベースのすべての標準の命名規則と規則に従う、作成するロールの名前を指定します。
しかし、それを実行したら、実際に実行したいことは、そのロールに特権を割り当てることです。 そして、その割り当ては、ユーザーに特権を割り当てるのとまったく同じ方法で行われます。 同じことです。 ユーザー名をロール名に置き換えるだけです。

CREATE ROLE sales_dept:

Once created, privileges can be assigned to roles similarly to users.

GRANT ALL ON customers TO sales_dept;

そのほかにも、前回やったようにいろんなROLEがあります。ここに列挙しときます。

GRANT SELECT ON orders To sales_dept;
GRANT INSERT ON fulfilled TO sales_dept;
GRANT ALL ON monthly TO sales_dept;
GRANT SELECT ON commissions TO sales_dept;
GRANT CREATE SESSION TO sales_dept;

そしてっ!それをユーザに与えます。

GRANT sales_dept TO Beerneko;

 

ROLEにたいして、ROLEを権限として与えてやれる。

CREATE ROLE sales_mgr;

GRANT sales_dept TO sales_mgr;ここでROLEどうしがネストしてます。
GRANT ALL ON orders, ALL ON fulfilled,
ALL ON monthly, ALL ON commissions To sales_mgr;

GRANT sales_mgr TO Beerneko;

これでBeernekoはsales_deptのROLEと他にもいっぱい権限をもらっちゃいました。

REVOKE sales_dept FROM Beerneko;

前からあったsales_deptのROLEをとってきれいにしておきます。

ところがっ!Beernekoはまだ管理職試験に合格してません。なので「Inactive」の状態で試験に合格して初めてログインするときまでそのままでね。

Roles can be set to be 'Inactive' upon loginログイン時にロールを「非アクティブ」に設定できます

ALTER USER Beerneko DEFAULT ROLE sales_dept;

Sales_dept is now active, but sales_mgr is inactive.sales_deptがアクティブになりましたが、sales_mgrは非アクティブです。

SET ROLE sales_mgr;

CREATE ROLE sales_mgr IDENTIFIED BY ;

 

いかんっ!こんなに時間かけてやってたら日が暮れる!!!

 

【Profile+Passwordパスワードとプロファイル】

DBA_PROFILESに詳細あり。

プロファイルを作りましょう。

おうっ!ROLEとにてるけど、ちがうぞ!

ではまずはユーザ作ったらプロファイルも作りましょう。

CREATE PROFILE two_wrong LIMIT(リミットを付けます。)
failed_login_attempts 2 (二回ログインに失敗したら)
password_lock_time 7;(7日間ログインできません。)
ALTER USER Beerneko PROFILE two_wrong;

*アカウントがロックされた場合

SELECT account_status FROM dba_users WHERE username = 'Beerneko';
ACCOUNT_STATUS
-----------------------------------------------
LOCKED(TIMED)
SQL>drop profile two_wrong cascade: ←『cascade』が必要な理由は、そもそもユーザーがすでにアサインされているからです。
これでBeernekoのプロファイルはデフォルトにもどりました。

【Authentication認証】

<デフォルト認証>

CREATE USER Beerneko IDENTIFIED BY yourpassword;

Encrypted at REST and In-Transit with AESRESTで暗号化され、AESで転送中

<外部認証>

LDAP、OS Security、Password File(For SYSDBAこれはデフォルトでOracleにある)

<認証方法>

SSL, Kerberos or RADIUS, ADIUS, Centralized Directory Service

<例:Active Directory (LDAP)>

CREATE USER Beerneko 
IDENTIFIED GLOBALLY AS ' CN=Beerneko, OU=division1,O=example, C=US';

 

【TablespacesとQUOTA】

これでユーザーごとの使えるサイズが決まります。

ALTER USER Beerneko QUOTA 10M ON Beernekotablespace

*ディフォルトではQUOTAがアンリミットです!気を付けて!

sqlplus
Enter user-name:system
Enter Password: yourpassword
......
SQL>SELECT PROPERTY_VALUE FROM DATABASE_PROPERTIES WHERE
PROPERTY_NAME = 'DEFAULT_PERMANENT_TABLESPACE';
PROPERTY_VALUE
----------------------------------------------------------------------
----------------------------------------------------------------------
----------------------------------------------------------------------
----------------------------------------------------------------------
----------------------------------------------------------------------
----------------------------------------------------
USERS

SQL>SELECT DEFAULT_TABLESPACE, TEMPORARY_TABLESPACE FROM dba_users WHERE username = 'Beerneko'

DEFAULT_TABLESPACE                   TEMPORARY_TABLESPACE
----------------------------------   ----------------------------------
Users                                                  TEMP


SQL>ALTER USER Beerneko QUOTA 100M ON USERS; SQL>SELECT tablespace_name, bytes, max_bytes FROM dba_ts_quotas WHERE username = 'Beerneko';

TABLESPACE_NAME   BYTES  MAX_BYTES
---------------------   --------  ------------
USERS                               0       104857600

 

では、おさらい。

#USER

#直接PRIVILEGE

#ROLE

#ROLEを介してのPRIVILEGE

#PROFILE

#PASSWORD認証

#TABLESPACE

#QUOTAでTABLESPACEのサイズを決定

今日はこんだけ勉強した。

タイプするだけでじかんかかるぅ~ぅ。

 

明日は、こちら。

『Moving Data』https://www.cbtnuggets.com/learn/it-training/oracle-database-12c-r2-moving-data-1z0-072