-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com -- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. -------------------------------------------------------------------------------- -- -- Name: init.sql -- Purpose: Initializes sqlplus variables for 156 character terminal width and other settings. -- -- Author: Tanel Poder -- Copyright: (c) http://www.tanelpoder.com -- -- Other: You need to comment out the right variable definitions for your client platform below. -- Assumes SQLPATH variable set to point to TPT script directory. -- -------------------------------------------------------------------------------- -- this must be here to avoid logon problems when SQLPATH env variable is unset def SQLPATH="" -- set SQLPATH variable to either Unix or Windows format def SQLPATH=$SQLPATH -- (Unix/Mac OSX) --def SQLPATH=%SQLPATH% -- (Windows) -- def _start=start -- Windows -- def _start=xdg-open -- Unix/Linux def _start=open -- MacOS def _delete="rm -f" -- Unix/MacOSX -- def _delete="del" -- Windows def _tpt_tempdir=&SQLPATH/tmp -- some internal variables required for TPT scripts define _ti_sequence=0 define _tptmode=normal define _xt_seq=0 define all='"select /*+ no_merge */ sid from v$session"' define prev="(select /*+ no_unnest */ prev_sql_id from v$session where sid = (select sid from v$mystat where rownum=1))" -- geeky shorcuts for producing date ranges for various ASH scripts define min="sysdate-1/24/60 sysdate" define 1min="sysdate-1/24/60 sysdate" define minute="sysdate-1/24/60 sysdate" define 5min="sysdate-1/24/12 sysdate" define hour="sysdate-1/24 sysdate" define 1hour="sysdate-1/24 sysdate" define 2hours="sysdate-1/12 sysdate" define 24hours="sysdate-1 sysdate" define day="sysdate-1 sysdate" define today="TRUNC(sysdate) sysdate" -- you should change linesize to match terminal width - 1 only -- if you don't have a terminal with horizontal scrolling -- capability (cmd.exe and Terminator terminal do have horizontal scrolling) set linesize 999 -- set truncate after linesize on -- set truncate on -- set pagesize larger to avoid repeting headings set pagesize 5000 -- fetch 1000000 bytes of long datatypes. good for -- querying DBA_VIEWS and DBA_TRIGGERS set long 1000000 set longchunksize 1000000 -- larger arraysize for faster fetching of data -- note that arraysize can affect outcome of experiments -- like buffer gets for select statements etc. -- -- setting from 500 to 100 as otherwise snapper/dbms_output starts getting ORA-6502 errors due to 32k fetch limit of dbms_output set arraysize 100 -- normally I keep this commented out, otherwise -- a DBMS_OUTPUT.GET_LINES call is made after all -- PL/SQL executions from sqlplus. this may distort -- execution statistics for experiments --set serveroutput on size unlimited -- to have less garbage on screen set verify off -- to trim trailing spaces from spool files set trimspool on -- to trim trailing spaces from screen output set trimout on -- don't use tabs instead of spaces for "wide blanks" -- this can mess up the vertical column locations in output set tab off -- this makes describe command better to read and more -- informative in case of complex datatypes in columns set describe depth 1 linenum on indent on -- you can make sqlplus run any command as your editor -- I could use "start notepad" on windows if you want to -- return control back to sqlplus immediately after launching -- notepad (so that you can continue typing in sqlplus define _editor="vi -c 'set notitle'" -- define _external_editor="/Applications/Terminator.app/Contents/MacOS/Terminator vi " -- assign the tracefile name to trc variable def trc=unknown column tracefile noprint new_value trc -- its nice to have termout off here as otherwise this would be -- displayed on the screen set termout off select value ||'/'||(select instance_name from v$instance) ||'_ora_'|| (select spid||case when traceid is not null then '_'||traceid else null end from v$process where addr = (select paddr from v$session where sid = (select sid from v$mystat where rownum = 1 ) ) ) || '.trc' tracefile from v$parameter where name = 'user_dump_dest'; column tracefile print -- make default date format nicer alter session set nls_date_format = 'YYYY-MM-DD HH24:MI:SS'; -- include username and connect identifier in prompt -- column pr new_value _pr -- select initcap('&_user@&_connect_identifier> ') pr from dual; -- set sqlprompt "&_pr" -- column _pr clear -- format some more columns for common DBA queries col first_change# for 99999999999999999 col next_change# for 999999999999999999999 col checkpoint_change# for 99999999999999999 col resetlogs_change# for 99999999999999999 col plan_plus_exp for a100 col value_col_plus_show_param ON HEADING 'VALUE' FORMAT a100 col name_col_plus_show_param ON HEADING 'PARAMETER_NAME' FORMAT a60 -- oracle 12.2+ has too wide OWNER and OBJECT_NAME... col owner for a30 wrap col object_name for a30 wrap col subobject_name for a30 wrap col segment_name for a30 wrap col partition_name for a30 wrap -- set html format @@htmlset nowrap "&_user@&_connect_identifier report" -- set seminar logging file DEF _tpt_tempfile=sqlplus_tmpfile col seminar_logfile new_value seminar_logfile col tpt_tempfile new_value _tpt_tempfile select to_char(sysdate, 'YYYYMMDD-HH24MISS') seminar_logfile , instance_name||'-'||to_char(sysdate, 'YYYYMMDD-HH24MISS') tpt_tempfile from v$instance; def seminar_logfile=&SQLPATH/logs/&_tpt_tempfile..log -- spool sqlplus output spool &seminar_logfile append set editfile afiedit.sql -- set up a default ref cursor for Snapper V4 begin/end snapshotting -- var snapper refcursor -- reset termout back to normal set termout on