『壹』 如何殺掉(kill)Oracle中的會話(Session)
殺掉(kill)Oracle中的會話(Session)的方法:
sql> conn etl/etl
Connected.
SQL> update test set status='invalid';
55944 rows updated.
SQL> update test2 set dropped='Y';
3090 rows updated.
前提要確保資料庫服務及監聽均處於啟動狀態。
具體方法/步驟 :
1通過在開始輸入cmd,進入Dos命令窗口。
2輸入sqlplus system/system密碼@資料庫名稱,點回車,從而連通資料庫。
3在上述窗口中輸入select username from dba_users,點回車,以顯示當前資料庫實例中的用戶名;
4選擇要刪除的用戶,在當前窗口中輸入:drop user USERNAME cascade; 點回車。
5稍等片刻,即可完成資料庫用戶刪除動作;
『叄』 如何終止SQL Server中的用戶進程
首先,我們在主資料庫中創建「KILL2」這個進程,代碼如下所示(參考圖一):
USE [master]
GO
IF EXISTS (SELECT * FROM master.dbo.sysobjects
WHERE id = OBJECT_ID(N'[kill2]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[kill2]
GO
--Usage1: Kill2 '51-57' --> Kills all the session IDs from 51 to 57
--Usage2: Kill2 '58' --> Kills the session IDs 58
--Usage3: Kill2 '51,56,100,58'
--> Kills the session IDs 51,56,100 and 58
--Usage4: Kill2 'DB=MyDatabase'
--> Kills all the session IDs that are connected
to the database "MyDatabase"
use master
go
set concat_null_yields_null off
go
create procere kill2 @param2 varchar(500)
as
--declare @param2 varchar(500)
declare @param varchar(500)
declare @startcount int
declare @killcmd varchar(100)
declare @endcount int
declare @spid int
declare @spid2 int
declare @tempvar varchar(100)
declare @tempvar2 varchar(100)
--set @param2 ='54'
set @param=REPLACE(@param2,' ','')
if CHARINDEX('-',@param) <> 0
begin
select @startcount= convert(int,SUBSTRING(@param,1,charindex('-',@param)-1))
select @endcount=convert(int,SUBSTRING(@param,charindex('-',@param)+1,(LEN(@param)-charindex('-',@param))))
print 'Killing all SPIDs from ' + convert(varchar(100),@startcount)+' to ' +convert(varchar(100),@endcount)
while @startcount <=@endcount
begin
set @spid=(select spid from master.dbo.sysprocesses where spid=@startcount and spid>50)
if @spid = @startcount
begin
print 'Killing '+convert(varchar(100),@startcount)
set @killcmd ='Kill '+convert(varchar(100),@startcount)
exec(@killcmd)
end
else
begin
Print 'Cannot kill the SPID ' +convert(varchar(100),@startcount) + ' because it does not Exist'
end
set @startcount=@startcount + 1
end
end
if CHARINDEX(',',@param) <> 0
begin
set @tempvar =@param
while charindex(',',@tempvar ) <> 0
begin
SET @tempvar2=left(@tempvar,charindex(',',@tempvar)-1)
set @spid=(select spid from master.dbo.sysprocesses where spid=CONVERT(varchar(100),@tempvar2) and spid>50)
if @spid = CONVERT(varchar(100),@tempvar2)
begin
print 'Killing '+CONVERT(varchar(100),@tempvar2)
set @killcmd='Kill '+CONVERT(varchar(100),@tempvar2)
exec (@killcmd)
end
else
begin
Print 'Cannot kill the SPID ' +CONVERT(varchar(100),@tempvar2) + ' because it does not Exist'
end
set @tempvar =REPLACE(@tempvar,left(@tempvar,charindex(',',@tempvar)),'')
end
set @spid=(select spid from master.dbo.sysprocesses where spid=CONVERT(varchar(100),@tempvar) and spid>50)
if @spid = CONVERT(varchar(100),@tempvar)
begin
print 'Killing '+CONVERT(varchar(100),@tempvar)
set @killcmd='Kill '+CONVERT(varchar(100),@tempvar)
exec (@killcmd)
end
else
begin
Print 'Cannot kill the SPID ' +CONVERT(varchar(100),@tempvar) + ' because it does not Exist'
end
end
if CHARINDEX('=',@param2) <>0
begin
print 'Killing all the SPIDs that are connected to the database '+RIGHT(@param2,(len(@param2)-3))
declare dbcursor
cursor forward_only for select SPID from master.dbo.sysprocesses where DB_NAME(dbid) = RIGHT(@param2,(len(@param2)-3))
open dbcursor
fetch dbcursor into @spid
while @@FETCH_STATUS =0
begin
set @spid2=(select spid from master.dbo.sysprocesses where spid=@spid and spid>50)
if @spid = @spid2 begin
print 'Killing '+CONVERT(varchar(100),@spid2)
set @killcmd='Kill '+CONVERT(varchar(100),@spid2)
exec (@killcmd)
end
else
begin
Print 'Cannot kill the SPID ' +CONVERT(varchar(100),@spid2) + ' because it does not Exist'
end
fetch dbcursor into @spid
end
close dbcursor
deallocate dbcursor
end
if CHARINDEX('-',@param)=0 and CHARINDEX(',',@param) = 0 and CHARINDEX('=',@param)=0
begin
set @spid=(select spid from master.dbo.sysprocesses where spid=CONVERT(varchar(100),@param) and spid>50)
if @spid = CONVERT(varchar(100),@param)
begin
print 'Killing '+CONVERT(varchar(100),@param)
set @killcmd='Kill '+CONVERT(varchar(100),@param)
exec (@killcmd)
end
else
begin
Print 'Cannot kill the SPID ' +CONVERT(varchar(100),@param) + ' because it does not Exist'
end
end
go
--kill2 '51'
--go
--kill2 '51-56'
--go
--kill2 '56,57,58,52'
--go
--kill2 'db=AdventureWorks2008'
--kill2 'db=My Database'
--go
--sp_who
圖一
現在,我們假設進程ID(SPID)為51、52、53、54、55、57這幾個進程(見圖二)連接到了SQL Server資料庫,而我們只想把進程ID為54、55和57的進程結束掉。
圖二
執行以下命令。注意,在這個例子當中還在命令中加入了其他幾個SQL Server中不存在的SPID:61和100。
use master
go
kill2 '54,57,55,61,100'
go
運行結果:
Killing 54
Killing 57
Msg 6104, Level 16, State 1, Line 1
Cannot use KILL to kill your own process.
Cannot kill the SPID 55 because it does not Exist
Cannot kill the SPID 61 because it does not Exist
Cannot kill the SPID 100 because it does not Exist
圖三
我們可以從結果(見圖三)看到,執行指令後成功終止了SPID 54。當試圖終止57時失敗了。同時結果也顯示了為什麼沒能終止特定SPID的信息
下面,假設我們有51、52、53、54、55、57、58、59和60這幾個SPID,而我們的目標是結束SPID從25到70的進程。
執行以下命令:
use master
go
kill2 '25-75'
go
運行結果:
Killing all SPIDs from 25 to 75
Cannot kill the SPID 25 because it does not Exist
…..
Cannot kill the SPID 48 because it does not Exist
Cannot kill the SPID 49 because it does not Exist
Cannot kill the SPID 50 because it does not Exist
Killing 51
Killing 52
Killing 53
Killing 54
Killing 55
Cannot kill the SPID 56 because it does not Exist
Killing 57
Msg 6104, Level 16, State 1, Line 1
Cannot use KILL to kill your own process.
Killing 58
Killing 59
Killing 60
Cannot kill the SPID 61 because it does not Exist
.....
Cannot kill the SPID 75 because it does not Exist
圖四
從結果(見圖四)我們可以看到「KILL2」存儲過程忽略了所有SPID小於50的連接,而結束了從51到70的所有進程。
接下來,假設我們要終結掉所有連接到資料庫AdventureWorks2008的會話,同時又假設SPID為53、54、58和60的進程連接到了該資料庫(見圖五)。
圖五
現在,我們執行以下的T-SQL語句結束掉所有這些會話。
Use master
go
kill2 'db=AdventureWorks2008'
go
運行結果:
Killing all the SPIDs that are connected to the database AdventureWorks2008
Killing 53
Killing 54
Killing 58
Killing 60
圖六
從結果(見圖六)我們可以看到「KILL2」存儲過程終止了所有連接到AdventureWorks2008資料庫的會話。
用法四
「KILL2」存儲過程的第四種用法類似於「KILL命令,也就是一次解決一個會話,如下所示:
Use master
go
kill2 '56'
go
『肆』 mysql 8.0 創建新的資料庫、用戶並授權,以及相關查看並刪除操作
以創建wordpress網站的資料庫為例
1、創建資料庫
創建可指定字元,或者不指定字元,如果不指定字元,默認為 utf8mb4 和 utf8mb4_0900_ai_ci
2、創建用戶
可自行指定用戶可訪問的IP地址范圍。
3、授權用戶
4、直接一步到位
或者 這種方法 :創建並授權用戶,是二和三的合並。
1、查看資料庫
show databases可查詢所有存在的資料庫
2、查看用戶信息
用戶信息在系統資料庫mysql中的user表中。密碼查詢不會顯示明文密碼,而是顯示為加密後的密文。
3、查看用戶許可權
有兩種方式查看。
第一種方式 : show grants for 'userwordpress'
第二種方式: select * from mysql.user where user='userwordpress'G;
g 相當於』;』
G使每個欄位列印到單獨的行,也有 』;' 的作用
只能查出哪個資料庫的哪張表的許可權,如查userwordpress在mysql資料庫的user表的許可權,顯示都是N(no),沒有許可權,如果查root用戶就都是Y(yes)選擇了。
用drop而非delete,簡單的區分就是,drop是刪除【表】,truncate與delete則是刪除表中【記錄】。
刪除用戶
同理,刪除資料庫
用drop刪除時,會有確認信息,為了防止誤刪。(刪庫跑路,請謹慎操作)