Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

SQL Task G

Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 20

Student’s Name

Institution’s Name
Course and Code ID
Tutor’s Name
The Date of Submission
1. SQL commands to ALTER a table, add a column, lengthen a column,
shorten a column,
change a data type for a column from NUMBER to CHAR and then
CHAR to NUMBER.

SQL commands to ALTER a table, add a column, lengthen a column, shorten a


column, change a data type for a column from NUMBER to CHAR and then CHAR
to NUMBER.
SQL>create table STUDENT
2¿
3 FIRSTNAME VARCHAR 2(20),
4 LASTNAME VARCHAR 2 ( 20 ) ,
6AGE NUMBER (5)
5 ADDRESS VARCHAR 2(40) ,
6 ZIPCODE CHAR( 25) ,
7 constraint pk ¿ primarykey (CUSTOMERID)
Table Created

Alter Table
SQL> Alter table Student
2 Add ThirdName varchar 2(20);
Lengthen a column:
SQL> Alter table Student
2 Modify Second Name varchar 2(30) NOT NULL ;
Table altered
Shortena column :
SQL> Alter table Student
2 Modify Address varchar 2(15) NOT NULL ;
Table altered
Change data type : Char ¿ Number
SQL> Alter table Student
2 Modify Address Number (15)NOT NULL ;
Table altered
Change data type : Number ¿ Char
SQL> Alter table Student
2 Modify Age varchar 2(15) NOT NULL ;
Table altered

2.Commands to create another table like an existing one but without one
column. Then load the
data from the old to the new table. Then reestablish referential integrity. Then
drop the old table
and rename the new one.

UPDATE Student
SET new Student ID=¿ char (Student ID);

ALTERTABLE Student
DROP COLUMN Student ID ;
ALTERTABLE Student ;
RENAME COLUMN newStudentID ¿ StudentID ;

1. Another table created like the first one with the exception of the “Third Name” field.
The primary key name changed
SQL>create table STUDENT
2¿
3 FIRSTNAME VARCHAR 2(20),
4 LASTNAME VARCHAR 2 ( 20 ) ,
6AGE NUMBER (5)
5 ADDRESS VARCHAR 2(40) ,
6 ZIPCODE CHAR( 25) ,
7 constraint pk ¿ primarykey (STUDENTID )

3. Design for atest of restructuring existing objects


for points 1∧2 above .
There are several ways of loading∧copying two tables into a single database .Copy intothe new table ¿ one ta

SQL> Insert into New Student


(StudentID , FirstName , LastName , Address)
2 select StudentID , FirstName , LastName , Address ¿ Student ;

SQL> desc student

SQL> select table name from tables where name in('Student');

4. Scripts to capture static performance statistics


$ SQLCompare=$\{env:ProgramFiles(x86)\}\Red Gate\SQL Compare 12\sqlcompare.exe ¿ full path
$ MyServerInstance=' tony−sql 2016.testnet . red−gate . com' ¿ The SQL Server instance
$ MyDatabase=' BigPubs ' ¿ The name of the database
$ MyDatabasePath=¿
$($env:HOMEDRIVE)$($env:HOMEPATH)\Documents\GitHub\$MyDatabase
$ MyBuildFile=$($env:HOMEDRIVE)$($env:HOMEPATH)\Documents\GitHub\$MyDatabase\Build

if (−not (Test−Path−PathType Container $ MyBuildFile))


{
¿ we create the build directory
New−Item−ItemType Directory−Force−Path $ MyBuildFile ;
}

$ AllArgs=@ ¿
' /quiet ' , /database2:model , /include:StaticData , /scriptfile:$MyBuildFile\$MyDatabase.sql ¿
if (Test−Path $MyBuildFile\$MyDatabase.sql){Remove−item $MyBuildFile\$MyDatabase.sql }
¿ $ SQLCompare $ AllArgs
if ($ ? ){' Script generated successfully ' }
else {we had an error! (code $LASTEXITCODE) }

5. Design and Scripts for Performance testing


--Create a table for testing
create table dbo . testPerformance
¿

pk ∫ identity (1,1) primary key ,

testDate date,

testInteger ∫ ,

testVarchar varchar (10)


¿
go
insert into dbo . testPerformance values(getdate( ), round(rand ( )∗1000,0),' testString ')

truncate table dbo .testPerformance

-−The outer loop−the number of ׿ repeat thetest


declare @numberOfTests integer =5

−−The inner loop−the number of ׿ repeat the code


declare @numberOfIterations integer=100000

−−The following statement will display a message ¿ the user


select ' Starting performance test ' as MessageToUser

−−Declare the variables


declare @overallStartTime datetime=getdate ( )
declare @testStartTime datetime=getdate ()
declare @testEndTime datetime=getdate( )

declare @testElapsedTime∫ ¿ 0

declare @totalElapsedTime bigint =0


declare @averageElapsedTime float=0
declare @testRun integer=1
declare @iteration integer=1

begin transaction
−−start the outer loop
while @testRun≤@numberOfTests
begin

set @iteration=1
set @testStartTime=getdate ()

−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−¿
−−the command below is part of my test

truncate table dbo .testPerformance

−−end of code
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−¿

−−start theinner loop


while @iteration≤@numberOfIterations
begin

−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−¿
−−the command below is part of my test
insert into dbo . testPerformance values(getdate( ), round(rand ( )∗1000,0),' testString ')

−−end of code
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−¿

−−advance theinner loop counter


set @iteration=@iteration+1

−−commit after 1000 inserts ,this can be adjusted ¿ see how the performance is affected
if (@iteration % 1000=0)
begin
commit
begin transaction
end
end

set @testEndTime=getdate( )

−−get the elapsed time∈milliseconds for thetest


set @testElapsedTime =datediff (ms ,@ testStartTime , @testEndTime)

−−accumulate the total elapsed time


set @totalElapsedTime=@totalElapsedTime+ @testElapsedTime

−−display the elapsed time for the test


select ' testRun' +cast (@testRun as varchar (10))+' ,elapsed time='
+cast (@ testElapsedTime as varchar (10))+ ' ms ' as MessageToUser
−−advance the outer loopcounter
set @testRun=@testRun+1
end
commit

declare @overallEndTime datetime=getdate ()

select
@ overallStartTime as OverallStartTime ,
@ overallEndTime as OverallEndTime ,
datediff (ms , @overallStartTime ,@ overallEndTime) as OverallElapsedTime ,
@totalElapsedTime /cast (@numberOfTests as float )as AverageElapsedTime
go
6 . Scripts ¿ capture dynamic performance statistics.

col NAME format a35


col VALUE format 999,999,990

select NAME , VALUE ¿V $ SYSSTAT S


where lower (NAME )like lower ( %∧stat name % ' )
¿
set veri off
define secs=0
define value=0
col value format 99,999,999,990 new value value
col secs format a 10 new value secs noprint
col delta format 9,999,990
col deltatime format 9,990
col rate format 999,990.0
col name format a 30
select name , value , ¿char ( sysdate , ' sssss ')secs ,
( value−¿ value) delta ,
(¿ char (sysdate ,' sssss ' )−¿ secs) deltatime ,
(value−¿ value)/( ¿char (sysdate , ' sssss ' )−¿ secs)rate
¿ v $ sysstat
where name='∧¿ stat name '
¿

7. A matrix with the results of the performance testing that was done as a
DBA.
select CheckDate , cntr value as PageLifeExpectancy

¿ dbo . BlitzFirstResults PerfmonStats

where counter name=' Page life expectancy '

¿ CheckDate BETWEEN ' 2018−04−16 13 :10 :00 '∧' 2018−04−16 13 :33 :00 '
order by ID desc

select

CheckDate ,
REPLACE ¿
CONVERT (VARCHAR(100) , value¿ ),' . ' , ' , '
¿ as BatchRequestsPerSec
¿ dbo . BlitzFirstResults PerfmonStats

where counter name=' Batch Requests/sec '

¿ CheckDate BETWEEN ' 2018−04−16 13 :10 :00 '∧' 2018−04−16 13 :33 :00 '
order by ID desc
select
CheckDate , instance name , valuedelta as AverageWaitTimeMs
¿ dbo . BlitzFirstResults PerfmonStats
where counter name=' Average Wait Time(ms) '
¿ instance name≠' Total '
¿ CheckDate BETWEEN ❑2 018−04−16 13: 10 :00 ' ∧❑' 2 018−04−16 13 :33: 00'
'

select
CheckDate , value delta as AverageWaitTimeMs
¿ dbo . BlitzFirstResults PerfmonStats
where counter name=' Average Wait Time(ms) '
¿ instance name=' Total '
¿ CheckDate BETWEEN ' 2018−04−16 13 :10 :00 '∧' 2018−04−16 13 :33 :00
8. A script to create a small table with 3 rows for recovery testing.
9. Backup and recovery commands for Recovery testing using export/import
and RMAN
utilities
backup database customer db ¿

disk=' E :¿ ¿ ¿ ¿ bak '


backup log customer db ¿

disk=' E :¿ ¿ ¿ ¿ trn'
RMAN >run {
allocate channel disk 1 device type disk ;
backup database plus archivelog;
}

10. Design and backup/recovery commands for your test.

DECLARE @ endDate datetime=getdate( ),


−−last six month trends
@ months smallint=6
SELECT
[databasename ] AS DatabaseName ,
MAX ¿
+ MONTH (backup¿ ) ¿ AS YearMonth ,
CONVERT ¿
CONVERT ¿
CONVERT ¿
¿ msdb . dbo . backupset
WHERE [databasename ]=N ' MES ¿
¿ [type]=' D '∧¿
backup ¿ BETWEEN DATEADD (mm ,−@ months , @ endDate)∧@ endDate
GROUP BY [ databasename ], DATEPART (mm ,[backup¿ ])
Order by YearMonth desc

11. Include explanations for what happened during the recovery when
import vs. RMAN was
used.

Import utility is a logical backup carried out by specification of specific tables. If


consistent import is not done or related tables are not included and use CONSISTENT
and RESTRICTED mode, you may fail to recover properly. Import is used as a RMAN
supplement, to restore given tables. RMAN is used for recovery and backup, an extension
of EBU or Enterprise Backup utility. It takes consistent, physical, and full backups of the
database.

12.Flashback recovery commands.

conn /as sysdba


shutdown immediate
startup mount exclusive
alter database flashback on;
alter database open ;
conn test /test

create table flashback ¿ ¿


id number (10)
¿;
RESTORE POINT RECORDS
¿∗¿∗¿∗¿∗¿∗¿∗¿∗¿∗¿∗¿∗¿∗¿∗¿∗¿∗¿∗¿∗¿∗¿∗¿∗¿∗¿∗¿∗¿∗¿∗¿∗¿∗¿∗¿∗¿∗¿∗¿∗¿∗¿∗¿∗¿∗¿∗¿∗¿
¿
last −recid=1 , old −recno=0 , last −recno=0 ¿
(extent =1 , blkno=237 , numrecs=2048)
RESTORE POINT ¿ 1 :
restore point name: B 4 REINSTALLS guarantee flag :1 incarnation :2 next record 0

restore point scn :0 x 0 c 45.bd 1 de 417 06 /12 /2020 09 :29 :32

13. Scripts that could be used to monitor the health of the database (status,
space, invalid
objects, and other statistics).

Check Status
¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿¿
¿ ckinstance . ksh ¿
¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿¿
ORATAB=¿ var /opt /oracle/ oratab
echo `date`  
echo Oracle Database(s) Status `hostname` :\n
db= egrep−i:Y|:N $ ORATAB∨cut−d :−f 1∨grep−v \#∨grep−v \*
pslist=`ps -ef | grep pmon`
for i∈ $ db ; do
echo $pslist∨grep ora_pmon_$i>¿ dev /null 2> $ 1
if (( $ ?));then
echo Oracle Instance - $i:       Down
else
echo Oracle Instance - $i:       Up
fi
done

ˇ
Space
¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿¿ ¿
¿ ck tbsp . sh ¿
¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿¿ ¿
¿ ! /bin /ksh
sqlplus−s ≪!
oracle /$ 1 @ $ 2
set feed off
set linesize 100
set pagesize 200
spooltablespace . alert
SELECT F . TABLESPACENAME ,
¿CHAR ((T .TOTAL SPACE −F . FREE SPACE ), ' 999,999 ') USED (MB) ,
¿CHAR ( F . FREESPACE , ' 999,999 ' )FREE (MB) ,
¿CHAR (T . TOTAL SPACE , ' 999,999 ' )TOTAL (MB) ,
¿CHAR (( ROUND (( F . FREE SPACE /T . TOTALSPACE )∗100)), ' 999 ')∨¿' % ' PER FREE
¿¿
SELECT TABLESPACENAME ,
ROUND ¿
¿ V ¿ PARAMETER
WHERE NAME=' db¿
¿ FREE SPACE
¿ DBA ¿
GROUP BY TABLESPACE NAME
¿ F,
¿
SELECT TABLESPACE NAME ,
ROUND( ∑ ( BYTES /1048576))TOTAL SPACE
¿ DBA ¿
GROUP BY TABLESPACE NAME
¿T
WHERE F .TABLESPACE NAME=T . TABLESPACE NAME
¿( ROUND (( F . FREE SPACE /T . TOTAL SPACE )∗100))<10 ;
spool off
exit
!
if [ cat tablespace . alert ∨wc−l −¿ 0]
then
cat tablespace . alert −ltablespace . alert >tablespace . tmp
mailx −s TABLESPACE ALERT for $\{2\} $ DBALIST <tablespace . tmp
fi
Invalid objects
¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿¿ ¿
¿ invalid ¿ . sh ¿
¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿¿ ¿
¿ ! /bin/ksh
./ etc /oracle . profile
sqlplus−s ≪!
oracle /$ 1 @ $ 2
set feed off
set heading off
column object name format a 30
spoolinvalid object . alert
SELECT OWNER , OBJECT NAME ,OBJECT TYPE , STATUS
¿ DBA OBJECTS
WHERE STATUS=' INVALID '
ORDER BY OWNER ,OBJECT TYPE , OBJECT NAME ;
spool off
exit
!
if [ cat invalid object . alert ∨wc−l −¿ 0]
then
mailx−s INVALID OBJECTS for $\{2\} $ DBALIST <invalid object . alert
fi
$ cat invalid object . alert
14. Sample output from statistics queries.

TABLESPACE NAME USED(MB) FREE(MB) TOTAL( MB ) PER FREE

−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
SYSTEM 2,047203 2,250 9 %
STBS 01302 25327 8 %
STBS 02241 11252 4 %
STBS 03233 19 252

15. Sample output from invalid objects queries.

TOMEH DBMS ¿ PACKAGE BODY INVALID


HTOMEH X $ KCBFWAIT VIEW INVALID

IMON IW MON PACKAGE INVALID

IMON IW MON PACKAGE BODY INVALID

IMON IW ¿ VIEW INVALID


IMON IW FILESTAT VIEW INVALID

IMON IW ¿ VIEW INVALID


IMON IW ¿ VIEW INVALID
IMON IW ¿ VIEW INVALID

LBAILEY ¿ˇ TABLESPACE USAGE PROCEDURE INVALID

PATROL P $ AUTO ¿ VIEW INVALID


SYS DBMS¿ PACKAGE INVALID
SYS DBMS¿ PACKAGE BODY INVALID
SYS UPGRADE ¿ PROCEDURE INVALID
SYS AQ $ ¿ TYPE INVALID
SYS HS ¿ VIEW INVALID
SYS HS ¿ VIEW INVALID

16. Scripts used to create end-users. Including create, access, grant privileges.

sudo mysql

mysql -u root -p

CREATE USER 'JACK'@'localhost' IDENTIFIED BY 'password';

GRANT PRIVILEGE ON database.table TO 'JACK'@'host';

17. Scripts used to create synonyms.

CREATE SYNONYM offices


FOR hr . locations;

CREATE PUBLIC SYNONYM emp table

FOR hr . employees @ remote .us . oracle. com ;


CREATE PUBLIC SYNONYM customers FOR oe . customers ;
SELECT COUNT (¿)¿ customers;

18. Scripts used to query all_objects views for reverse engineering exercise.
Output from reverse
engineering queries.

SELECT
t . name ASTriggerName
, t . parent ¿
, t . type AS TrigerType
, t . create date AS TriggerCreateDate

, t . modifydate AS TriggerModifyDate
, t . isdisabled AS TriggerIsDisabled

, t . is¿ AS TriggerInsteadOfTrigger
, t . is¿ AS TriggerIsMSShipped
, t . is¿
, s . name AS SchenaName
, ob . name AS ObjectName
, ob . typedesc AS ObjectTypeDesc

, ob . type AS ObjectType
, sm .[ DEFINITION ] AS ' Trigger script '
¿ sys. triggers AS t−−sys. server triggers

¿ JOIN sys . objects AS ob


ON t . parent id =ob . object id

¿ JOIN sys. schemas AS s


ON ob . schemaid =s . schema id

¿ JOIN sys . sqlmodules sm

ON t . object id =sm. OBJECT ID ;

SELECT
SCHEMA NAME (tab . schemaid ) AS [schemaname ]
, pk . [name ] AS pk name

, ic .index ¿ AS column id

, col .[name] AS columnname

, tab . [name] AS tablename

¿ sys. tables tab


INNER JOIN sys .indexes AS pk
ON tab . object id = pk . object id

¿ pk .is¿ =1
INNER JOIN sys .index columns AS ic
ON ic . object id =pk . object id

¿ ic .index id = pk .index id

INNER JOIN sys .columns AS col


ON pk . object id =col . object id

¿ col . columnid =ic . columnid

ORDER BY schemaname ( tab. schemaid ),


pk .[name],
ic . index¿ ;
SELECT
SCHEMA NAME (tbl .[schemaid ]) AS[ SchemaName]
, tbl .[name] AS [Name ]
, col .[name] AS [ColumnName ]
, dc .[name] AS [DefaultConstraintName ]
, dc .[definition] AS [ DefaultDefinition]
, col .[columnid ] AS[ColumnNum]

, t .[name] AS[TypeName]
, col .[max length ] AS[TypeMaxLength]

, col .[ precision] AS[TypePrecision]


, col .[scale ] AS[TypeScale ]
, col .[is nullable ] AS[ IsNull]

, col .[isrowguidcol ] AS[ IsRowGUIDCol]

, col .[isidentity ] AS [IsIdentiity ]

¿ sys. tables AS tbl


INNER JOIN sys .columns AS col
ON tbl . [object id ]=col . [object id ]

INNER JOIN sys .types AS t


ON col . [user ¿ ]=t .[user ¿ ]
¿ JOIN sys. default constraints AS dc
ON dc .[object id ]=col .[default ¿ ];

You might also like