1. 程式人生 > 實用技巧 >Linux SQL server資料庫的(安裝搭建),(備份還原),排障SQL

Linux SQL server資料庫的(安裝搭建),(備份還原),排障SQL

linux下安裝sqlserver資料庫有2種辦法, 第一使用yum映象安裝, 第二使用rpm安裝包安裝 rpm安裝地址為:https://packages.microsoft.com/config/rhel/7/mssql-server-2019.repo 使用rpm安裝的話可能存在依賴問題,此處不做詳細安裝說明。 重點說一下yum方式安裝,我們這裡安裝的版本為sqlserver2019,步驟如下: 一、要求 1.centos或redhat7.0以上系統 2.記憶體2G以上(要不然無法安裝) 二、安裝步驟
1.設定sqlserver安裝映象
sudo curl -o /etc/yum.repos.d/mssql-server.repo https://packages.microsoft.com/config/rhel/7/mssql-server-2019.repo
2.執行安裝
yum install -y mssql-server
完畢之後執行 sudo /opt/mssql/bin/mssql-conf setup 做相關配置

3.下面檢視我們安裝的sql server版本
rpm -qa | grep mssql
4.檢視安裝的路徑
find / -name mssql
5.設定開機啟動
systemctl enable mssql-server
6.開啟1433埠
firewall-cmd --zone=public --add-port=1433/tcp --permanent
firewall-cmd --reload
7.幾個命令
systemctl start mssql-server
systemctl restart mssql-server
systemctl stop mssql-server
systemctl status mssql-server
具體配置路勁為/opt/mssql/bin/mssql-conf

  

安裝 SQL Server 命令列工具
1,新增yum檔案
sudo curl -o /etc/yum.repos.d/msprod.repo https://packages.microsoft.com/config/rhel/7/prod.repo
 
2,執行以下命令以安裝  mssql-tools  和 unixODBC 開發人員包。
sudo yum install -y mssql-tools unixODBC-devel
 
3,為方便起見,請將  /opt/mssql-tools/bin/  新增到  PATH  環境變數。   這樣就可以在執行工具時不指定完整路徑。   請執行以下命令,以便修改登入會話和互動/非登入會話的  PATH :
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile  echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc  source ~/.bashrc
 
本地連線 :
sqlcmd -S localhost -U SA -P '<YourPassword>'
 
建立和查詢資料 :
 
1,在 sqlcmd 命令提示符中,貼上以下 Transact-SQL 命令以建立測試資料庫:
CREATE DATABASE TestDB
 
2,在下一行中,編寫一個查詢以返回伺服器上所有資料庫的名稱:
SELECT Name from sys.Databases
 
3,前兩個命令沒有立即執行。   必須在新行中鍵入  GO  才能執行以前的命令:
GO
備份還原資料庫:

Linux下備份SqlServer資料庫命令

//建立資料庫備份資料夾 mkdir -pv /usr/local/databackup 
//給mussql授予/usr/local/databackup資料夾的許可權 chown -R mssql:mssql /usr/local/databackup/
//登入資料庫 sqlcmd -S 127.0.0.1 -U sa
//備份資料庫到指定路徑 1> backup database Test to disk='/usr/local/databackup/Test0411.bak' 2> go
Linux下還原資料庫
// 登入資料庫 sqlcmd -S 127.0.0.1 -U sa 
// 查出備份檔案的邏輯檔名(很重要!!!不然會報錯) RESTORE FILELISTONLY FROM DISK = '/usr/local/databackup/Test0411.bak'
// 這個時候會顯示兩條資料,可能在Linux下資料會很亂,你找到裡面的第一列LogicalName對應的值,我這裡一個為standard,另一個為standard_log,standard是資料檔案邏輯名,standard_log是日誌檔案邏輯名
// 然後進行還原
1> RESTORE DATABASE TestDB FROM DISK = '/usr/local/databackup/Test0414.bak'
#2> WITH MOVE 'standard' TO '/var/opt/mssql/data/TestDB.mdf',
#3> MOVE 'standard_log' TO '/var/opt/mssql/data/TestDB_Log.ldf'
4> go

  

一些排障sql語句: 查詢SQLSERVER執行過的SQL記錄(歷史查詢記錄)
SELECT TOP 1000 QS.creation_time, SUBSTRING(ST.text, (QS.statement_start_offset / 2) + 1, ((CASE QS.statement_end_offset WHEN - 1 THEN DATALENGTH(st.text) ELSE QS.statement_end_offset END - QS.statement_start_offset) / 2) + 1) AS statement_text, ST.text, QS.total_worker_time, QS.last_worker_time, QS.max_worker_time, QS.min_worker_time FROM sys.dm_exec_query_stats QS CROSS APPLY sys.dm_exec_sql_text(QS.sql_handle) ST WHERE QS.creation_time BETWEEN '2017-09-09 10:00:00' AND '2017-09-11 18:00:00' AND ST.text LIKE '%%' ORDER BY QS.creation_time DESC

  

檢視SQL server是否有阻塞,沒有的話blk為0(只有sa有執行許可權)
exec sp_who 'active'
檢視當前的使用者連線:
SELECT * FROM sys.[sysprocesses] WHERE [spid]>50 --AND DB_NAME([dbid])='gposdb'
查詢SQL server的會話等待!
SELECT TOP 10 [session_id], [request_id], [start_time] AS '開始時間', [status] AS '狀態', [command] AS '命令', dest.[text] AS 'sql語句', DB_NAME( [database_id] ) AS '資料庫名', [blocking_session_id] AS '正在阻塞其他會話的會話ID', der.[wait_type] AS '等待資源型別', [wait_time] AS '等待時間', [wait_resource] AS '等待的資源', [dows].[waiting_tasks_count] AS '當前正在進行等待的任務數', [reads] AS '物理讀次數', [writes] AS '寫次數', [logical_reads] AS '邏輯讀次數', [row_count] AS '返回結果行數' FROM sys.[dm_exec_requests] AS der INNER JOIN [sys].[dm_os_wait_stats] AS dows ON der.[wait_type] = [dows].[wait_type] CROSS APPLY sys.[dm_exec_sql_text] ( der.[sql_handle] ) AS dest WHERE [session_id] > 50 ORDER BY [cpu_time] DESC
查詢CPU佔用情況:
SELECT TOP 10 st.text AS SQL_Full --父級完整語句 , SUBSTRING ( st.text, ( qs.statement_start_offset/ 2 ) + 1, ( ( CASE statement_end_offset WHEN - 1 THEN DATALENGTH( st.text ) ELSE qs.statement_end_offset END - qs.statement_start_offset ) / 2 ) + 1 ) AS SQL_Part --統計對應的部分語句 , CAST ( ( ( qs.total_elapsed_time / 1000000.0 ) / qs.execution_count ) AS DECIMAL ( 28, 2 ) ) AS [平均消耗秒數], CAST ( qs.last_elapsed_time / 1000000.0 AS DECIMAL ( 28, 2 ) ) AS [最後完成消耗秒數], qs.last_execution_time AS [最後執行時間], CAST ( qs.min_elapsed_time / 1000000.0 AS DECIMAL ( 28, 2 ) ) AS [最小消耗秒數], CAST ( qs.max_elapsed_time / 1000000.0 AS DECIMAL ( 28, 2 ) ) AS [最大消耗秒數], CAST ( qs.total_elapsed_time / 1000000.0 AS DECIMAL ( 28, 2 ) ) AS [總消耗秒數], ( qs.execution_count ) AS [總執行次數], creation_time AS [編譯計劃的時間], CAST ( qs.last_worker_time / 1000000.0 AS DECIMAL ( 28, 2 ) ) AS [最後完成佔用CPU秒數], qp.query_plan FROM sys.dm_exec_query_stats qs CROSS APPLY sys.dm_exec_sql_text ( qs.sql_handle ) AS st CROSS APPLY sys.dm_exec_query_plan ( qs.plan_handle ) qp WHERE qs.last_execution_time> DATEADD( n,- 30, GETDATE( ) ) ORDER BY qs.last_worker_time DESC