在这篇文章中,我们将带领您了解mssql数据库重命名及错误分析的全貌,包括sqlserver数据库重命名失败的相关情况。同时,我们还将为您介绍有关centos下docker自动备份mysql、mssq
在这篇文章中,我们将带领您了解mssql 数据库重命名及错误分析的全貌,包括sql server数据库重命名失败的相关情况。同时,我们还将为您介绍有关centos下docker自动备份 mysql、mssql、ibatis 自动生成键 selectkey(Oracle、MYSQL、MSSQL、SQLITE)、Linux 系统下 ThinkPHP5 链接 MsSQL、lnmp 环境里安装 mssql 及 mssql 的 php 扩展的知识,以帮助您更好地理解这个主题。
本文目录一览:- mssql 数据库重命名及错误分析(sql server数据库重命名失败)
- centos下docker自动备份 mysql、mssql
- ibatis 自动生成键 selectkey(Oracle、MYSQL、MSSQL、SQLITE)
- Linux 系统下 ThinkPHP5 链接 MsSQL
- lnmp 环境里安装 mssql 及 mssql 的 php 扩展
mssql 数据库重命名及错误分析(sql server数据库重命名失败)
mssql 重命名及错误分析
1. 查看数据库的版本
select @@version
常见的几种SQL SERVER打补丁后的版本号:
8.00.194 Microsoft SQL Server 2000
8.00.384 Microsoft SQL Server 2000 SP1
8.00.532 Microsoft SQL Server 2000 SP2
8.00.760 Microsoft SQL Server 2000 SP3
8.00.818 Microsoft SQL Server 2000 SP3 w/ Cumulative Patch MS03-031
8.00.2039 Microsoft SQL Server 2000 SP4
2. 查看数据库所在机器操作系统参数
exec master..xp_msver
3. 查看数据库启动的参数
sp_configure
4. 查看数据库启动时间
select convert(varchar(30),login_time,120) from master..sysprocesses
where spid=1
查看数据库服务器名和实例名
print ''Server Name...............: '' + convert(varchar(30),@@SERVERNAME)
print ''Instance..................: '' + convert(varchar(30),@@SERVICENAME)
5. 查看所有数据库名称及大小
sp_helpdb
重命名数据库用的SQL
sp_renamedb ''old_dbname'', ''new_dbname''
6. 查看所有数据库用户登录信息
sp_helplogins
查看所有数据库用户所属的角色信息
sp_helrvrolemember
修复迁移服务器时孤立用户时,可以用的fix_orphan_user脚本或者LoneUser过程
更改某个数据对象的用户属主
sp_changeobjectowner [@objectname =] ''object'', [@newowner =] ''owner''
注意: 更改对象名的任一部分都可能破坏脚本和存储过程。
把一台服务器上的数据库用户登录信息备份出来可以用add_login_to_aserver脚本
查看某数据库下,对象级用户权限
sp_helprotect
7. 查看链接服务器
sp_helplinkedsrvlogin
查看远端数据库用户登录信息
sp_helpremotelogin
8.查看某数据库下某个数据对象的大小
sp_spaceused @objname
还可以用sp_toptables过程看最大的N(默认为50)个表
查看某数据库下某个数据对象的索引信息
sp_helpindex @objname
还可以用SP_NChelpindex过程查看更详细的索引情况
SP_NChelpindex @objname
clustered索引是把记录按物理顺序排列的,索引占的空间比较少。
对键值DML操作十分频繁的表我建议用非clustered索引和约束,fillfactor参数都
用默认值。
查看某数据库下某个数据对象的的约束信息
sp_helpconstraint @objname
9.查看数据库里所有的存储过程和函数
use @database_name
sp_stored_procedures
查看存储过程和函数的源代码
sp_helptext ''@procedure_name''
查看包含某个字符串@str的数据对象名称
select distinct object_name(id) from syscomments where text like ''%@str%''
创建加密的存储过程或函数在AS前面加WITH ENCRYPTION参数
解密加密过的存储过程和函数可以用sp_decrypt过程
10.查看数据库里用户和进程的信息
sp_who
查看SQL Server数据库里的活动用户和进程的信息
sp_who ''active''
查看SQL Server数据库里的锁的情况
sp_lock
进程号1--50是SQL Server系统内部用的,进程号大于50的才是用户的连接进程.
spid是进程编号,dbid是数据库编号,objid是数据对象编号
查看进程正在执行的SQL语句
dbcc inputbuffer ()
推荐大家用经过改进后的sp_who3过程可以直接看到进程运行的SQL语句
sp_who3
检查死锁用sp_who_lock过程
sp_who_lock
11.查看和收缩数据库日志文件的方法
查看所有数据库日志文件大小
dbcc sqlperf(logspace)
如果某些日志文件较大,收缩简单恢复模式数据库日志,收缩后
@database_name_log的大小单位为M
backup log @database_name with no_log
dbcc shrinkfile (@database_name_log, 5)
12.分析SQL Server SQL 语句的方法:
set statistics time {on | off}
set statistics io {on | off}
图形方式显示查询执行计划
在查询分析器->查询->显示估计的评估计划(D)-Ctrl-L 或者点击工具栏里的图形
文本方式显示查询执行计划
set showplan_all {on | off}
set showplan_text { on | off }
set statistics profile { on | off }
13.出现不一致错误时,NT事件查看器里出3624号错误,修复数据库的方法
先注释掉应用程序里引用的出现不一致性错误的表,然后在备份或其它机器上先恢
复然后做修复操作
alter database [@error_database_name] set single_user
修复出现不一致错误的表
dbcc checktable(''@error_table_name'',repair_allow_data_loss)
或者可惜选择修复出现不一致错误的小型数据库名
dbcc checkdb(''@error_database_name'',repair_allow_data_loss)
alter database [@error_database_name] set multi_user
CHECKDB 有3个参数:
repair_allow_data_loss 包括对行和页进行分配和取消分配以改正分配错误、结构
行或页的错误,以及删除已损坏的文本对象,这些修复可能会导致一些数据丢失。
修复操作可以在用户事务下完成以允许用户回滚所做的更改。
如果回滚修复,则数据库仍会含有错误,应该从备份进行恢复。
如果由于所提供修复等级的缘故遗漏某个错误的修复,则将遗漏任何取决于该修复
的修复。
修复完成后,请备份数据库。
repair_rest 进行小的、不耗时的修复操作,如修复非聚集索引中的附加键。
这些修复可以很快完成,并且不会有丢失数据的危险。
repair_rebuild 执行由 repair_rest 完成的所有修复,包括需要较长时间的修复
(如重建索引)。
执行这些修复时不会有丢失数据的危险。
centos下docker自动备份 mysql、mssql
# mysql
docker exec -i mysql bash <<''EOF''
mkdir /backup/mysql/$(date +%Y%m%d)
# 备份指定数据库
mysqldump -uroot -proot test > /backup/mysql/$(date +%Y%m%d)/test_$(date +%Y%m%d_%H%M%S).sql
# 备份所有数据库
# mysqldump --no-defaults --events --all-databases -uroot -padmin > /backup/mysql/$(date +%Y%m%d)/all_$(date +%Y%m%d_%H%M%S).sql
exit
EOF
mkdir /backup/mysql/$(date +%Y%m%d)
docker cp mysql:/backup/mysql/$(date +%Y%m%d) /backup/mysql/
# 新增crontab任务:
# crontab -e
# 每天2点执行脚本
# 0 2 * * * bash /mnt/docker/backup/mysql.sh
# 重启crontabd 服务
# service crond restart
# https://blog.csdn.net/MR1269427885/article/details/82978311
或
db_user="root"
db_passwd="root"
db_name="db_test"
# the directory for story your backup file.you shall change this dir
backup_dir="/usr/software/backup/mysqlbackup"
# date format for backup file (dd-mm-yyyy)
time="$(date +"%Y%m%d%H%M%S")"
mysqldump -u$db_user -p$db_passwd $db_name > "$backup_dir/$db_name"_"$time.sql"
mysql备份文件定期删除
------------------------------附加一个mysql备份定时删除--------------------------
1.准备一个脚本文件 rmbak.sh
backup_dir="/data/backup222/4a_db_backup" #删除七天之前的备份 #find $backup_dir -name $db_name"*.sql.gz" -type f -mtime +7 -exec rm -rf {} \; > /dev/null 2>&1 #删除一分钟之前的备份 find $backup_dir -name $db_name"*.sql.gz" -type f -mmin +1 -exec rm -rf {} \; > /dev/null 2>&1
-type f 表示查找普通类型的文件,f 表示普通文件,可不写
-mtime +7 按照文件的更改时间来查找文件,+7表示文件更改时间距现在7天以前;如果是-mmin +7表示文件更改时间距现在7分钟以前
-exec rm {} ; 表示执行一段shell命令,exec选项后面跟随着所要执行的命令或脚本,然后是一对{ },一个空格和一个\,最后是一个分号;
/dev/null 2>&1 把标准出错重定向到标准输出,然后扔到/DEV/NULL下面去。通俗的说,就是把所有标准输出和标准出错都扔到垃圾桶里面;其中的& 表示让该命令在后台执行
2.编辑crontab -e,添加下面,每分钟,如,每分钟一次删除
*/1 * * * * /data/backup222/rmbak.sh
3.重启:service crond restart
注意,rmbak.sh文件的权限,r,保证 定时任务能读取脚本内容,x,保证脚本有可执行权限
MSSQL:
#!/bin/bash
#设置mysql备份目录
folder=/var/opt/mssql/backup
cd $folder
day=`date +%Y%m%d`
#rm -rf $day
#mkdir $day
#cd $day
#数据库服务器,一般为localhost
host=localhost
#用户名
user=sa
#密码
password=''123456''
#要备份的数据库
db=MTS
#数据要保留的天数
days=7
#由于crontab命令是没环境变量,所以sqlcmd命令,要用全路径,否则定时执行会执行失败
/opt/mssql-tools/bin/sqlcmd -H$host -U$user -P$password -Q "
BACKUP DATABASE TESTDB
TO DISK = ''/var/opt/mssql/backup/TESTDB"$day".bak''
WITH FORMAT;
GO"
#删除之前的备份
#cd ..
day=`date -d "$days days ago" +%Y%m%d`
rm -rf "TESTDB"$day".bak"
echo "remove TESTDB"$day".bak"
# https://blog.csdn.net/fuck487/article/details/79295314
# https://blog.51cto.com/svsky/2121967
ps:
分 时 日 月 周 执行命令 第 1 列分钟 1~59,每分钟用 * 或者*/1表示,整点分钟数为00或0 第 2 列小时 1~23(0 表示 0 点) 第 3 列日 1~31 第 4 列月 1~12 第 5 列星期 0~6(0 表示星期天) 第 6 列要运行的命令 0 3 * * * /backup.sh,此命令表示在每天的凌晨三点执行一次脚本,可自行调整时间
ibatis 自动生成键 selectkey(Oracle、MYSQL、MSSQL、SQLITE)
我们在数据库插入一条数据的时候,经常是需要返回插入这条数据的主键。但是数据库供应商之间生成主键的方式都不一样。有些是预先生成 (pre-generate) 主键的,如 Oracle 和 PostgreSQL;有些是事后生成 (post-generate) 主键的,如 MySQL 和 SQL Server。但不管是哪种方式,我们都可以用 ibatis 的节点来获取语句所产生的主键。
oracle 例子:
<insert id="insertProduct-ORACLE" parameterClass="product">
<selectKey resultClass="int" type="pre" keyProperty="id" >
SELECT STOCKIDSEQUENCE.NEXTVAL AS VALUE FROM DUAL
</selectKey>
insert into PRODUCT (PRD_ID,PRD_DESCRIPTION) values (#id#,#description#)
</insert>
sql-server 例子:
<insert id="insertProduct-MS-SQL" parameterClass="product">
insert into PRODUCT (PRD_DESCRIPTION) values (#description#)
<selectKey resultClass="int" type="post" keyProperty="id" >
select @@IDENTITY as value
</selectKey>
</insert>
mysql 例子:
<insert id="insertProduct-MYSQL" parameterClass="product">
insert into PRODUCT (PRD_DESCRIPTION) values (#description#)
<selectKey resultClass="int" type="post" keyProperty="id" >
select LAST_INSERT_ID() as value
</selectKey>
</insert>
SQLite 例子:
<insert id="Create" parameterClass="Subject">
INSERT INTO SUBJECT
(SubjectName,QuestionCount,IsNowPaper)
VALUES(#SubjectName#,#QuestionCount#,#IsNowPaper#)
<selectKey resultClass="int" type="post" property="SubjectId">
SELECT seq
FROM sqlite_sequence
WHERE (name = ''SUBJECT'')
</selectKey>
</insert>
注意:name = ''SUBJECT''中SUBJECT为表名称
Linux 系统下 ThinkPHP5 链接 MsSQL
案例
CentOS6.8 系统 ThinkPHP5 链接 MsSQL 数据库。
分析
ThinkPHP5 提供了 Mysql、Pgsql、Sqlite 和 Sqlsrv 四种数据库驱动。Window 系统下有现成的 php_sqlsrv.dll 扩展可用,但 Linux 系统中没有 (本人没有找到)。
尝试 1 未成功,写来以备其它用途
安装 freetds
wget ftp://ftp.freetds.org/pub/freetds/stable/freetds-patched.tar.gz
tar -zxvf freetds-patched.tar.gz
cd freetds-*
./configure --prefix=/usr/local/freetds --with-tdsver=auto --enable-msdblib --with-gnu-ld --enable-shared --enable-static
make && make install
安装 mssql
wget http://cn2.php.net/distributions/php-5.6.22.tar.gz
tar -zxvf php-5.6.22.tar.gz
cd php-*/ext/mssql
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config --with-mssql=/usr/local/freetds
make && make install
修改 php.ini,添加如下配置 (路径请根据环境不同而定)
extension="/usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/mssql.so"
修改 ThinkPHP5 配置文件 database.php
// 数据库类型
''type'' => ''sqlsrv'',
// 服务器地址
''hostname'' => ''192.168.1.210'',
// 数据库名
''database'' => ''dbname'',
// 用户名
''username'' => ''sa'',
// 密码
''password'' => ''123456'',
// 端口
''hostport'' => ''1433'',
测试
这种方式在 ThinkPHP 中是行不通的,在其它应用环境可以。
尝试 2 成功
安装 freetds
wget ftp://ftp.freetds.org/pub/freetds/stable/freetds-patched.tar.gz
tar -zxvf freetds-patched.tar.gz
cd freetds-*
./configure --prefix=/usr/local/freetds --with-tdsver=auto --enable-msdblib --with-gnu-ld --enable-shared --enable-static
make && make install
安装 pdo_dblib
wget http://cn2.php.net/distributions/php-5.6.22.tar.gz
tar -zxvf php-5.6.22.tar.gz
cd php-*/ext/pdo_dblib
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config --with-pdo-dblib=/usr/local/freetds
make && make install
修改 php.ini,添加如下配置 (路径请根据环境不同而定)
extension="/usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/pdo_dblib.so"
修改 ThinkPHP5 配置文件 database.php
// 数据库类型
''type'' => ''dblib'',
// 服务器地址
''hostname'' => ''192.168.1.210'',
// 数据库名
''database'' => ''dbname'',
// 用户名
''username'' => ''sa'',
// 密码
''password'' => ''123456'',
// 端口
''hostport'' => ''1433'',
下载 ThinkPHP 数据库驱动 Dblib 文件
将文件拷贝到 thinkphp/library/think/db
目录。
测试
成功。
lnmp 环境里安装 mssql 及 mssql 的 php 扩展
小活中用到 mssql, 于是在自己 lnmp 环境中安装各 mssql 数据库
步骤如下:
源码编译安装
# tar zxvf freetds-stable.tgz(解压,)
# cd freetds-0.91
# 编译
# ./configure --prefix=/usr/local/freetds --with-tdsver=8.0 --enable-msdblib
# make
# make install
参数解释:
安装 freetds 到目录 /usr/local/freetds:--prefix=/usr/local/freetds
支持 MSSQL2000:--with-tdsver=8.0 --enable-msdblib
配置 FreeTds 的库文件
将 freetds 的库文件所在路径配置到 LD_LIBRARY_PATH 参数中:
$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/localfreetds/lib/:
或者直接把 etc/bashrc 的文件 bashrc 直接填写上 LD_LIBRARY_PATH=/usr/localfreetds/lib:$LD_LIBRARY_PATH
这么作的目的是为了避免加载 FreeTds 库文件加载不上的情况。
php 里安装 php-mssql 扩展:
cd /download (把php-mssql扩展下载到download目录里)
wget http://cn2.php.net/distributions/php-5.6.30.tar.gz (下载扩展文件,这里要根据你环境中运行的php版本选择对应的扩展版本下载,我这里php是5.6.30的 所以php-mssql扩展下载对应的版本)
tar -zxvf php-5.6.30.tar.gz
cd /php-5.6.30/ext/mssql
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config --with-mssql=/usr/local/freetds/
make && make install
编译安装后的结果 如下图
同时 mssql.so 也在 php 扩展文件下生成 (如下图)
把 extension="/usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/mssql.so" 添加到 usr/local/php/lib/php.ini 中
引用扩展后,重启 web 服务,通过 phpinfo 查看扩展 mssql 是否开启成功
重启 php /usr/local/php/sbin/php-fpm reload
重启 nginx 进入 nginx 可执行目录 sbin 下,输入命令./nginx -s reload 即可(或者 /application/nginx/sbin/nginx -s reload)
今天关于mssql 数据库重命名及错误分析和sql server数据库重命名失败的讲解已经结束,谢谢您的阅读,如果想了解更多关于centos下docker自动备份 mysql、mssql、ibatis 自动生成键 selectkey(Oracle、MYSQL、MSSQL、SQLITE)、Linux 系统下 ThinkPHP5 链接 MsSQL、lnmp 环境里安装 mssql 及 mssql 的 php 扩展的相关知识,请在本站搜索。
本文标签: