Pages

Thursday, May 4, 2017

Create new user from scratch, including Datafiles, Tablespace, Permissions, etc.

--Create IX and TB tablespaces
CREATE TABLESPACE MY_USER_TBS_TB_01
DATAFILE '/oracle_db/db1/db_orainst/MY_USER_TBS_TB_01.dbf' SIZE 10M
AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL AUTOALLOCATE;

CREATE TABLESPACE MY_USER_TBS_IX_01
DATAFILE '/oracle_db/db1/db_orainst/MY_USER_TBS_IX_01.dbf' SIZE 10M
AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL AUTOALLOCATE;

--Create User
CREATE USER MY_USER IDENTIFIED BY MY_USER;
ALTER USER MY_USER DEFAULT TABLESPACE MY_USER_TBS_TB_01;

or

CREATE USER MY_USER IDENTIFIED BY MY_USER DEFULT TABLESPACE MY_USER_TBS_TB_01 PROFILE USERS_PROFILE;

--Grant quota to create object on Tablespace
ALTER USER MY_USER QUOTA 1000M ON MY_USER_TBS_TB_01;
or
GRANT UNLIMITED TABLESPACE TO MY_USER_TBS_TB_01;

--Grant Roles
GRANT CONNECT, RESOURCE to USER;

--Create DBA Permission User
CREATE USER DBA_ADMIN IDENTIFIED BY DBA_ADMIN;
GRANT CONNECT, RESOURCE to DBA_ADMIN;
GRANT DBA TO DBA_ADMIN;

--Create Regular User
CREATE USER MY_USER IDENTIFIED BY MY_PASS;
GRANT CONNECT, RESOURCE to MY_USER;
GRANT SELECT ANY DICTIONARY TO MY_USER;
GRANT CREATE PUBLIC SYNONYM TO MY_USER;
GRANT DROP PUBLIC SYNONYM TO MY_USER;


--Script to create user
spool cre_user.log append

SET FEEDBACK OFF
SET VERIFY OFF

PROMPT  ************************************************************
PROMPT   Creating the Schema User...
PROMPT  ************************************************************
PROMPT

conn &&adminuser/&&adminpass@&&connectstr
--Drop User if exist
BEGIN
   EXECUTE IMMEDIATE 'DROP USER &&new_user CASCADE';
EXCEPTION
   WHEN OTHERS THEN NULL;
END;
/

--Create user
CREATE USER &&new_user IDENTIFIED BY &&vippass 
DEFAULT TABLESPACE IGT_TABLE 
PROFILE DEFAULT 
ACCOUNT UNLOCK;

GRANT CONNECT, RESOURCE TO &&new_user;
GRANT CREATE PROCEDURE, EXECUTE ANY PROCEDURE TO &&new_user;
GRANT CREATE SNAPSHOT, CREATE TRIGGER, CREATE ANY INDEX TO &&new_user;
GRANT CREATE SYNONYM TO &&new_user;
GRANT UNLIMITED TABLESPACE TO &&new_user;
GRANT QUERY REWRITE TO &&new_user;
GRANT CREATE ANY DIRECTORY TO &&new_user;
GRANT EXECUTE ON DBMS_LOCK TO &&new_user;
GRANT SELECT_CATALOG_ROLE TO &&new_user;

spool off



Create Profile

GRANT EXECUTE ON ora12c_strong_verify_function TO VIPCREATOR;
GRANT EXECUTE ON ora12c_strong_verify_function TO SHDAEMON;


CREATE PROFILE APP_PROF LIMIT
         COMPOSITE_LIMIT UNLIMITED
         SESSIONS_PER_USER UNLIMITED
         CPU_PER_SESSION UNLIMITED
         CPU_PER_CALL UNLIMITED
         LOGICAL_READS_PER_SESSION UNLIMITED
         LOGICAL_READS_PER_CALL UNLIMITED
         IDLE_TIME UNLIMITED
         CONNECT_TIME UNLIMITED
         PRIVATE_SGA UNLIMITED
         FAILED_LOGIN_ATTEMPTS UNLIMITED
         PASSWORD_LIFE_TIME UNLIMITED
         PASSWORD_REUSE_TIME UNLIMITED
         PASSWORD_REUSE_MAX UNLIMITED
         PASSWORD_VERIFY_FUNCTION NULL
         PASSWORD_LOCK_TIME UNLIMITED
         PASSWORD_GRACE_TIME UNLIMITED
         INACTIVE_ACCOUNT_TIME UNLIMITED;

ALTER PROFILE APP_PROF 
LIMIT PASSWORD_VERIFY_FUNCTION ora12c_stig_verify_function;

CREATE USER &&vipuser
IDENTIFIED BY &&vippass
DEFAULT TABLESPACE IGT_TABLE
PROFILE APP_PROF ACCOUNT UNLOCK;

ALTER USER 
&&vipuser PROFILE APP_PROF;

See current profiles and their resources:

SELECT DISTINCT owner, name 
 FROM DBA_SOURCE 
WHERE type = 'FUNCTION' 
  AND name LIKE 'ORA12C_STIG_VERIFY_FUNCTION%';

SELECT profile, resource_name, limit

  FROM DBA_PROFILES 
 WHERE profile = 'APP_PROF';

PROFILE        RESOURCE_NAME                  LIMIT
-------------- ------------------------------ ------------------------------
APP_PROF       COMPOSITE_LIMIT                UNLIMITED
APP_PROF       SESSIONS_PER_USER              UNLIMITED
APP_PROF       CPU_PER_SESSION                UNLIMITED
APP_PROF       CPU_PER_CALL                   UNLIMITED
APP_PROF       LOGICAL_READS_PER_SESSION      UNLIMITED
APP_PROF       LOGICAL_READS_PER_CALL         UNLIMITED
APP_PROF       IDLE_TIME                      UNLIMITED
APP_PROF       CONNECT_TIME                   UNLIMITED
APP_PROF       PRIVATE_SGA                    UNLIMITED
APP_PROF       FAILED_LOGIN_ATTEMPTS          UNLIMITED
APP_PROF       PASSWORD_LIFE_TIME             UNLIMITED
APP_PROF       PASSWORD_REUSE_TIME            UNLIMITED
APP_PROF       PASSWORD_REUSE_MAX             UNLIMITED
APP_PROF       PASSWORD_VERIFY_FUNCTION       ORA12C_STIG_VERIFY_FUNCTION
APP_PROF       PASSWORD_LOCK_TIME             UNLIMITED
APP_PROF       PASSWORD_GRACE_TIME            UNLIMITED
APP_PROF       INACTIVE_ACCOUNT_TIME          UNLIMITED





--Using Substitution Variable
SET FEEDBACK OFF 
SET VERIFY OFF

DEFINE vipuser = 'SH_DBA';
DEFINE vippass = 'SH_DBA';

--Create user
CREATE USER &&vipuser IDENTIFIED BY &&vippass DEFAULT TABLESPACE IGT_TABLE PROFILE DEFAULT ACCOUNT UNLOCK;
--CREATE USER &&vipuser IDENTIFIED BY &&vippass DEFAULT TABLESPACE IGT_TABLE PROFILE APP_PROF ACCOUNT UNLOCK;
GRANT CREATE PROCEDURE, EXECUTE ANY PROCEDURE, CONNECT, CREATE SNAPSHOT, CREATE TRIGGER, CREATE ANY INDEX TO &&VIPUSER;
GRANT CREATE SYNONYM TO &&VIPUSER;
GRANT UNLIMITED TABLESPACE TO &&VIPUSER;
GRANT QUERY REWRITE TO &&VIPUSER ;
GRANT CREATE ANY DIRECTORY TO &&VIPUSER;
GRANT EXECUTE ON DBMS_LOCK TO &&VIPUSER;
GRANT SELECT_CATALOG_ROLE TO &&VIPUSER;
GRANT CHANGE NOTIFICATION TO &&VIPUSER';

GRANT DBA TO &&VIPUSER;



ORA12C_STIG_VERIFY_FUNCTION:

Tuesday, April 25, 2017

bash example. expdp and scp of generated dmp file

==================================
General
==================================
Example of running oracle expdp, amd scp of generated dmp file to another server.

#!/bin/bash
. /etc/profile
. /etc/sh/orash/oracle_login.sh orainst
HOST='100.100.100.30'
USER='my_user'
PASSWD='my_pass'

cd /starhome/my_user/workarea/

expdp db_user/db_pass@orainst PARFILE=exp_sparx.prm
if [ $? -ne 0 ]
then
/usr/local/etc/starhome/bin/send_snmp.sh Critical "Export dump of MLT_VODAF_SPARX failed exiting" 987989 ;
exit;
fi

expdp db_user/db_pass@orainst PARFILE=exp_metadata.prm
if [ $? -ne 0 ] 
then
/usr/local/etc/starhome/bin/send_snmp.sh Critical "Export Meta data dump of MLT_VODAF_SPARX failed exiting" 987989;
exit;
fi

sudo /software/oracle/oracle/scripts/change_dmp_permissions.sh
#chmod a+r,a+w /starhome/my_user/workarea/ora_exp/dmp_a_exp.dmp
#chmod a+r,a+w /starhome/my_user/workarea/ora_exp/dmp_b_exp.dmp


scp my_user@10.100.100.58:/starhome/my_user/workarea/ora_exp/dmp_a_exp.dmp my_user@100.100.100.30:/starhome/my_user/workarea/ora_exp/
if [ $? -ne 0 ]
then
/usr/local/etc/starhome/bin/send_snmp.sh Critical "Export dump file mlt_vod_sparx_exp_metadata.dmp transfer failed exiting" 987989;
exit;
fi

scp my_user@10.100.100.58:/starhome/my_user/workarea/ora_exp/dmp_b_exp.dmp my_user@100.100.100.30:/starhome/my_user/workarea/ora_exp/
if [ $? -ne 0 ]
then
/usr/local/etc/starhome/bin/send_snmp.sh Critical "Export dump file mlt_vod_sparx_exp_data.dmp transfer failed exiting" 987989;
exit;


==================================
scp
==================================
Example scp
scp my_file remote_user@remote_server:/remote_dir

Sunday, March 26, 2017

Code Example reprocess_one_file_main.bat: batch calling sqlplus, perl, bash and scp.

===============================
General
===============================
There is a following flow:
main batch is calling several other batch files.
One of the batch files is calling perl program
One of the batch files is calling sqlplus 

===============================
List of files
===============================
reprocess_one_file_main.bat - This is the main bat, calling all others.

convert_one_file.bat
send_scp_mach_one.bat => send_scp_mach.sh
send_file_list.bat               => send_file_list.sh
append_to_file_list.bat    => append_to_file_list.pl
run_sqlplus.bat                  => update_status_in_db.sql

----------------------------------------------
reprocess_one_file_main.bat
----------------------------------------------
ECHO OFF
ECHO.

SET HOME_DIR=D:\ROOT_PATH
SET HOME_DIR_LINUX=d:/ROOT_PATH
REM =======================================================
REM Populate these parameters before running the script!!!
SET FILE_NAME=some_file
SET SEND_FILE_NAME_LIST=%HOME_DIR_LINUX%/sent_file_list/file_list.test
REM =======================================================

ECHO "====================================="
ECHO "Start reprocess_one_file_main.bat"
ECHO "====================================="
ECHO.

ECHO CALL convert_one_file.bat %HOME_DIR% %HOME_DIR_LINUX% %FILE_NAME%
CALL convert_one_file.bat %HOME_DIR% %HOME_DIR_LINUX% %FILE_NAME%

ECHO CALL send_scp_mach_one.bat %HOME_DIR% %HOME_DIR_LINUX% %FILE_NAME%
CALL send_scp_mach_one.bat %HOME_DIR% %HOME_DIR_LINUX% %FILE_NAME%

ECHO %HOME_DIR%\append_to_file_list.bat %HOME_DIR% %HOME_DIR_LINUX% %FILE_NAME% %SEND_FILE_NAME_LIST%
CALL %HOME_DIR%\append_to_file_list.bat %HOME_DIR% %HOME_DIR_LINUX% %FILE_NAME% %SEND_FILE_NAME_LIST%

ECHO %HOME_DIR%\send_file_list.bat
CALL %HOME_DIR%\send_file_list.bat

ECHO %HOME_DIR%\run_sqlplus.bat %FILE_NAME%
CALL %HOME_DIR%\run_sqlplus.bat %FILE_NAME%

ECHO.
ECHO "====================================="
ECHO "Finished reprocess_one_file_main.bat"
ECHO "====================================="
ECHO.

----------------------------------------------
convert_one_file.bat
----------------------------------------------
SET HOME_DIR=%1
SET HOME_DIR_LINUX=%2
SET FILE_NAME=%3

copy %HOME_DIR%\taptext_tap310_converter\processed\%FILE_NAME%.success %HOME_DIR%\taptext_tap310_converter\input\%FILE_NAME%

%HOME_DIR%\taptext_tap310_converter\run_taptext_tap310_converter_local.bat 

----------------------------------------------
send_scp_mach_one.bat
----------------------------------------------
ECHO OFF

SET HOME_DIR=%1
SET HOME_DIR_LINUX=%2
SET FILE_NAME=%3

ECHO .
ECHO "====================================="
ECHO "Start send_scp_mach_one.bat"
ECHO "====================================="
ECHO .

ECHO HOME_DIR=%HOME_DIR%
ECHO HOME_DIR_LINUX=%HOME_DIR_LINUX%

ECHO FILE_NAME=%FILE_NAME%
ECHO send_scp_mach.sh %FILE_NAME%
d:\software\cygwin\bin\bash.exe --login %HOME_DIR_LINUX%/send_scp_mach.sh %FILE_NAME%

ECHO Done
ECHO .

----------------------------------------------
send_scp_mach.sh
----------------------------------------------
scp -Bq /cygdrive/d/ROOT_PATH/taptext_tap310_converter/output/$1 remote_user@IP:/$1

----------------------------------------------
send_file_list.bat
----------------------------------------------
d:\software\cygwin\bin\bash.exe --login /cygdrive/d/MobilkomAutTaps/send_file_list.sh

----------------------------------------------
send_file_list.sh
----------------------------------------------
scp -Bq /cygdrive/d/ROOT_PATH/sent_file_list/file_list.txt remote_user@IP:/REMOTE/PATH/file_list.txt 

----------------------------------------------
append_to_file_list.bat
----------------------------------------------
ECHO OFF

SET HOME_DIR=%1
SET HOME_DIR_LINUX=%2
SET FILE_NAME=%3
SET SEND_FILE_NAME_LIST=%4

ECHO .
ECHO "====================================="
ECHO "Start append_to_file_list.bat"
ECHO "====================================="
ECHO .

ECHO HOME_DIR=%HOME_DIR%
ECHO HOME_DIR_LINUX=%HOME_DIR_LINUX%
ECHO FILE_NAME=%FILE_NAME%
ECHO SEND_FILE_NAME_LIST=%SEND_FILE_NAME_LIST%


perl append_to_file_list.pl %FILE_NAME% %SEND_FILE_NAME_LIST%

----------------------------------------------
append_to_file_list.pl
----------------------------------------------
#! /usr/bin/perl
use File::Copy;
use strict;
use warnings;

#================================
# Input Parameters Start
#================================
my $tap_file_name = shift;
my $SentFileList = shift;

#================================
# main()
#================================
open(textFile,">>".$SentFileList);
print textFile $tap_file_name.";\n";

close(textFile);

----------------------------------------------
run_sqlplus.bat
----------------------------------------------
ECHO OFF

SET FILE_NAME=%1

ECHO .
ECHO "====================================="
ECHO "Start run_sqlplus.bat"
ECHO "====================================="
ECHO .


sqlplus db_user/db_pass@db_inst@update_status_in_db.sql %FILE_NAME%

----------------------------------------------
update_status_in_db.sql
----------------------------------------------
UPDATE SOME_TABLE SET status = 3 WHERE file_name = '&1' AND status <> 3;

COMMIT; 

Wednesday, March 15, 2017

Tablespace Fast Reference

====================
Get Tablespace Usage
====================

SET LINESIZE 120
SET PAGESIZE 200
SPOOL tablespace.txt

SELECT TABLESPACE_NAME, 
 (MAX(MAX_SPACE)-MAX(USED_SPACE)  )AS DBA_FREE_SPACE_MB, 
 MAX(USED_SPACE) AS USED_SPACE_MB, 
 MAX(MAX_SPACE) AS MAX_SPACE_MB, 
 ROUND(( (MAX(MAX_SPACE)-MAX(USED_SPACE)  ) /MAX(MAX_SPACE) ) *100) as FREE_PCT, 
 CASE WHEN (ROUND(( (MAX(MAX_SPACE)-MAX(USED_SPACE)  ) /MAX(MAX_SPACE) ) *100)<15)  THEN 'Y' ELSE 'N' END AS ADD_IND
FROM ( 
SELECT tablespace_name,  
  ROUND(SUM(bytes)/1024/2014) AS FREE_SPACE, 
  0 AS MAX_SPACE, 
  0 AS USED_SPACE   
 FROM DBA_FREE_SPACE
 WHERE tablespace_name LIKE '%IGT%' OR tablespace_name LIKE '%DWH%' OR tablespace_name LIKE '%REPORTS%' OR tablespace_name = 'SYSTEM'  OR tablespace_name = 'SYSAUX' 
 GROUP BY tablespace_name  
 UNION ALL 
 SELECT tablespace_name, 
  0 AS FREE_SPACE, 
  ROUND( SUM(CASE WHEN (bytes>maxbytes)  THEN bytes ELSE maxbytes END)/1024/1024) AS MAX_SPACE, 
     0 AS USED_SPACE 
 FROM DBA_DATA_FILES
 WHERE tablespace_name LIKE '%IGT%' OR tablespace_name LIKE '%DWH%' OR tablespace_name LIKE '%REPORTS%' OR tablespace_name = 'SYSTEM' OR tablespace_name = 'SYSAUX'
 GROUP BY tablespace_name 
 UNION ALL 
 SELECT tablespace_name, 
     0 AS FREE_SPACE, 
     0 AS MAX_SPACE, 
     ROUND(SUM(bytes/1024/1024)) AS USED_SPACE 
  FROM DBA_SEGMENTS
 WHERE tablespace_name LIKE '%IGT%' OR tablespace_name LIKE '%DWH%' OR tablespace_name LIKE '%REPORTS%' OR tablespace_name = 'SYSTEM' OR tablespace_name = 'SYSAUX'
GROUP BY tablespace_name 

GROUP BY tablespace_name;
spool off


TABLESPACE_NAME     DBA_FREE_SPACE_MB USED_SPACE_MB MAX_SPACE_MB   FREE_PCT ADD_IND
------------------- ----------------- ------------- ------------ ---------- -------
DWH_INDEX                      179149         96851       276000         65 N
IGT_TABLE                      144946          5054       150000         97 N
SYSTEM                           1691           309         2000         85 N
IGT_INDEX                       89590           410        90000        100 N
DWH_TABLE                         519        101481       102000          1 Y


====================
Get Segments Usage
====================

SET LINESIZE 120
SET PAGESIZE 200
COL tablespace_name FOR A30
COL owner FOR A30
COL segment_name FOR A30
COL USED_MB FOR 9999999999999


SELECT owner, tablespace_name, segment_name, USED_MB 
   FROM ( 
  SELECT owner, tablespace_name, segment_name, ROUND(SUM(bytes)/1024/1024)AS USED_MB FROM DBA_SEGMENTS
   WHERE tablespace_name LIKE '%TABLE%' 
  GROUP BY owner, tablespace_name,segment_name 
  ORDER BY ROUND(SUM(bytes)/1024/1024) DESC 
) WHERE ROWNUM < 11;


SELECT owner, tablespace_name, segment_name, USED_MB 
   FROM ( 
  SELECT owner, tablespace_name, segment_name, ROUND(SUM(bytes)/1024/1024)AS USED_MB FROM DBA_SEGMENTS
   WHERE tablespace_name LIKE '%INDEX%' 
  GROUP BY owner, tablespace_name,segment_name 
  ORDER BY ROUND(SUM(bytes)/1024/1024) DESC 
) WHERE ROWNUM < 11;


SELECT owner, tablespace_name, segment_name, USED_MB 
   FROM ( 
  SELECT owner, tablespace_name, segment_name, ROUND(SUM(bytes)/1024/1024)AS USED_MB FROM DBA_SEGMENTS
   WHERE tablespace_name LIKE '%SYSAUX%' 
  GROUP BY owner, tablespace_name,segment_name 
  ORDER BY ROUND(SUM(bytes)/1024/1024) DESC 
) WHERE ROWNUM < 11;

SELECT owner, tablespace_name, segment_name, USED_MB 
   FROM ( 
  SELECT owner, tablespace_name, segment_name, ROUND(SUM(bytes)/1024/1024)AS USED_MB FROM DBA_SEGMENTS
   WHERE tablespace_name LIKE '%SYSTEM%' 
  GROUP BY owner, tablespace_name,segment_name 
  ORDER BY ROUND(SUM(bytes)/1024/1024) DESC 
) WHERE ROWNUM < 31;

Example of output:

OWNER                          TABLESPACE_NAME SEGMENT_NAME              USED_MB
------------------------------ --------------- ------------------------- ----------
RUS_MTSQQ_SPARX_REPORTS        DWH_TABLE       FACT_ROAMER_CAMPAIGNS          71428
RUS_MTSQQ_SPARX_REPORTS        DWH_TABLE       FACT_ROAMER_SCENARIO           12890
UKR_MTSQQ_SPARX_REPORTS        DWH_TABLE       FACT_ROAMER_CAMPAIGNS           9872
ARM_MTSQQ_SPARX_REPORTS        DWH_TABLE       FACT_ROAMER_CAMPAIGNS           2764
RUS_MTSQQ_SPARX_REPORTS        IGT_TABLE       SFI_CUSTOMER_PROFILE            2624
UKR_MTSQQ_SPARX_REPORTS        DWH_TABLE       FACT_ROAMER_SCENARIO            1880
RUS_MTSQQ_SPARX_REPORTS        IGT_TABLE       SFI_CUSTOMER_PROFILE_PK         1849
ARM_MTSQQ_SPARX_REPORTS        DWH_TABLE       FACT_ROAMER_SCENARIO             792
UKR_MTSQQ_SPARX_REPORTS        DWH_TABLE       SFI_CUSTOMER_OPTIONS             768
RUS_MTSQQ_SPARX_REPORTS        IGT_TABLE       SFI_CUSTOMER_OPTION_20131010     363

10 rows selected.

====================
Get Datafiles Usage
====================

SET LINESIZE 140
SET PAGESIZE 200
COL tablespace_name FOR A30
COL file_name FOR A60
COL Mb FOR 9999999999999
COL MAX_MB FOR 9999999999999


SELECT tablespace_name, file_name, ROUND(bytes/1024/1024) AS Mb, ROUND(maxbytes/1024/1024) AS MAX_MB
  FROM DBA_DATA_FILES
ORDER BY tablespace_name, file_name;  


TABLESPACE_NAME   FILE_NAME                                           MB     MAX_MB
----------------- -------------------------------------------- --------- ----------
DWH_INDEX         /oracle_db/db1/db_igt/ora_dwh_index_01.dbf         100       6000
DWH_TABLE         /oracle_db/db1/db_igt/ora_dwh_table_01.dbf         200      12000
GIN               /oracle_db/db1/db_igt/ora_gin_01.dbf               500       6000
GININDEX          /oracle_db/db1/db_igt/ora_ginindex_01.dbf          200       3000
IGT_INDEX         /oracle_db/db1/db_igt/ora_igt_index_01.dbf        6400       8000
IGT_TABLE         /oracle_db/db1/db_igt/ora_igt_table_01.dbf       14000      14000
SYSAUX            /oracle_db/db1/db_igt/ora_sysaux_01.dbf            950       1000
SYSTEM            /oracle_db/db1/db_igt/ora_system_01.dbf           1000       1000
UNDOTBS           /oracle_db/db1/db_igt/ora_undotbs_01.dbf          1600       2000
WORKAREA          /oracle_db/db1/db_igt/ora_workarea_01.dbf         1000       1000

====================
Get Datafiles Usage
====================
Resize Datafile
ALTER DATABASE DATAFILE '/oracle_db/db1/db_igt/ora_system_01.dbf' AUTOEXTEND ON MAXSIZE 2000M;


ALTER DATABASE DATAFILE '/oracle_db/db1/db_igt/ora_system_01.dbf' RESIZE 2000M;

Add Datafile
ALTER TABLESPACE TABLE_IGT ADD DATAFILE '/oracle_db/db1/db_igt/ora_table_02.dbf' SIZE 1000M AUTOEXTEND ON MAXSIZE 10000M;

Add Tablespace

ADD TABLESPACE TABLE_IGT_02 DATAFILE '/oracle_db/db1/db_igt/ora_table_02.dbf' SIZE 1000M AUTOEXTEND ON MAXSIZE 10000M;

vi editor

vi Reference
vi Short reference.pdf

vi Editing  commands
vi commanddescription
iinsert at the current position
Iinsert at the beginning of line
aappend just after the current cursor position
Aappend at the end of line
oOpen a new line below the current line
OOpen a new line above the current line

vi Navigation commands
vi commanddescription
0move to beginning of the current line
$move to end of line
Hmove to the top of the current window (high)
Mmove to the middle of the current window (middle)
Lmove to the bottom line of the current window (low)
1Gmove to the first line of the file
20Gmove to the 20th line of the file
Gmove to the last line of the file