关于数据库文件mdf:
1.如果用navicat新建一个数据库,那么此时他会默认创建的是ndf类型的文件,而且文件存放路径在sql server默认路径(一般是安装路径下的某个路径。即使你修改了默认路径,navicat的默认存放路径也不会变)。所以每次创建数据库要修改为mdf文件,修改mdf和ldf文件的路径(两个要分别改)。
2.mdf文件可以复用。在Microsoft SQL Server Management Studio右击目标数据库,执行分离。然后将mdf与ldf(有时没有ldf也可以)复制到目标机器上。在目标机器的管理工具中,右击选择附加,选择刚才的mdf与ldf文件,即可使用。
其中:
(1)当一块磁盘快满了时,经常需要如此操作,将一些数据迁移到新盘中。请一并将默认存放路径修改。
右击本机数据库,选择属性,选择数据库设置,修改默认位置。
(2)经常会有人只给你mdf文件,但没有ldf,可以在附加中将ldf文件删除。 一般也能附加上,如果不行再找同事要。
(3)如果用navicat默认生成了数据库文件,发现是ndf类型,则需要先分离,把后缀ndf改成mdf,在本机再附加一次:数据库文件选择刚才改成mdf的文件。之后再分离,将mdf与ldf拷贝走。如不这样,拷贝到目标机器后无法正常读取ldf文件,即使吧ldf文件删除也不行。
关于性能:
1.用sql server处理亿级以下的数据是很快的,第一次接触的话你会因其速度感觉到惊喜。但如果要是处理亿级以上的数据,真的让人头痛,能分表就分表吧。
关于导出文件、或者说将表跨数据迁移:
1.通过bcp导出成csv文件是很快的,真的,没具体测,大约3-5分钟能导出1亿数据(不过到了4亿多左右会变慢很多,具体原因没研究,不知道是数据库还是文件系统的问题),这是一个不错的迁移方式,导出成的csv文件再用awk切分为多个文件,相当于分表,再让其他数据库读取文件。
bcp的命令举例如下:
导入:bcp hk_red.dbo.LineDataHK in F:\HK_data\导入文件\tablename.csv -e F:\HK_data\导入文件\error.txt -c -T -t"|@@|@|" -Uusername -P"password"
导出:bcp hk_red.dbo.LineDataHK out F:\HK_data\导入文件\tablename.csv -e F:\HK_data\导入文件\error.txt -c -T -t"|@@|@|" -Uusername -P"password"
按sql导入:bcp hk_red.dbo.LineDataHK queryout F:\HK_data\导入文件\tablename.csv -e F:\HK_data\导入文件\error.txt -c -T -t"|@@|@|" -Uusername -P"password"
2.小的表可以用navicat直接传输,很方便。而且会处理字符集的问题,例如中文,用bcp处理的文件,中文的字符集是微软的,不是utf8。
3.当然,bcp导出的文件也是有方法转成utf8的,需要借助工具cygwin。
4.导入文件报错:右截断
这是因为你的分割符在数据中出现了,导致按分隔符切分后会比原表多出一列到多列。
解决办法就是到出的分隔符设定为两到三个,例如:|@| 这种。
如果还是不行,要么报错的行单独特殊处理,要么分隔符在多几个。