Linux SQL server数据库的(安装搭建),(备份还原),排障SQL

Linux SQL server数据库的(安装搭建),(备份还原),排障SQL

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 ''

创建和查询数据 :

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

相关推荐