几客’Blog
一个人的天堂!

H3C-IRF堆叠技术知识要点

cmmchina阅读(2969)

IRF(Intelligent Resilient Framework,智能弹性架构)是 H3C 自主研发的软件虚拟化技术,它的核心思想是将多台设备通过 IRF 物理端口连接在一起,进行必要的配置后,虚拟为一台设备。使用这种虚拟化技术可以集合多台设备的硬件资源和软件处理能力,实现多台设备的协同工作、统一管理和不间断维护。

  • IRF 虚拟化技术涉及如下基本概念:
    1. 运行模式
      设备支持两种运行模式:
      • 独立运行模式:处于该模式下的设备只能单机运行,不能与别的设备形成 IRF。
      • IRF 模式:处于该模式下的设备可以与其它设备互连形成 IRF。 两种模式之间通过命令行进行切换。
    2. 角色
        IRF 中每台设备都称为成员设备。成员设备按照功能不同,分为两种角色:
      • Master:负责管理整个 IRF。
      • Slave:作为 Master 的备份设备运行。当 Master 故障时,系统会自动从 Slave 中选举一个新
      的 Master 接替原 Master 工作。 Master和Slave均由角色选举产生。一个IRF中同时只能存在一台Master,其它成员设备都是Slave。
    3. 成员编号
        IRF中使用成员编号(Member ID)来标识和管理成员设备,IRF中所有设备的成员编号都是唯一 的。比如,IRF 中接口的编号会加入成员编号信息:设备在独立运行模式下,某个接口的编号为 GigabitEthernet3/0/1;当该设备加入 IRF 后,如果成员编号为 2,则该接口的编号将变为 GigabitEthernet2/3/0/1。
      设备处于独立运行模式时,缺省没有配置成员编号,需要预配置成员编号,才能切换到 IRF 模式。 如果新设备加入 IRF,但是该设备与已有成员设备的编号冲突,则该设备不能加入 IRF。所以用户 在将设备加入 IRF 前,需要统一规划、配置设备的成员编号,以保证 IRF 中成员编号的唯一性。

- 角色选举

  确定成员设备角色为 Master 或 Slave 的过程称为角色选举。 角色选举会在拓扑变更的情况下产生,比如 IRF 建立、新设备加入、Master 设备离开或者故障、两 个 IRF 合并等。角色选举规则如下:

  • 当前 Master 优先(IRF 系统形成时,没有 Master 设备,所有加入的设备都认为自己是 Master,会跳转到第二条规则继续比较);
  • 成员优先级大的优先;
  • 系统运行时间长的优先(各设备的系统运行时间信息也是通过 IRF Hello 报文来传递的);
  • 成员编号地址小的优先。
    从第一条开始判断,如果判断的结果是多个最优,则继续判断下一条,直到找到唯一最优的成员设 备才停止比较。此最优成员设备即为 Master,其它成员设备则均为 Slave。
    在角色选举完成后,IRF 形成,将进入 IRF 管理与维护阶段。

H3C-IRF配置指导-整本手册

TCP协议知识点

cmmchina阅读(1369)

TCP端口号应用划分

常用网络端口号

Table 5-2 Popular Applications and Their Well-Known Port Numbers
端口号 协议 用途
20 TCP FTP data
21 TCP FTP control
22 TCP SSH
23 TCP Telnet
25 TCP SMTP
53 UDP TCP1 DNS
67 UDP DHCP Server
68 UDP DHCP Client
69 UDP TFTP
80 TCP HTTP (WWW)
110 TCP POP3
161 UDP SNMP
443 TCP SSL
514 UDP Syslog
TCP和UDP数据包结构对比:

TCP会话的建立-三次握手:



TCP连接特点:
  • TCP所有的数据包之一第一个包没有确认位;
  • TCP所有的数据包只有第一个包只有一个同步位;
TCP会话的确认和重传:




TCP会话的拥塞和流量控制:


TCP会话的终止-四次挥手:



网络7层协议,4层,5层?理清容易混淆的几个概念

cmmchina阅读(1651)

一、7层

7层是指OSI七层协议模型,主要是:应用层(Application)、表示层(Presentation)、会话层(Session)、传输层(Transport)、网络层(Network)、数据链路层(Data Link)、物理层(Physical)。

各层的作用及描述,以及对应的协议如下图(好东西啊,不过本文图是盗图,懒得重画了,仅供各位学习使用):

二、5层

5层只是OSI和TCP/IP的综合,是业界产生出来的非官方协议模型,但是很多具体的应用。实际应用还是TCP/IP的四层结构。为了方便可以把下两层称为网络接口层。五层体系结构包括:应用层、运输层、网络层、数据链路层和物理层。

5层模型不展开讲解,内容和功能参照7层的,这里把3者做一个综合的对应,如下图:

三、4层

4层是指TCP/IP四层模型,主要包括:应用层、运输层、网际层和网络接口层。

4层协议和对应的标准7层协议的关系如下图:

四、数据包

从上往下,每经过一层,协议就会在包头上面做点手脚,加点东西,传送到接收端,再层层解套出来,如下示意图:

十进制转其他进制转换算法

cmmchina阅读(2071)

任意进制(R)转十进制的按权展开法,具体操作方式为:
  • 将R进制数的每一位数值用$$R^k$$形式表示,k与该位和小数点之间的间隔位数有关;
    当该位位于小数点左边,k值是该位和小数点之间间隔位数;
    而当该位位于小数点右边,k值是与小数点间隔位数的负数,
    其绝对值是该位和小数点之间间隔数值的个数加1。

例如:二进制    $$10100.01=1x2^4+1x2^2+1x2^{-2}$$
例如:七进制    $$604.01=6x7^2+4x7^0+1x7^{-2}$$


十进制转任意进制(R)的短除法,具体操作方式为:
  • 十进制转任意(R)进制使用短除法;

$$Sum div R$$ ... 余数

例如:94转换为二进制数

$$94 div 2=47...0$$

$$47 div 2=23...1$$
$$uparrow$$

$$23 div 2=11...1$$
$$uparrow$$

$$11 div 2=5.....1$$
$$uparrow$$

$$5div 2=2...1$$
$$uparrow$$

$$2 div 2=1rightarrow0$$
$$uparrow$$

$${frac{94}{2}0|frac{47}{2}1|frac{23}{2}1|frac{11}{2}1|frac{5}{2}1|frac{2}{2}0|1}{leftarrow}$$ 向左依次得到二进制

二进制:$$1011110$$

群晖Active Backup for Business激活

cmmchina阅读(3875)

Synology Active Backup for Business作为群晖上整合式备份解决方案,非常适合整机备份,空间备份等场景使用。
黑群晖激活Synology Active Backup for Business套件小工具

Synology Active Backup for Business

激活需要在群晖中已经安装了Active Backup for Business套件,并关闭运行窗口。

激活步骤:

  1. 复制链接,替换当中的参数,在浏览器新窗口执行,正常返回{"success":true}
    https://地址:端口/webapi/auth.cgi?api=SYNO.API.Auth&method=Login&version=1&account=用户名&passwd=密码
  2. 复制链接,替换参数,在浏览器新窗口执行,
    正常返回{"data":{"activated":true},"success":true}

    https://地址:端口/webapi/entry.cgi?api=SYNO.ActiveBackup.Activation&method=set&version=1&activated=true&serial_number="序列号"

    3.复制链接,替换参数,在浏览器新窗口执行,
    正常返回{"data":{"activated":true,"serial_number":"序列号"},"success":true}

    https://地址:端口/webapi/entry.cgi?api=SYNO.ActiveBackup.Activation&method=get&version=1

    激活成功,打开Active Backup for Business套件即可。

- 解释下序列号:就是你黑裙自己的序列号,可以在 控制面板--信息中心 查到。

PVE下的网卡直通:(环境开启)

cmmchina阅读(7868)

PVE下的网卡直通需要开启iommu

Intel CPU

进入PVE网页控制台,点击shell进入命令命令输入窗口,输入:

nano /etc/default/grub

在里面找到:

GRUB_CMDLINE_LINUX_DEFAULT="quiet"

然后修改为:

GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on"

按Ctrl+X,再按回车保存。
在更新一下,输入命令:

update-grub

显示如下:

root@pve:~# update-grub
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-5.3.18-2-pve
Found initrd image: /boot/initrd.img-5.3.18-2-pve
Found memtest86+ image: /boot/memtest86+.bin
Found memtest86+ multiboot image: /boot/memtest86+_multiboot.bin
done

最后重启下PVE物理主机输入:reboot

root@pve:~# reboot

AMD CPU

shell里面输入命令:

nano /etc/default/grub

在里面找到:

GRUB_CMDLINE_LINUX_DEFAULT="quiet"

然后修改为:

GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on""

按Ctrl+X,再按回车保存。
在更新一下,输入命令:

update-grub

最后重启下PVE物理主机输入:reboot

root@pve:~# reboot

SqlServer基础知识点(数据类型与函数)

cmmchina阅读(1659)

数据表定义列属性:

Character 字符串(单字节):

数据类型 描述 特点
char(n) 固定长度的字符串。最多 8,000 个字符。如:char(10),固定10个字节 浪费空间 提升性能
varchar(n) 可变长度的字符串。最多 8,000 个字符。 节省空间 牺牲性能
varchar(max) 可变长度的字符串。最多 1,073,741,824 个字符。  
text 可变长度的字符串。最多 2GB 字符数据。  

Unicode 字符串(双字节):

数据类型 描述 存储
nchar(n) 固定长度的 Unicode 数据。最多 4,000 个字符。  
nvarchar(n) 可变长度的 Unicode 数据。最多 4,000 个字符。  
nvarchar(max) 可变长度的 Unicode 数据。最多 536,870,912 个字符。  
ntext 可变长度的 Unicode 数据。最多 2GB 字符数据。  

Binary 类型:

数据类型 描述 存储
bit 允许 0、1 或 NULL  
binary(n) 固定长度的二进制数据。最多 8,000 字节。  
varbinary(n) 可变长度的二进制数据。最多 8,000 字节。  
varbinary(max) 可变长度的二进制数据。最多 2GB 字节。  
image 可变长度的二进制数据。最多 2GB。(如:图片)  

Number 类型:

数据类型 描述 存储
tinyint 允许从 0 到 255 的所有数字。 1 字节
smallint 允许从 -32,768 到 32,767 的所有数字。 2 字节
int 允许从 -2,147,483,648 到 2,147,483,647 的所有数字。 4 字节
bigint 允许介于 -9,223,372,036,854,775,808 和 9,223,372,036,854,775,807 之间的所有数字。 8 字节
decimal(p,s) 固定精度和比例的数字。允许从 -10^38 +1 到 10^38 -1 之间的数字。

 

p 参数指示可以存储的最大位数(小数点左侧和右侧)。p 必须是 1 到 38 之间的值。默认是 18。

s 参数指示小数点右侧存储的最大位数。s 必须是 0 到 p 之间的值。默认是 0。

5-17 字节
numeric(p,s) 固定精度和比例的数字。允许从 -10^38 +1 到 10^38 -1 之间的数字。

 

p 参数指示可以存储的最大位数(小数点左侧和右侧)。p 必须是 1 到 38 之间的值。默认是 18。

s 参数指示小数点右侧存储的最大位数。s 必须是 0 到 p 之间的值。默认是 0。

5-17 字节
smallmoney 介于 -214,748.3648 和 214,748.3647 之间的货币数据。 4 字节
money 介于 -922,337,203,685,477.5808 和 922,337,203,685,477.5807 之间的货币数据。 8 字节
float(n) 从 -1.79E + 308 到 1.79E + 308 的浮动精度数字数据。 参数 n 指示该字段保存 4 字节还是 8 字节。float(24) 保存 4 字节,而 float(53) 保存 8 字节。n 的默认值是 53。 4 或 8 字节
real 从 -3.40E + 38 到 3.40E + 38 的浮动精度数字数据。 4 字节

Date 类型:

数据类型 描述 存储
datetime 从 1753 年 1 月 1 日 到 9999 年 12 月 31 日,精度为 3.33 毫秒。 8 bytes
datetime2 从 1753 年 1 月 1 日 到 9999 年 12 月 31 日,精度为 100 纳秒。 6-8 bytes
smalldatetime 从 1900 年 1 月 1 日 到 2079 年 6 月 6 日,精度为 1 分钟。 4 bytes
date 仅存储日期。从 0001 年 1 月 1 日 到 9999 年 12 月 31 日。 3 bytes
time 仅存储时间。精度为 100 纳秒。 3-5 bytes
datetimeoffset 与 datetime2 相同,外加时区偏移。 8-10 bytes
timestamp 存储唯一的数字,每当创建或修改某行时,该数字会更新。timestamp 基于内部时钟,不对应真实时间。每个表只能有一个 timestamp 变量。  

其他数据类型:

数据类型 描述
sql_variant 存储最多 8,000 字节不同数据类型的数据,除了 text、ntext 以及 timestamp。
uniqueidentifier 存储全局标识符 (GUID)。
xml 存储 XML 格式化数据。最多 2GB。
cursor 存储对用于数据库操作的指针的引用。
table 存储结果集,供稍后处理。

数据表定义列属性:

Character 字符串(单字节):

数据类型 描述 特点
char(n) 固定长度的字符串。最多 8,000 个字符。如:char(10),固定10个字节 浪费空间 提升性能
varchar(n) 可变长度的字符串。最多 8,000 个字符。 节省空间 牺牲性能
varchar(max) 可变长度的字符串。最多 1,073,741,824 个字符。  
text 可变长度的字符串。最多 2GB 字符数据。  

Unicode 字符串(双字节):

数据类型 描述 存储
nchar(n) 固定长度的 Unicode 数据。最多 4,000 个字符。  
nvarchar(n) 可变长度的 Unicode 数据。最多 4,000 个字符。  
nvarchar(max) 可变长度的 Unicode 数据。最多 536,870,912 个字符。  
ntext 可变长度的 Unicode 数据。最多 2GB 字符数据。  

Binary 类型:

数据类型 描述 存储
bit 允许 0、1 或 NULL  
binary(n) 固定长度的二进制数据。最多 8,000 字节。  
varbinary(n) 可变长度的二进制数据。最多 8,000 字节。  
varbinary(max) 可变长度的二进制数据。最多 2GB 字节。  
image 可变长度的二进制数据。最多 2GB。(如:图片)  

Number 类型:

数据类型 描述 存储
tinyint 允许从 0 到 255 的所有数字。 1 字节
smallint 允许从 -32,768 到 32,767 的所有数字。 2 字节
int 允许从 -2,147,483,648 到 2,147,483,647 的所有数字。 4 字节
bigint 允许介于 -9,223,372,036,854,775,808 和 9,223,372,036,854,775,807 之间的所有数字。 8 字节
decimal(p,s) 固定精度和比例的数字。允许从 -10^38 +1 到 10^38 -1 之间的数字。

 

p 参数指示可以存储的最大位数(小数点左侧和右侧)。p 必须是 1 到 38 之间的值。默认是 18。

s 参数指示小数点右侧存储的最大位数。s 必须是 0 到 p 之间的值。默认是 0。

5-17 字节
numeric(p,s) 固定精度和比例的数字。允许从 -10^38 +1 到 10^38 -1 之间的数字。

 

p 参数指示可以存储的最大位数(小数点左侧和右侧)。p 必须是 1 到 38 之间的值。默认是 18。

s 参数指示小数点右侧存储的最大位数。s 必须是 0 到 p 之间的值。默认是 0。

5-17 字节
smallmoney 介于 -214,748.3648 和 214,748.3647 之间的货币数据。 4 字节
money 介于 -922,337,203,685,477.5808 和 922,337,203,685,477.5807 之间的货币数据。 8 字节
float(n) 从 -1.79E + 308 到 1.79E + 308 的浮动精度数字数据。 参数 n 指示该字段保存 4 字节还是 8 字节。float(24) 保存 4 字节,而 float(53) 保存 8 字节。n 的默认值是 53。 4 或 8 字节
real 从 -3.40E + 38 到 3.40E + 38 的浮动精度数字数据。 4 字节

Date 类型:

数据类型 描述 存储
datetime 从 1753 年 1 月 1 日 到 9999 年 12 月 31 日,精度为 3.33 毫秒。 8 bytes
datetime2 从 1753 年 1 月 1 日 到 9999 年 12 月 31 日,精度为 100 纳秒。 6-8 bytes
smalldatetime 从 1900 年 1 月 1 日 到 2079 年 6 月 6 日,精度为 1 分钟。 4 bytes
date 仅存储日期。从 0001 年 1 月 1 日 到 9999 年 12 月 31 日。 3 bytes
time 仅存储时间。精度为 100 纳秒。 3-5 bytes
datetimeoffset 与 datetime2 相同,外加时区偏移。 8-10 bytes
timestamp 存储唯一的数字,每当创建或修改某行时,该数字会更新。timestamp 基于内部时钟,不对应真实时间。每个表只能有一个 timestamp 变量。  

其他数据类型:

数据类型 描述
sql_variant 存储最多 8,000 字节不同数据类型的数据,除了 text、ntext 以及 timestamp。
uniqueidentifier 存储全局标识符 (GUID)。
xml 存储 XML 格式化数据。最多 2GB。
cursor 存储对用于数据库操作的指针的引用。
table 存储结果集,供稍后处理。

SqlServer基础知识点(T-SQL语言基础)

cmmchina阅读(1611)

DML(数据操作语言)

INSERT、UPDATE、DELETE 等

  • 插入、修改和删除数据库中的数据

- 插入数据

## 插入数据语法:(字符数据需要单引号,数值数据不需要单引号。)
INSERT INTO 表名 (列名)VALUES (值列表)
## 示例:向学生表中插入一行数据
INSERT INTO Students (SName,SAddress,SGrade,SEmail,SsEX)
VALUES ('张青裁','上海松江',6,'ZQC@Sohu.com',0)

## 示例:向学生表中插入多行数据
INSERT INTO Students (SName,SAddress,SGrade,SEmail,SsEX)
SELECT '张青裁','上海松江',6,'ZQC@Sohu.com',0 UNION
SELECT '张三','上海松江',3,'VDC@Sohu.com',1 UNION
SELECT '刘筱','上海松江',2,'RRF@Sohu.com',0

- 每次插入一行数据,不能只插入半行或者几列数据,插入的数据是否有效将按照整行的完整性的要求来检验。
- 每个数据值的数据类型、精度和小数位数必须与相应的列匹配。
- 不能给标识列插入值。
- 不允许为空的列,则必须插入数据。
- 有缺省值的列,插入时可以使用 DEFAULT(缺省)关键字来代表缺省值。
- 用null表示空

# 将某一个表里的数据添加到另一个已存在的表中:
INSERT INTO 表名 (列名)
SELECT 列名
FROM 源表名
# 示例:将Students表中SName,SAdderss,SEmail列数值插入AddressList表的 (姓名,地址,电子邮件)列
INSERT INTO AddressList (姓名,地址,电子邮件)
SELECT SName,SAdderss,SEmail
FROM Students
# 注意:AddressList 表需包含 (姓名,地址,电子邮件) 列
# 将某一个表里的数据添加到新表中:
SELECT (列名)
INTO 表名
FROM 源表名
# 示例:将Students表中SName,SAdderss,SEmail列数值创建新NEWAddressList表
SELECT SName,SAdderss,SEmail
INTO NEWAddressList
FROM Students


- 更改数据

## 更新数据行:(更新多列数据使用逗号隔开)
UPDATE 表名 
SET 列名=更新值, 列名=更新值, ...
WHERE 条件
## 示例1:将Students 表中的SSEX列中所有数值改为0
UPDATE Students
SET SSEX=0
## 示例2:将Students 表中的SAddress列中 上海黄浦 改为 上海松江
UPDATE Students
SET SAddress='上海松江'
WHERE SAddress='上海黄浦'

- 勿忘条件限制,以防有效数据的丢失。



- 删除数据

## 删除数据行:
DELETE FROM 表名
WHERE 条件
## 示例1:删除Students 表中的SName列为 张青裁 行
DELETE FROM Students
WHERE SName='张青裁'
## 直接清空表:(慎用)
TRUNCATE TABLE 表名

DQL(数据查询语言)

SELECT 等

  • 用来查询数据库中的数据
## 查询数据:
SELECT 列名
FROM 表名
WHERE 条件 (可选)
ORDER BY 排序的列名 (可选)
##示例1:查询Students表中所有的列
SELECT *
FROM Students
## 示例2:查询Students表中SSEX列值为0的数据行,只显示SCode,SName,SAddress列,并按SCode列的值排序。
SELECT SCode,SName,SAddress
FROM Students
WHERE SSEX = 0
ORDER BY SCode
## 示例3:查询Students表中Email值为空的行。
SELECT *
FROM Students
WHERE Email is null
## 示例4:查询Students表中Email值非空的行。
SELECT *
FROM Students
WHERE Email is not null

- 排序默认按升序排列,降序语法:ORDER BY 列名 desc。
- 多列排序可以用 , 隔开列名,多列排序语法:ORDER BY 列名1,列名2。

## 只查询前几行数据
##方式1:按指定行数查询
SELECT TOP * 列名
FROM 表名
WHERE 条件 (可选)
ORDER BY 排序的列名 (可选)
## 示例:查询Students表所有列前5行数据
SELECT TOP 5 *
FROM Students
##方式2:按总行百分百查询
SELECT TOP * PERCENT 列名
FROM 表名
WHERE 条件 (可选)
ORDER BY 排序的列名 (可选)
## 示例:查询Students表所有列前20%行数据
SELECT TOP 20 PERCENT *
FROM Students
## 自定义数据结果列名称
##方法1
SELECT 列名 AS 新列名,列名 AS 新列名,...
FROM 表名
WHERE 条件 (可选)
ORDER BY 排序的列名 (可选)
##方法2
SELECT 新列名=列名,新列名=列名,...
FROM 表名
WHERE 条件 (可选)
ORDER BY 排序的列名 (可选)
## 显示结果中增加一个自定义列
SELECT 列名 AS 新列名,'自定义内容' AS 自定义列名,
FROM 表名
WHERE 条件 (可选)
ORDER BY 排序的列名 (可选)
## 多列合并查询
##方式1
SELECT 列名+列名
FROM 表名
WHERE 条件 (可选)
ORDER BY 排序的列名 (可选)
##方法2
SELECT 列名+列名 AS 新列名
FROM 表名
WHERE 条件 (可选)
ORDER BY 排序的列名 (可选)

- +连接的列,值需要是同一种类型
- 如果+连接的列是字符类数据,结果为数据内容相连。如:姓名+地址 结果为:姓名地址。
- 如果+连接的列是数值类数据,结果为数值之和。如:12+20 结果为:32。


DCL(数据控制语言)

  • 用来控制存取许可、存取权限等

GRANT、REVOKE 等


DDL(数据定义语言)

  • 用来建立数据库、数据库对象和定义表的列

CREATE TABLE、DROPTABLE 等


运算符

  • 一种符号,他用来进行列间或者变量之间的比较和数学运算
  • 包括算术运算符、赋值运算符、比较运算符、逻辑运算符
算术运算符
算术运算符 说明
+ 加运算,求两个数或者表达式相加的和
- 减运算,求两个数或者表达式相减的差
* 乘运算,求两个数或者表达式相乘的积
/ 除运算,求两个数或者表达式相除的商,如:5/3的值为1
% 取模运算,求两个数或者表达式相除的余数,如:5%3的值为2
赋值运算符
赋值运算 说明
= 吧一个数或变量或表达式赋值给另一个变量,如:Name='王华'
比较运算符
比较运算 含义
= 等于
> 大于
< 小于
>= 大于或等于
<= 小于或等于
<> 不等于
! 非(Java语言中为not)
逻辑运算符
逻辑表达式 说明 示例
AND 逻辑与 1 AND 1 = ; 1 AND 0 = 0; 0 AND 0 = 0;
OR 逻辑或 1 OR 1 = 1; 1OR 0 = 1; 0 OR 0 = 0;
NOT 逻辑非 NOT 1 = 0; NOT 0 = 1;
通配符 解释 示例
‘_’ 一个字符 A Like 'C_'
% 任意长度的字符串 B Like 'CO_%'
[ ] 括号中所指定范围内的一个字符 C Like '9W0[1-2]'
[^] 不在括号中所指定范围内的一个字符 D Like ‘%[A-D][^1-2]'

SqlServer基础知识点(数据库文件)

cmmchina阅读(1550)

数据文件

  • 主要数据文件
  • 次要数据文件
文件种类 分类 文件个数 推荐后缀名
数据文件 主要数据文件 有且只有一个 .mdf
次要数据文件 零个或多个 .ndf
日志文件 至少一个 .ldf

数据库文件移动步骤:

分离数据库,选择“删除连接”,皆可移动.mdf   .ndf   .ldf文件。


添加现有数据库文件到数据库步骤:

右键选择附加,选择数据库.mdf文件,点击确定。