0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

DMS用のOracleを構築したときのメモ

0
Posted at

背景・目的

以前、Oracleデータベースの構築やStatspackを試しました。今回はDMS用の環境を構築します

実践

下記を元に試します。

本記事は検証・学習目的です
本番環境では強力なパスワード、アクセス制限、最新Oracleバージョンを使用してください

事前準備

  1. NWと、EC2、S3を用意します
  2. S3には、Oracleのインストーラーを用意しておきます

Oracleインストール

Swapの作成

1.rootユーザになります

sh-4.2$ sudo su -
#

2.スワップファイル作成(2GB)を作成します

# dd if=/dev/zero of=/swapfile bs=1M count=2048 # 2GBの空ファイル作成

2048+0 records in
2048+0 records out
2147483648 bytes (2.1 GB) copied, 6.08701 s, 353 MB/s
# chmod 600 /swapfile # パーミッション設定(セキュリティ)
# mkswap /swapfile # スワップ領域としてフォーマット
Setting up swapspace version 1, size = 2 GiB (2147479552 bytes)
no label, UUID=XXXX-XXX-XXX-XXX-XXXX

# swapon /swapfile # スワップを有効化(今すぐ使える状態に)
#
#

3.確認します

# echo '/swapfile none swap sw 0 0' >> /etc/fstab
# free -h
              total        used        free      shared  buff/cache   available
Mem:           7.7G        145M        145M        432K        7.4G        7.2G
Swap:          2.0G          0B        2.0G
#

EC2にログイン

  1. EC2にSSMで接続します
  2. Oracleユーザにスイッチします
sh-4.2$ whoami
ssm-user
sh-4.2$ id oracle
uid=XXXXX(oracle) gid=XXXX(oinstall) groups=XXXXX(oinstall),XXXXX(dba)
sh-4.2$
sh-4.2$ sudo su - oracle
$

Oracleのダウンロード

  1. 環境変数をセットします
$ export ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1
$ export ORACLE_SID=ORCL
$ export PATH=$ORACLE_HOME/bin:$PATH

2.事前にアップしていたOracleソフトウェアをS3からダウンロードします

$ aws s3 cp s3://XXXXX/linux.x64_11gR2_database_1of2.zip .
download: s3://XXXXX/linux.x64_11gR2_database_1of2.zip to ./linux.x64_11gR2_database_1of2.zip
$ aws s3 cp s3://XXXXX/linux.x64_11gR2_database_2of2.zip .
download: s3://XXXXX/linux.x64_11gR2_database_2of2.zip to ./linux.x64_11gR2_database_2of2.zip
$ ls
linux.x64_11gR2_database_1of2.zip  linux.x64_11gR2_database_2of2.zip  README.txt
$ ls -l
total 2295596
-rw-r--r-- 1 oracle oinstall 1239269270 Jan 14 08:25 linux.x64_11gR2_database_1of2.zip
-rw-r--r-- 1 oracle oinstall 1111416131 Jan 14 08:26 linux.x64_11gR2_database_2of2.zip
-rw-r--r-- 1 oracle oinstall        654 Feb 16 15:20 README.txt
$

3.解凍します

unzip linux.x64_11gR2_database_1of2.zip
unzip linux.x64_11gR2_database_2of2.zip

インストール

Oracleユーザで作業します

1.レスポンスファイルを作成します

$ cat > /home/oracle/db_install.rsp <<'EOF'
> oracle.install.responseFileVersion=/oracle/install/rspfmt_dbinstall_response_schema_v11_2_0
> oracle.install.option=INSTALL_DB_SWONLY
> ORACLE_HOSTNAME=localhost
> UNIX_GROUP_NAME=oinstall
> INVENTORY_LOCATION=/u01/app/oraInventory
> SELECTED_LANGUAGES=en,ja
> ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1
> ORACLE_BASE=/u01/app/oracle
> oracle.install.db.InstallEdition=SE
> oracle.install.db.DBA_GROUP=dba
> oracle.install.db.OPER_GROUP=dba
> DECLINE_SECURITY_UPDATES=true
> EOF
$ ls -l /home/oracle/db_install.rsp
-rw-r--r-- 1 oracle oinstall 460 Feb 16 15:31 /home/oracle/db_install.rsp
$

2.インストールします(10分から15分程度かかります)

$ ./runInstaller -silent -responseFile /home/oracle/db_install.rsp -ignorePrereq
Starting Oracle Universal Installer...

Checking Temp space: must be greater than 120 MB.   Actual 93788 MB    Passed
Checking swap space: must be greater than 150 MB.   Actual 2047 MB    Passed
Preparing to launch Oracle Universal Installer from /tmp/OraInstall2026-02-16_03-39-18PM. Please wait ...[oracle@ip-XXXXXX database]$ You can find the log of this install session at:
 /u01/app/oraInventory/logs/installActions2026-02-16_03-39-18PM.log
 

3.しばらくすると、Successfullyが表示されます

The following configuration scripts need to be executed as the "root" user.
 #!/bin/sh
 #Root scripts to run

/u01/app/oraInventory/orainstRoot.sh
/u01/app/oracle/product/11.2.0/dbhome_1/root.sh
To execute the configuration scripts:
         1. Open a terminal window
         2. Log in as "root"
         3. Run the scripts
         4. Return to this window and hit "Enter" key to continue

Successfully Setup Software.

スクリプトの実行

別のターミナルを開き、rootユーザで作業します

1.スクリプトを実行します

# /u01/app/oraInventory/orainstRoot.sh
Changing permissions of /u01/app/oraInventory.
Adding read,write permissions for group.
Removing read,write,execute permissions for world.

Changing groupname of /u01/app/oraInventory to oinstall.
The execution of the script is complete.
# /u01/app/oracle/product/11.2.0/dbhome_1/root.sh
Check /u01/app/oracle/product/11.2.0/dbhome_1/install/root_ip-XXXXXX.ap-northeast-1.compute.internal_2026-02-16_15-44-35.log for the output of root script
#

データベースの作成

上記の作業が完了したら、Oracleユーザのターミナルに戻り作業します

1.Enterを押します

To execute the configuration scripts:
         1. Open a terminal window
         2. Log in as "root"
         3. Run the scripts
         4. Return to this window and hit "Enter" key to continue

Successfully Setup Software.

$

2.環境変数を.bash_profileに追加

cat >> ~/.bash_profile <<'EOF'
export ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1
export ORACLE_SID=ORCL
export PATH=$ORACLE_HOME/bin:$PATH
EOF

source ~/.bash_profile

3.データベース作成用レスポンスファイル作成します

$ cat > /home/oracle/dbca.rsp <<'EOF'
> [GENERAL]
> RESPONSEFILE_VERSION = "11.2.0"
> OPERATION_TYPE = "createDatabase"
>
> [CREATEDATABASE]
> GDBNAME = "ORCL"
> SID = "ORCL"
> TEMPLATENAME = "General_Purpose.dbc"
> SYSPASSWORD = "XXXXX"
> SYSTEMPASSWORD = "XXXXX"
> SYSMANPASSWORD = "XXXXX"
> DBSNMPPASSWORD = "XXXXX"
> DATAFILEDESTINATION = "/u01/app/oracle/oradata"
> RECOVERYAREADESTINATION = "/u01/app/oracle/flash_recovery_area"
> STORAGETYPE = FS
> CHARACTERSET = "AL32UTF8"
> NATIONALCHARACTERSET = "AL16UTF16"
> MEMORYPERCENTAGE = "40"
> TOTALMEMORY = "2048"
> EOF
$

4.データベースを作成します(10-15分かかります)

$ dbca -silent -responseFile /home/oracle/dbca.rsp

5.しばらくすると、進み始めます

$ dbca -silent -responseFile /home/oracle/dbca.rsp
Copying database files
1% complete
3% complete

6.完了しました

$ dbca -silent -responseFile /home/oracle/dbca.rsp
Copying database files
1% complete
3% complete
37% complete
Creating and starting Oracle instance
40% complete
45% complete
50% complete
55% complete
56% complete
60% complete
62% complete
Completing Database Creation
66% complete
70% complete
73% complete
85% complete
96% complete
100% complete
Look at the log file "/u01/app/oracle/cfgtoollogs/dbca/ORCL/ORCL.log" for further details.
$

DMS用の設定

現状確認

1.データベースに接続します

$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on Mon Feb 16 15:53:33 2026

Copyright (c) 1982, 2009, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Release 11.2.0.1.0 - 64bit Production

SQL>

2.接続確認します

SQL> SELECT status FROM v$instance;

STATUS
------------
OPEN

SQL> SELECT name FROM v$database;

NAME
---------
ORCL

SQL>

3.アーカイブログモードを確認します

SQL> SELECT log_mode FROM v$database;

LOG_MODE
------------
NOARCHIVELOG

SQL>

アーカイブログモードを有効化

1.データベースをシャットダウンします

SQL> SHUTDOWN IMMEDIATE;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL>

2.マウントモードで起動します

SQL> STARTUP MOUNT;
ORACLE instance started.

Total System Global Area 2137886720 bytes
Fixed Size                  2215064 bytes
Variable Size            1224737640 bytes
Database Buffers          905969664 bytes
Redo Buffers                4964352 bytes
Database mounted.
SQL>

3.アーカイブログモードを有効化します

SQL> ALTER DATABASE ARCHIVELOG;

Database altered.

SQL>

4.データベースをオープンします

SQL> ALTER DATABASE OPEN;

Database altered.

SQL>

5.確認します。ARCHIVELOGになりました

SQL> SELECT log_mode FROM v$database;

LOG_MODE
------------
ARCHIVELOG

SQL>

サプリメンタルロギングの設定

データベースレベルの設定

sysユーザで作業します

1.データベースレベルのサプリメンタルロギングを有効化します

SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;

Database altered.

SQL>

SQL> SELECT supplemental_log_data_min FROM v$database;

SUPPLEME
--------
YES

SQL>

データベース単位の設定

1.最初に確認します

SQL> SELECT supplemental_log_data_min, supplemental_log_data_pk
FROM v$database;  2

SUPPLEME SUP
-------- ---
YES      NO

SQL>

2.プライマリキーロギングを有効化します

SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;

Database altered.

SQL>

3.確認します

SQL> SELECT supplemental_log_data_min, supplemental_log_data_pk
FROM v$database;  2

SUPPLEME SUP
-------- ---
YES      YES

SQL>

テーブル単位の設定

1.テーブル単位で設定


DMSユーザの作成と設定

systemユーザで作業します

1.DMSユーザーを作成します

SQL> CREATE USER dmsuser IDENTIFIED BY "XXXX"
DEFAULT TABLESPACE users
TEMPORARY TABLESPACE temp;  2    3

User created.

SQL> exit

2.基本的な権限を付与します

SQL> GRANT CREATE SESSION TO dmsuser;
GRANT SELECT ANY TABLE TO dmsuser;
GRANT SELECT_CATALOG_ROLE TO dmsuser;
Grant succeeded.

SQL>
Grant succeeded.

SQL>

Grant succeeded.

SQL>

3.LogMiner権限を付与します

V$ビューへの権限付与にはSYSDBA権限が必要なため、sysで実行

sysで作業します

SQL> GRANT EXECUTE ON DBMS_LOGMNR TO dmsuser;
GRANT SELECT ON V_$LOGMNR_LOGS TO dmsuser;
GRANT SELECT ON V_$LOGMNR_CONTENTS TO dmsuser;
Grant succeeded.

SQL>
Grant succeeded.

SQL>

Grant succeeded.

SQL>```

4.システムビュー権限を付与します
:::note info
sysで作業します
:::
```sql
SQL> GRANT SELECT ON V_$ARCHIVED_LOG TO dmsuser;
GRANT SELECT ON V_$LOG TO dmsuser;
GRANT SELECT ON V_$LOGFILE TO dmsuser;
GRANT SELECT ON V_$DATABASE TO dmsuser;
GRANT SELECT ON V_$THREAD TO dmsuser;
GRANT SELECT ON V_$PARAMETER TO dmsuser;
GRANT SELECT ON V_$NLS_PARAMETERS TO dmsuser;
GRANT SELECT ON V_$TIMEZONE_NAMES TO dmsuser;
GRANT SELECT ON V_$TRANSACTION TO dmsuser;
GRANT SELECT ON V_$DATABASE_INCARNATION TO dmsuser;
Grant succeeded.

SQL>
Grant succeeded.

SQL>
Grant succeeded.

SQL>
Grant succeeded.

SQL>
Grant succeeded.

SQL>
Grant succeeded.

SQL>
Grant succeeded.

SQL>
Grant succeeded.

SQL>
Grant succeeded.

SQL>

Grant succeeded.

SQL>

5.メタデータビュー権限を付与します

sysで作業します

SQL> GRANT SELECT ON ALL_INDEXES TO dmsuser;
GRANT SELECT ON ALL_OBJECTS TO dmsuser;
GRANT SELECT ON ALL_TABLES TO dmsuser;
GRANT SELECT ON ALL_USERS TO dmsuser;
GRANT SELECT ON ALL_CATALOG TO dmsuser;
GRANT SELECT ON ALL_CONSTRAINTS TO dmsuser;
GRANT SELECT ON ALL_CONS_COLUMNS TO dmsuser;
GRANT SELECT ON ALL_TAB_COLS TO dmsuser;
GRANT SELECT ON ALL_IND_COLUMNS TO dmsuser;
GRANT SELECT ON ALL_LOG_GROUPS TO dmsuser;
GRANT SELECT ON ALL_TAB_PARTITIONS TO dmsuser;
GRANT SELECT ON SYS.DBA_REGISTRY TO dmsuser;
GRANT SELECT ON SYS.OBJ$ TO dmsuser;
GRANT SELECT ON DBA_TABLESPACES TO dmsuser;
GRANT SELECT ON DBA_OBJECTS TO dmsuser;
Grant succeeded.

SQL>
Grant succeeded.

SQL>
Grant succeeded.

SQL>
Grant succeeded.

SQL>
Grant succeeded.

SQL>
Grant succeeded.

SQL>
Grant succeeded.

SQL>
Grant succeeded.

SQL>
Grant succeeded.

SQL>
Grant succeeded.

SQL>
Grant succeeded.

SQL>
Grant succeeded.

SQL>
Grant succeeded.

SQL>
Grant succeeded.

SQL>

Grant succeeded.

SQL>
SQL>
SQL>
SQL>

6.確認します

systemで作業します

SQL> SELECT username, account_status FROM dba_users WHERE username = 'DMSUSER';

USERNAME                       ACCOUNT_STATUS
------------------------------ --------------------------------
DMSUSER                        OPEN

SQL>

7.設定数を確認します

  • システム権限: 2個
  • テーブル/ビュー権限: 39個
SQL> SELECT COUNT(*) as sys_privs FROM dba_sys_privs WHERE grantee = 'DMSUSER';

 SYS_PRIVS
----------
         2

SQL> SELECT COUNT(*) as tab_privs FROM dba_tab_privs WHERE grantee = 'DMSUSER';

 TAB_PRIVS
----------
        39

SQL>

8.設定を確認します

  • アーカイブログモード: ARCHIVELOG
  • サプリメンタルロギング(最小): YES
  • サプリメンタルロギング(PK): YES
SQL> SELECT
  'Archive Mode' as setting,
  log_mode as value
FROM v$database
UNION ALL
SELECT
  'Supplemental Logging (MIN)',
  supplemental_log_data_min
FROM v$database
UNION ALL
SELECT
  'Supplemental Logging (PK)',
  supplemental_log_data_pk
FROM v$database;  2    3    4    5    6    7    8    9   10   11   12   13   14

SETTING                    VALUE
-------------------------- ------------
Archive Mode               ARCHIVELOG
Supplemental Logging (MIN) YES
Supplemental Logging (PK)  YES

SQL>

セキュリティグループ設定

EC2のインバウンドルール:

  • ポート1521をDMSのSGからのみ許可
  • 0.0.0.0/0は許可しない

リスナー起動

  1. リスナーを確認します
$ lsnrctl start

LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 16-FEB-2026 16:26:18

Copyright (c) 1991, 2009, Oracle.  All rights reserved.

TNS-01106: Listener using listener name LISTENER has already been started
$ lsnrctl status

LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 16-FEB-2026 16:26:26

Copyright (c) 1991, 2009, Oracle.  All rights reserved.

Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 11.2.0.1.0 - Production
Start Date                16-FEB-2026 16:13:10
Uptime                    0 days 0 hr. 13 min. 15 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Log File         /u01/app/oracle/product/11.2.0/dbhome_1/log/diag/tnslsnr/ip-XXXXX/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=ip-XXXXXXX.ap-northeast-1.compute.internal)(PORT=1521)))
Services Summary...
Service "ORCL" has 1 instance(s).
  Instance "ORCL", status READY, has 1 handler(s) for this service...
Service "ORCLXDB" has 1 instance(s).
  Instance "ORCL", status READY, has 1 handler(s) for this service...
The command completed successfully
$

DMSでレプリケーションテスト用のテーブルとデータの準備

  1. ユーザ作成します
CREATE USER testapp IDENTIFIED BY "XXXXX"
DEFAULT TABLESPACE users
TEMPORARY TABLESPACE temp;

User created.

2.権限を付与します

SQL> GRANT CONNECT, RESOURCE TO testapp;
GRANT UNLIMITED TABLESPACE TO testapp;
Grant succeeded.

SQL>

Grant succeeded.

SQL>
SQL> SELECT username FROM dba_users WHERE username = 'TESTAPP';

USERNAME
------------------------------
TESTAPP

SQL>

3.テストテーブルを作成します

SQL> CREATE TABLE testapp.customers (
  customer_id NUMBER PRIMARY KEY,
  customer_name VARCHAR2(100) NOT NULL,
  email VARCHAR2(100),
  created_date DATE DEFAULT SYSDATE
);

CREATE TABLE testapp.orders (
  order_id NUMBER PRIMARY KEY,
  customer_id NUMBER NOT NULL,
  order_date DATE DEFAULT SYSDATE,
  amount NUMBER(10,2),
  status VARCHAR2(20),
  CONSTRAINT fk_customer FOREIGN KEY (customer_id) REFERENCES testapp.customers(customer_id)
);  2    3    4    5    6
Table created.

SQL> SQL>   2    3    4    5    6    7    8

Table created.

SQL>
SQL>
SQL>

4.テストデータを投入します

SQL> INSERT INTO testapp.customers VALUES (1, 'Tanaka Taro', 'tanaka@example.com', SYSDATE);
INSERT INTO testapp.customers VALUES (2, 'Suzuki Hanako', 'suzuki@example.com', SYSDATE);
INSERT INTO testapp.customers VALUES (3, 'Sato Ichiro', 'sato@example.com', SYSDATE);
1 row created.

SQL>
1 row created.

SQL>

1 row created.

SQL>
SQL>
SQL>
SQL> INSERT INTO testapp.orders VALUES (101, 1, SYSDATE, 15000, 'COMPLETED');
INSERT INTO testapp.orders VALUES (102, 1, SYSDATE, 8500, 'PENDING');
INSERT INTO testapp.orders VALUES (103, 2, SYSDATE, 25000, 'COMPLETED');
INSERT INTO testapp.orders VALUES (104, 3, SYSDATE, 12000, 'SHIPPED');
1 row created.

SQL>
1 row created.

SQL>
1 row created.

SQL>

1 row created.

SQL>
SQL>

SQL> COMMIT;

Commit complete.

SQL>

5.確認します

SQL> SELECT COUNT(*) FROM testapp.customers;
SELECT COUNT(*) FROM testapp.orders;
SELECT * FROM testapp.customers;
SELECT * FROM testapp.orders;
  COUNT(*)
----------
         3

SQL>
  COUNT(*)
----------
         4

SQL>
CUSTOMER_ID
-----------
CUSTOMER_NAME
--------------------------------------------------------------------------------
EMAIL
--------------------------------------------------------------------------------
CREATED_D
---------
          1
Tanaka Taro
tanaka@example.com
16-FEB-26


CUSTOMER_ID
-----------
CUSTOMER_NAME
--------------------------------------------------------------------------------
EMAIL
--------------------------------------------------------------------------------
CREATED_D
---------
          2
Suzuki Hanako
suzuki@example.com
16-FEB-26


CUSTOMER_ID
-----------
CUSTOMER_NAME
--------------------------------------------------------------------------------
EMAIL
--------------------------------------------------------------------------------
CREATED_D
---------
          3
Sato Ichiro
sato@example.com
16-FEB-26


SQL>

  ORDER_ID CUSTOMER_ID ORDER_DAT     AMOUNT STATUS
---------- ----------- --------- ---------- --------------------
       101           1 16-FEB-26      15000 COMPLETED
       102           1 16-FEB-26       8500 PENDING
       103           2 16-FEB-26      25000 COMPLETED
       104           3 16-FEB-26      12000 SHIPPED

SQL>

考察

次回は、DMSと接続を試します。

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?