SQLServer导数据到Oracle,O硬盘交互

一. 概述

 sql server作为关系型数据库,必要实行数量存款和储蓄, 那在运营中就能不停的与硬盘举行读写交互。要是读写无法科学快捷的造成,就能现出品质难点以及数据库损坏难题。上面讲讲引起I/O的发出,以及剖析优化。

1.电话字段设置23个Byte竟然远远不足,可以吗设置为50的长短。

alter table <表名> alter column <字段名> 新类型名(长度)

举例:
alter table T_CustomerFile alter MobilePhoneNumber nvarchar(50)

从SQLServer导数据到Oracle差十分的少有以下三种方法:

二.sql server  首要磁盘读写的一言一动

  2.1  从数据文件(.mdf)里, 读入新数据页到内部存款和储蓄器。前页汇报内部存款和储蓄器时大家知晓,借使想要的数目不在内部存款和储蓄器中时,就能从硬盘的数据文件里以页面为最小单位,读取到内部存款和储蓄器中,还富含预读的数额。 当内部存款和储蓄器中设有,就不会去磁盘读取数据。丰裕的内部存款和储蓄器能够最小化磁盘I/O,因为磁盘的快慢远慢于内部存款和储蓄器。

  2.2  预写日志系统(WAL),向日志文件(.ldf)写入增加和删除改的日志记录。 用来珍贵数据业务的ACID。

  2.3  Checkpoint 检查点爆发时,将脏页数据写入到数据文件 ,在sp_configure的recovery interval 调整着sql server多久实行二次Checkpoint, 如若常常做Checkpoint,那每一遍产生的硬盘写就不会太多,对硬盘冲击不会太大。假如隔长日子一遍Checkpoint,不做Checkpoint时品质大概会异常快,但积累了大气的改造,或然要发生多量的写,那时品质会受影响。在大多数据气象下,私下认可设置是相比较好的,没供给去修改。

  2.4   内部存款和储蓄器不足时,Lazy Write发生,会将缓冲区中期维修改过的数目页面同步到硬盘的数据文件中。由于内部存款和储蓄器的上空不足触发了Lazy Write, 主动将内部存款和储蓄器中非常久未有使用过的数据页和奉行安排清空。Lazy Write一般不被平日调用。

  2.5   CheckDB,  索引维护,全文索引,总计音信,备份数据,高可用一块日志等。

 2.去除二个表,整个表在数据库中消失

IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[T_ABC]') AND type in (N'U'))

DROP TABLE [dbo].[T_ABC]
  1. 运用SSMS的导出数据向导,使用Microsoft ODBC for Oracle或Oracle Provider for OLE DB连接受Oracle
  2. 导出到平面文件
  3. 导出包涵数据的SQL脚本。
  4. 使用ETL工具。
  5. 友好开辟软件。

三. 磁盘读写的相关深入分析

  3.1 sys.dm_io_virtual_file_stats  获取数据文件和日志文件的I/O 总计新闻。该函数从sql server 二零一零开端,替换动态管理视图fn_virtualfilestats函数。 哪些文件平日要做读num_of_reads,哪些常常要做写num_of_writes,哪些读写平常要等待io_stall_*。为了博取有意义的数据,需求在短时间内对这个多少实行快速照相,然后将它们同基线数据绝相比较。

SELECT  DB_NAME(database_id) AS 'Database Name',
        file_id,
        io_stall_read_ms / num_of_reads AS 'Avg Read Transfer/ms',
        io_stall_write_ms / num_of_writes AS 'Avg Write Transfer/ms'
FROM    sys.dm_io_virtual_file_stats(null, null)
WHERE   num_of_reads > 0 AND num_of_writes > 0 

  io_stall_read_ms:用户等待文件,发出读取所用的总时间(阿秒)。

  io_stall_write: 用户等待在该公文中做到写入所用的总时间皮秒。

  图片 1

  3.2  windows 质量计数器:  Avg. Disk Sec/Read 那一个计数器是指每秒从磁盘读取数据的平均值

< 10 ms - 非常好
 10 ~ 20 ms 之间- 还可以
 20 ~50 ms 之间- 慢,供给关注
> 50 ms –严重的 I/O 瓶颈

  3.4  I/O  物理内部存款和储蓄器读取次数最多的前50条

 SELECT TOP 50
 qs.total_physical_reads,qs.execution_count,
 qs.total_physical_reads/qs.execution_count AS [avg I/O],
 qs. creation_time,
 qs.max_elapsed_time,
 qs.min_elapsed_time,
 SUBSTRING(qt.text,qs.statement_start_offset/2,
 (CASE WHEN qs.statement_end_offset=-1
 THEN LEN(CONVERT(NVARCHAR(max),qt.text))*2
 ELSE qs.statement_end_offset END -qs.statement_start_offset)/2) AS query_text,
 qt.dbid,dbname=DB_NAME(qt.dbid),
 qt.objectid,
 qs.sql_handle,
 qs.plan_handle
 from sys.dm_exec_query_stats qs
 CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS qt
 ORDER BY qs.total_physical_reads DESC

 3.5 使用sp_spaceused查看表的磁盘空间

  exec sp_spaceused 'table_xx'

图片 2

reserved:保留的长空总的数量
data:数据利用的空中总数
index_size:索引使用空间
Unused: 未用的空间量

 3.6  监测I/0运涨势况 STATISTICS IO ON;

3、整型bigint、int、smallint、tinyint的区别

bigint

从 -2^63 (-9223372036854775808) 到 2^63-1(9223372036854775807) 的整型数据

(全体数字)。存款和储蓄大小为 8 个字节。

 

int

从 -2^31 (-2,147,483,648) 到 2^31 - 1(2,147,483,647) 的整型数据(全部数字)。

仓库储存大小为 4 个字节。int 的 SQL-92 同义字为 integer。

 

smallint

从 -2^15 (-32,768) 到 2^15 - 1 (32,767) 的整型数据。存款和储蓄大小为 2 个字节。

 

tinyint

从 0 到 255 的整型数据。存款和储蓄大小为 1 字节。

以下使用第2种艺术来拓展多少迁移的。

 四  磁盘读写瓶颈的症状

  4.1  errorlog里告知错误 833

  4.2  sys.dm_os_wait_stats 视图里有雅量等候情状PAGEIOLATCH_* 或 WriteLog。当数码在缓冲区里从未找到,连接的等候情状便是PAGEIOLACTH_EX(写) PAGEIOLATCH_SH(读),然后发起异步操作,将页面读入缓冲区中。像 waiting_tasks_count和wait_time_ms比较高的时候,通常要等待I/O,除在映以往数据文件上以外,还会有writelog的日记文件上。想要拿到有含义数据,须求做基线数据,查看感兴趣的岁月距离。

select wait_type,
waiting_tasks_count,
wait_time_ms ,
max_wait_time_ms,
signal_wait_time_ms
from sys.dm_os_wait_stats
where wait_type like 'PAGEIOLATCH%' 
order by wait_type

  wait_type:等待类型
  waiting_tasks_count:该等待类型的等待数
  wait_time_ms:该等待类型的总等待时间(包涵三个历程悬挂状态(Suspend)和可运转情形(Runnable)花费的总时间)
  max_wait_time_ms:该等待类型的最长等待时间
  signal_wait_time_ms:正在等候的线程从收到复信号文告到其初步运营之间的时差(二个进程可运生势况Runnable开支的总时间)
  i/o等待时间==wait_time_ms - signal_wait_time_ms

 4、varchar、nvarchar、char、nchar

varchar(n)
长度为 n 个字节的可变长度且非 Unicode 的字符数据。n 必须是三个在乎 1 和 8,000 之间的数值。存款和储蓄大小为输入数据的字节的实际上尺寸,并非 n 个字节。

nvarchar(n)
饱含 n 个字符的可变长度 Unicode 字符数量。n 的值必须介于 1 与 4,000 之间。字节的贮存大小是所输入字符个数的两倍。

 如字段值只是拉脱维亚语可选择varchar,而字段值存在非常多的双字节(粤语等)字符时用nvarchar

 

char的尺寸是不可变的,而varchar的长短是可变的。char的存取数度比varchar要快得多,因为其尺寸固定,方便程序的积累与搜索;char为此付出的是空中的代价,因为其尺寸固定,所以难免会有剩余的空格占位符并吞空间,可谓是以空间换取时间作用,而varchar是以空间作用为第四人的

 

nchar的长短是不可变的,Unicode字符数据。

 

char,varchar 最多8000个英文,4000个汉字
nchar,nvarchar 可存储4000个字符,无论英文还是汉字

TEXT

text存款和储蓄可变长度的非Unicode数据,最大尺寸为2^31-1(2,147,483,647)个字符。

ntext
可变长度 Unicode 数据的最大尺寸为 2^30 - 1 (1,073,741,823) 个字符。存款和储蓄大小是所输入字符个数的两倍(以字节为单位)。ntext 在 SQL-92中的同义词是 national text。

 

一旦数据量非常的大,又能百分百明确长度且保存只是ansi字符,那么使用char
能分明长度又不必然是ansi字符也许,那么使用nchar
对此超大数据,如小说内容,使用nText 
任何的通用nvarchar

行使BCP合适导出大体量数据。这里导出千万等级的数量,也是飞快就能够不负众望。

   五  优化磁盘I/O

   5.1 数据文件里页面碎片整理。 当表爆发增加和删除改操作时索引都会发出碎片(索引叶级的页拆分),碎片是指索引上的页不再持有轮廓延续性时,就能够产生碎片。比如您询问10条数据,碎片少时,恐怕只扫描2个页,但零星多时大概要扫描越来越多页(前边讲索引时在前述)。

   5.2 表格上的目录。举个例子:提议每一个表都包括集中索引,那是因为数量存款和储蓄分为堆和B-Tree, 按B-Tree空间占用率更加高。 丰盛应用索引收缩对I/0的必要。

   5.3 数据文件,日志文件,TempDB文件建议贮存分裂物理磁盘,日志文件放写入速度相当慢的磁盘上,举个例子RAID 10的分区

        5.4 文件空间管理,设置数据库拉长时要按一定大小增加,而无法按百分比,那样幸免三遍进步太多或太少所推动的不需要麻烦。提出对非常小的数据库设置叁遍提升50MB到100MB。下图彰显假若按5%来巩固近10G, 假设有一个应用程序在品尝插入一行,可是尚未空间可用。那么数据库大概会初阶升高三个近10G, 文件的升高可能会耗用太长的光阴,以致于客户端程序插入查询失败。

  图片 3

       5.5 制止自动降低文件,要是设置了此成效,sql server会每隔三时辰检查文件的运用,借使空闲空间>伍分之一,会活动运营dbcc shrinkfile 动作。自动裁减线程的会话ID SPID总是6(现在恐怕有变) 如下突显自动降低为False。

     图片 4

     图片 5

   5.6 要是数据库的复苏情势是:完整。 就要求定期做日志备份,幸免日志文件Infiniti的加强,用于磁盘空间。

    

     

 5、DECIMAL``(P,D)

意味着列能够积累D位小数的P位数。十进制列的其实范围取决于精度和刻度。

剩余数字
0 0
1–2 1
3–4 2
5–6 3
7-9 4

例如:DECIMAL(19,9)对此小数部分持有9位数字,对于整数部分持有19位-9位 = 10位数字,小数部分供给4个字节。 整数有个别对于前9位数字须要4个字节,1个剩余字节必要1个字节。DECIMAL(19,9)列共计须求9个字节。

 

假设导出时还需求做一些数量的拍卖,比方多表关联,字符管理等,相比复杂的逻辑,最棒是做成存款和储蓄进程,BCP直接调用存款和储蓄进度就可以。

PowerDesigner  和 astah professional 

政工比较轻易的数据库设计,使用PowerDesigner就够了。

 

点击新建新模型->Categories->Infomation->Physical Data,就能够展开数据库表结构划设想计之旅。

安插好的数额库表结构,双击在“Table Properties”标签页下,有几个“Preview”的价签,张开,就可以看到相应数据库表设计的SQL语句。间接复制到MSSQLServer、Oracle或其余数据库的进行窗口,试行就能够创制。

 

只要职业相对复杂,可以行使astah professional版本来实行专门的学问和数据库设计,在astah的主分界面包车型地铁tools->ESportageDiagram->Export Sql... 能够导出对应的SQL语句。

图片 6

 

参考

BCP "exec TestDB.dbo.export_t1 " queryout d:exportt1.txt -c -t"||" -S"192.168.1.100" -Urpt -Prpt123
pause

USE TestDB
GO

CREATE PROC [dbo].[export_usercar]
AS
    SELECT  [carId]
           ,CONVERT(NVARCHAR(30), [addTime], 120)
           ,CONVERT(NVARCHAR(30), [lastSearchTime], 120)
           ,CONVERT(NVARCHAR(30), [updateTime], 120)
           ,[carType]
           ,[userTelephone]
           ,[isCorrect]
           ,[userId]
           ,[validFlag]
           ,[Channel]
           ,[carCode]
           ,[engineNumber]
           ,[carNumber]
    FROM    [TestDB].[dbo].[t1] WITH ( NOLOCK )
    WHERE   validFlag = 1
            AND isCorrect = 1;

把导出文件上传到Oracle所在的主机上,如CentOS下。

本文由ca88手机版登录发布于亚洲城ca88手机版官网,转载请注明出处:SQLServer导数据到Oracle,O硬盘交互

TAG标签: ca88手机版登录
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。