Data is the key to your organization’s future, but if it’s outdated, irrelevant, or hidden then it’s no good. Maintenance and administration of databases takes a lot of work. As database administrators, we often tend to automate most of these repetitive tasks. A database refresh is one of the most common tasks performed by most of the administrators as part of their daily routine.

数据是组织未来的关键,但是,如果数据过时,不相关或隐藏,那就不好了。 数据库的维护和管理需要大量工作。 作为数据库管理员,我们通常倾向于自动执行大多数重复性任务。 数据库刷新是大多数管理员在日常工作中执行的最常见任务之一。

Today, database refreshes are quite frequent because of Continuous Integration (CI) and Continuous Deployment (CD). In most of the cases, testing requires a separate but current production dataset to ensure the validity of the desired result.

如今,由于持续集成(CI)和持续部署(CD),数据库刷新非常频繁。 在大多数情况下,测试需要一个单独的但最新的生产数据集以确保所需结果的有效性。

In today’s world, we rely more on third party tools to perform a Backup and Restore of databases. With many advanced tools and techniques, this is a pretty straight forward approach. Think of the real-world scenarios where customers rely on the native SQL Tools and techniques. Creating an automated database refresh tasks regularly will have a huge impact on the quality of the release management cycles and would save a lot of time for the database administrators.

在当今世界,我们更多地依赖第三方工具来执行数据库的备份和还原。 使用许多先进的工具和技术,这是一种非常简单的方法。 想一想客户依赖本机SQL工具和技术的实际情况。 定期创建自动的数据库刷新任务将对发布管理周期的质量产生巨大影响,并为数据库管理员节省大量时间。

There are many ways to automate this, some of which are:

有许多方法可以使它自动化,其中包括:

  • SQLCMD SQLCMD
  • PowerShell 电源外壳
  • SqlPackage SqlPackage

In this article, we about the following:

在本文中,我们讨论以下内容:

  • Details of Sqlcmd Sqlcmd的详细信息
  • The use of the cross-platform tool, Sqlpackage 跨平台工具Sqlpackage的使用
  • Automation using Windows batch scripting 使用Windows批处理脚本进行自动化
  • And more… 和更多…

Using sqlcmd provides flexible ways to execute T-SQLs and SQL script files. As its available on Linux, Windows and Mac, this command line utility plays a vital role in managing the database restore operations in a DevOps pipeline.

使用sqlcmd提供了执行T-SQL和SQL脚本文件的灵活方法。 该命令行实用程序可在Linux,Windows和Mac上使用,在管理DevOps管道中的数据库还原操作方面起着至关重要的作用。

PowerShell脚本使用SqlPackage.exe自动创建bacpac文件并使用创建的bacpac还原数据库 (PowerShell script to automatically create a bacpac file and restore the database using the created bacpac, using SqlPackage.exe)

This section deals with the preparation of a PowerShell script to automate database restoration using the SqlPackage tool which is part of the SQL Server Data Tools suite.

本节介绍如何使用SqlPackage工具(它是SQL Server数据工具套件的一部分)来准备PowerShell脚本以自动执行数据库还原。

The first step is to prepare and set the environment variables. The SqlPackage tool is installed under C:\Program Files (x86)\Microsoft SQL Server\140\DAC\bin. The script uses sqlcmd and SqlPackage tool; make sure that the path variable is updated accordingly.

第一步是准备和设置环境变量。 SqlPackage工具安装在C:\ Program Files(x86)\ Microsoft SQL Server \ 140 \ DAC \ bin下。 该脚本使用sqlcmd和SqlPackage工具; 确保相应地更新路径变量。

  1. The input parameter section lists the source, target SQL databases instance and folder for extracting the bacpac file 输入参数部分列出了用于提取bacpac文件的源,目标SQL数据库实例和文件夹
  2. Create the bacpac file using export action type 使用导出操作类型创建bacpac文件
  3. Select the latest bacpac file for further database restoration action 选择最新的bacpac文件以执行进一步的数据库还原操作
  4. Drop the destination database using the sqlcmd command 使用sqlcmd命令删除目标数据库
  5. Restore he database using import action type. 使用导入操作类型还原数据库。

First, let’s work on the getting and setting the environment variables. Pull the details of the environment variables into a local variable. The output shows if the environment variable contains the path or not (if not, the path is added to the PATH variable).

首先,让我们开始获取和设置环境变量。 将环境变量的详细信息拉入局部变量。 输出显示环境变量是否包含路径(如果不包含,则将路径添加到PATH变量)。

$PathVariables=$env:Path
$PathVariablesIF (-not $PathVariables.Contains( "C:\Program Files (x86)\Microsoft SQL Server\140\DAC\bin"))
{
write-host "SQLPackage.exe path is not found, Update the environment variable"
$env:Path = $env:Path + ";C:\Program Files (x86)\Microsoft SQL Server\140\DAC\bin;"
}

Defining the required input parameters

定义所需的输入参数

  • Backup directory 备份目录
  • Source database name 源数据库名称
  • Source server name 源服务器名称
  • Target server name (in this case it’s a Linux machine) 目标服务器名称(在本例中为Linux计算机)
$BackupDirectory="c:\SQLShackDemo\"
$DatabaseName="ApexSQLBackup"
#Source SQL Server name
$SourceServerName="HQDBT01"
#target instance is SQL Server on Linux Machine
$TargetserverName="10.2.6.51"

准备目标文件名 (Prepare the target filename)

In most of the case, defining a backup file is a standard practice as one backup file may not be enough to safeguard the entire system. So, a backup file name should be more meaningful with timestamps attached to it, and it should speak a little about the data. It includes the following;

在大多数情况下,定义备份文件是一种标准做法,因为一个备份文件可能不足以保护整个系统。 因此,备份文件名应附加时间戳,使其更有意义,并且应略述数据。 它包括以下内容;

  • Filename 文档名称
  • Extension 延期
  • Timestamp yyyyMMddhhmmss format 时间戳yyyyMMddhhmmss格式
$dirName  = [io.path]::GetDirectoryName($BackupDirectory)
#set the filename, the database should be a part of the filename
$filename = "ApexSQLBackup"
#extension must be bacpac
$ext      = "bacpac"
#target filepath is a combination of the directory and filename appended with year month and day hour minutes and seconds
$TargetFilePath  = "$dirName\$filename-$(get-date -f yyyyMMddhhmmss).$ext"
#print the full path of the target file path
$TargetFilePath

运行SqlPackage工具 (Run the SqlPackage tool)

Now, run SqlPackage.exe to export the ApexSQLBackup database. This step will create the BACPAC file for an existing database. The following sqlpackage.exe commands are used to export the database. These commands are compatible with all the databases on a local instance or remote instance of SQL Server, or even an Azure SQL Databases.

现在,运行SqlPackage.exe导出ApexSQLBackup数据库。 此步骤将为现有数据库创建BACPAC文件。 以下sqlpackage.exe命令用于导出数据库。 这些命令与SQL Server本地实例或远程实例上的所有数据库甚至Azure SQL数据库兼容。

sqlpackage.exe /a:Export /ssn:<SourceServerName> /sdn:<SourceDatabaseName> /su:<sourceUsername> /sp:<SourcePassword> /tf:<targetFileName>

sqlpackage.exe / a:导出/ ssn:<SourceServerName> / sdn:<SourceDatabaseName> / su:<sourceUsername> / sp:<SourcePassword> / tf:<targetFileName>

  • /Action – /a

    /动作– / a

    specify the action to be performed. In this case it’s Export, used to export the database into a bacpac file

    指定要执行的动作。 在这种情况下,它是“导出”,用于将数据库导出到bacpac文件中

  • /SourceServerName -/ssn

    / SourceServerName-/ ssn

    defines the name of the server hosting the database. It can be an Azure database URI or instance name or named instance

    定义托管数据库的服务器的名称。 它可以是Azure数据库URI或实例名称或命名实例

  • /SourceDatabaseName (sdn)

    / SourceDatabaseName(sdn)

    defines the name of the existing source database

    定义现有源数据库的名称

  • /SourceUser (su)

    / SourceUser(su)

    defines the SQL Server login username

    定义SQL Server登录用户名

  • /SourcePassword (sp)

    / SourcePassword(sp)

    defines the password; In this case, we’re exporting from a trusted SQL instance on Windows. For trusted connections, ignore the /su and /sp parameters

    定义密码; 在这种情况下,我们将从Windows上的受信任SQL实例中导出。 对于可信连接,请忽略/ su和/ sp参数

In the following example, the short form is used

在下面的示例中,使用缩写形式

SqlPackage.exe /a:Export /ssn:$SourceServerName /sdn:$DatabaseName /tf:$TargetFilePath

Now, we’ll see how to get the latest bacpac file. In this case, selecting an item is done using Get-Childitem cmdlet. The specific files are listed using pattern matching. The output is then piped to get a sorted list in a descending order and then selected the first object of the list into the resultset.

现在,我们将了解如何获取最新的bacpac文件。 在这种情况下,使用Get-Childitem cmdlet完成选择项目。 使用模式匹配列出了特定文件。 然后将输出通过管道传递以获得降序排序的列表,然后将列表的第一个对象选择到结果集中。

$NewestBacPacFile = Get-ChildItem -Path $dirName\$filename*.$ext | Sort-Object LastAccessTime -Descending | Select-Object -First 1
$file="$NewestBacPacFile"
$file

There are some caveats to keep in mind while importing the data. The database must either not exist or be completely empty. The following SQL is used to check for the database existence on the target SQL instance. On its existence, the database is dropped using sqlcmd.

导入数据时需要注意一些注意事项。 数据库必须不存在或完全为空。 以下SQL用于检查目标SQL实例上是否存在数据库。 存在数据库后,将使用sqlcmd删除该数据库。

$DropSQL=
@"
IF EXISTS (SELECT name FROM sys.databases WHERE name = '$DatabaseName') DROP DATABASE $DatabaseName
"@
SQLCMD -S $TargetserverName -U SA -P thanVitha@2015 -Q $DropSQL

导入ApexSQLBackup数据库 (Import the ApexSQLBackup database)

To import the database, you can run the following command. These commands work for databases on a local instance or remote instance of SQL Server or even an Azure SQL Database instance:

要导入数据库,可以运行以下命令。 这些命令适用于SQL Server本地实例或远程实例甚至Azure SQL数据库实例上的数据库:

sqlpackage.exe /a:Import /sf:<SourcefileName> /tsn:<TargetServerName> /tdn:<targetdatabaseName> /su:<sourceUsername> /sp:<SourcePassword>

sqlpackage.exe / a:导入/ sf:<源文件名> / tsn:<目标服务器名> / tdn:<目标数据库名> / su:<源用户名> / sp:<源密码>

In this case, we are connecting to a Linux instance.

在这种情况下,我们正在连接到Linux实例。

Listed below are the arguments we’re using for importing the bacpac file. In my example above, I’m using the short form, you can use either long or short forms that suit your requirements or understanding

下面列出的是我们用于导入bacpac文件的参数。 在上面的示例中,我使用的是简写形式,您可以使用适合您的要求或理解的长或短形式

  • /Action – /a

    /动作– / a

    the action type, in this case its import, Importing database into Linux SQL instance

    操作类型,在这种情况下为导入,将数据库导入Linux SQL实例

  • /SourceFileName -/sf

    / SourceFileName-/ sf

    the path of the latest bacpac file of the database.

    数据库的最新bacpac文件的路径。

  • /TargetDatabaseName -/sdn

    / TargetDatabaseName-/ sdn

    the name of the target database

    目标数据库的名称

  • /SourceUser (su)

    / SourceUser(su)

    login user name

    登录用户名

  • /SourcePassword (sp)

    / SourcePassword(sp)

    the password; In this case its uses SQL authentication to connect to SQL on Linux. The /su and /sp parameters are in used in this place.

    密码; 在这种情况下,它使用SQL身份验证连接到Linux上SQL。 在此位置使用了/ su和/ sp参数。

SqlPackage.exe /a:Import /sf:$file /tsn:$TargetserverName /tdn:$DatabaseName /tu:SA /tp:thanVitha@2015

输出量 (Output)

Copy and save the Appendix A content into sqlpackage.ps1 file

将附录A的内容复制并保存到sqlpackage.ps1文件中

自动化的Windows Batch脚本创建bacpac文件并使用创建的bacpac和SqlPackage.exe还原数据库 (Automated Windows Batch script to create bacpac file and restoring the database using the created bacpac using SqlPackage.exe)

A batch file is a collection of commands or executables, run within the command shell (CMD). It’s similar to a bash script in Unix/Linux.

批处理文件是在命令外壳(CMD)中运行的命令或可执行文件的集合。 它类似于Unix / Linux中的bash脚本。

The walkthrough of the batch file is pretty straight forward and it is no different from the PowerShell script that we just saw. I will discuss only the required pieces of the batch file in the next section.

批处理文件的演练非常简单,与我们刚刚看到的PowerShell脚本没有什么不同。 在下一节中,我将仅讨论批处理文件中所需的部分。

Let’s save the below following script code as a batch file. The filename has an extension of .bat or .cmd.

让我们将以下以下脚本代码保存为批处理文件。 文件名的扩展名为.bat.cmd

I would like to take you through the for loop of the code. For example,

我想带您通过代码的for循环。 例如,

FOR /F [“options”] %%parameter IN (‘command to process’) DO command. Here are the steps we’d follow:

FOR / F [“选项”] %%参数IN(“要处理的命令”)DO命令。 这是我们要执行的步骤:

  1. Take a dataset 取得数据集
  2. Make a FOR Parameter %%G equal to some part of that data 使FOR参数%% G等于该数据的某些部分
  3. Execute a command (optionally using the parameters as part of the command). 执行命令(可以选择使用参数作为命令的一部分)。
  4. Repeat for each data item 对每个数据项重复
  5. If you are using the FOR command at the command line rather than in a batch program, use a single ‘%’ sign: %F 如果在命令行而不是在批处理程序中使用FOR命令,请使用单个'%'符号:%F

Save the batch script from Appendix B as a .bat file:

将附录B中的批处理脚本另存为.bat文件:

That’s it!

而已!

结语 (Wrapping up)

In this article, we looked at how a PowerShell or a Batch script can be used to automate data restoration using a bacpac file using sqlpackage.exe. This tool is one of the easiest tools that can be used to refresh the database. The code can be further simplified and automated for various other database refresh needs.

在本文中,我们研究了如何使用PowerShell或Batch脚本通过使用sqlpackage.exe的bacpac文件自动执行数据还原。 此工具是可用于刷新数据库的最简单工具之一。 可以针对各种其他数据库刷新需求进一步简化和自动化代码。

目录 (Table of contents)

Database Backup and Restore process in SQL Server – series intro
An overview of the process of SQL Server backup-and-restore
Understanding the SQL Server Data Management Life Cycle
Understanding SQL Server database recovery models
Understanding SQL Server Backup Types
Backup and Restore (or Recovery) strategies for SQL Server database
Discussing Backup and Restore Automation using SQLCMD and SQL Server agent
Understanding Database snapshots vs Database backups in SQL Server
SqlPackage.exe – Automate SQL Server Database Restoration using bacpac with PowerShell or Batch techniques
Smart database backup in SQL Server 2017
How to perform a Page Level Restore in SQL Server
Backup Linux SQL databases Using PowerShell and Windows Task Scheduler
SQL Server Database backup and restore operations using the Cloud
Tail-Log Backup and Restore in SQL Server
SQL Server Database Backup and Restore reports
Database Filegroup(s) and Piecemeal restores in SQL Server
In-Memory Optimized database backup and restore in SQL Server
Understanding Backup and Restore operations in SQL Server Docker Containers
Backup and Restore operations with SQL Server 2017 on Docker containers using Azure Data Studio
Interview questions on SQL Server database backups, restores and recovery – Part I
Interview questions on SQL Server database backups, restores and recovery – Part II
Interview questions on SQL Server database backups, restores and recovery – Part III
Interview questions on SQL Server database backups, restores and recovery – Part IV
SQL Server中的数据库备份和还原过程–系列简介
SQL Server备份和还原过程概述
了解SQL Server数据管理生命周期
了解SQL Server数据库恢复模型
了解SQL Server备份类型
SQL Server数据库的备份和还原(或恢复)策略
讨论使用SQLCMD和SQL Server代理进行备份和还原自动化
了解SQL Server中的数据库快照与数据库备份
SqlPackage.exe –使用bacpac和PowerShell或Batch技术自动执行SQL Server数据库还原
SQL Server 2017中的智能数据库备份
如何在SQL Server中执行页面级还原
使用PowerShell和Windows Task Scheduler备份Linux SQL数据库
使用CloudSQL Server数据库备份和还原操作
SQL Server中的尾日志备份和还原
SQL Server数据库备份和还原报告
SQL Server中的数据库文件组和零碎还原
在SQL Server中进行内存优化的数据库备份和还原
了解SQL Server Docker容器中的备份和还原操作
使用Azure Data Studio在Docker容器上使用SQL Server 2017进行备份和还原操作
有关SQL Server数据库备份,还原和恢复的面试问题–第一部分
有关SQL Server数据库备份,还原和恢复的面试问题–第二部分
有关SQL Server数据库备份,还原和恢复的面试问题–第三部分
有关SQL Server数据库备份,还原和恢复的面试问题–第IV部分

参考资料 (References)

  • SQL: How to refresh Multiple SQL Databases with PowerShell SQL:如何使用PowerShell刷新多个SQL数据库
  • How to write a Batch File 如何编写批处理文件
  • sqlcmd Utility sqlcmd实用程序

附录(A) (Appendix (A))

PowerShell script

PowerShell脚本

# Get the path variables details into the variable
$PathVariables=$env:Path
#Print the path variable
$PathVariables #Check the path existence of the SqlPackage.exe and print its status IF (-not $PathVariables.Contains( "C:\Program Files (x86)\Microsoft SQL Server\140\DAC\bin"))
{
write-host "SQLPackage.exe path is not found, Update the environment variable"
$env:Path = $env:Path + ";C:\Program Files (x86)\Microsoft SQL Server\140\DAC\bin;"
}
#Get the list and ensure the update is made on the environment variable
#$PathVariables=$env:Path
#print the variable data
#$PathVariables #the input parameters $BackupDirectory="c:\SQLShackDemo\"
$DatabaseName="ApexSQLBackup"
#Source server name is SQL Server
$SourceServerName="HQDBT01"
#target instance is SQL Server on Linux Machine
$TargetserverName="10.2.6.51" #Prepare the targe filename
$dirName  = [io.path]::GetDirectoryName($BackupDirectory)
#set the filename, the database should be a part of the filename
$filename = "ApexSQLBackup"
#extension must be bacpac
$ext      = "bacpac"
#target filepath is a combination of the directory and filename appended with year month and day hour minutes and seconds
$TargetFilePath  = "$dirName\$filename-$(get-date -f yyyyMMddhhmmss).$ext"
#print the full path of the target file path
$TargetFilePath #Run the SqlPackage tool to export the databaseSqlPackage.exe /a:Export /ssn:$SourceServerName /sdn:$DatabaseName /tf:$TargetFilePath #Get the latest file in a given directory $NewestBacPacFile = Get-ChildItem -Path $dirName\$filename*.$ext | Sort-Object LastAccessTime -Descending | Select-Object -First 1
#print the latest bacfile name depending the name of the database
$file="$NewestBacPacFile" $FILE #check or drop for the database existence on the target SQL instance$DROPDATABASESQL=
@"
IF EXISTS (SELECT * FROM [sys].[databases] WHERE [name] = '$DatabaseName') DROP DATABASE $DatabaseName
"@
#Using sqlcmd, the dropdatabase sql is executed on the target instance. SQLCMD -S $TargetserverName -U SA -P thanVitha@2015 -Q $DROPDATABASESQL #Import the ApexSQLBackup database using sqlpackage.exeSqlPackage.exe /a:Import /sf:$file /tsn:$TargetserverName /tdn:$DatabaseName /tu:SA /tp:thanVitha@2015

附录(B) (Appendix (B))

Batch script

批处理脚本

@echo OFFSETLOCALREM The installation directory where SSDT tools
SET SQLDIR=C:\Program Files (x86)\Microsoft SQL Server\140\DAC\bin\
SET SQLPACKAGE="%SQLDIR%SqlPackage.exe"REM Specify the path of the bacpac files
SET DATABASEDIR=c:\SQLShackDemo\REM The database for export and import
SET DATABASENAME=ApexSQLBackupREM The SQL Server Source instance
SET SOURCESERVERNAME=HQDBT01REM The SQL Server target instance
SET TARGETSERVERNAME=10.2.6.51REM Get the datetime in a format that can go in a filename.
For /f "tokens=2-4 delims=/ " %%a in ("%date%") do (set mydate=%%c-%%a-%%b)
For /f "tokens=1-2 delims=/:" %%a in ("%TIME%") do (set mytime=%%a%%b)
echo %mydate%_%mytime%REM Export the database
%SQLPACKAGE% /a:Export /ssn:%SOURCESERVERNAME% /sdn:%DATABASENAME% /tf:%DATABASEDIR%%DATABASENAME%_%mydate%_%mytime%.bacpacREM Drop the target database in order to make import command to work succesfully
SET DropSQL=IF EXISTS (SELECT name FROM sys.databases WHERE name = '%DATABASENAME%') DROP DATABASE [%DATABASENAME%];REM Find the latest BACPAC file using the pattern matching technique
FOR /F "tokens=*" %%d IN ('DIR %DATABASEDIR%%DATABASENAME%*.bacpac /B /OD /A-D') DO SET BACPACNAME=%%dIF "%BACPACNAME%"=="" GOTO :bacpacfilenotfoundSET DATABASEFILE=%DATABASEDIR%%BACPACNAME%SQLCMD -S %TARGETSERVERNAME% -Q "%DropSQL%" -b -U SA -P thanVitha@2015
IF %ERRORLEVEL% NEQ 0 GOTO :error%SQLPACKAGE% /a:Import /sf:%DATABASEFILE% /tdn:%DATABASENAME% /tsn:%TARGETSERVERNAME% /tu:sa /tp:thanVitha@2015
IF %ERRORLEVEL% NEQ 0 GOTO :ERRORBLOCKGOTO :complete:bacpacnotfound
ECHO bacpac file doesn't exists
EXIT /B 1:ERRORBLOCK
ECHO import failure
EXIT /B 1:complete
ENDLOCAL

翻译自: https://www.sqlshack.com/sqlpackage-exe-automate-sql-server-database-restoration-using-bacpac-with-powershell-or-batch-techniques/

SqlPackage.exe –使用bacpac和PowerShell或Batch技术自动执行SQL Server数据库还原相关推荐

  1. 使用PowerShell和Windows任务计划程序备份Linux SQL Server数据库

    This article is an in-depth guide on how PowerShell can be used to maintain and manage SQL backup on ...

  2. powershell连接数据库_PowerShell 连接SQL Server 数据库

    PowerShell 通过ADO.NET连接SQL Server数据库,并执行SQL脚本.工作中整理的一小段脚本,后来没有用上,先记录在这里: 建立数据库连接 查询返回一个DataTatble对象 执 ...

  3. DBATools PowerShell SQL Server数据库备份命令

    In my earlier PowerShell SQL Server article, SQL Database Backups using PowerShell Module – DBATools ...

  4. 如何使用PowerShell创建简单SQL Server数据库登录对话框

    In this article, we'll be creating a SQL Server login form, as shown in the example below, using Pow ...

  5. 如何使用PowerShell处理SQL Azure数据库

    介绍 ( Introduction ) PowerShell is a shell used specially to automate administrative tasks. PowerShel ...

  6. PowerShell加密SQL Server的密码技术

    挑战 (Challenge) Automating SQL Server tasks with PowerShell can increase productivity and save time, ...

  7. 《PowerShell V3——SQL Server 2012数据库自动化运维权威指南》——1.5 安装SMO

    本节书摘来自异步社区出版社<PowerShell V3-SQL Server 2012数据库自动化运维权威指南>一书中的第1章,第1.5节,作者:[加拿大]Donabel Santos,更 ...

  8. 怎么重新启动协议服务器,如何启用或禁用服务器网络协议 (SQL Server PowerShell)

    SQL Server 安装程序安装了 TCP 和 Named Pipes 网络协议,但这些协议可能并未启用.可以使用以下 PowerShell 脚本或者使用 SQL Server 配置管理器启用或禁用 ...

  9. 在 PowerShell 中使用 SQL Server (1)

    一.概述 SQL Server 2012 提供了一个名为 sqlps 的 Windows PowerShell 模块,该模块用于将 SQL Server 组件导入到 Windows PowerShel ...

最新文章

  1. 腾讯商业数据分析师培养计划
  2. 数据结构 -- 搜索二叉树
  3. bootstrap 单选按钮点击change事件 只触发一次_微信支付新增“确认”按钮,付错钱将成为历史?...
  4. python 版本分布式锁
  5. Datawhale MySQL 训练营 Task2 查询语句
  6. SSM+easyUI(框架的搭建)
  7. 三星Galaxy S21开启预购:最早1月14日发布 售价约5300元起
  8. Linux命令之sed使用入门概述
  9. 主机与虚拟机不能通信
  10. Linux 文件内容替换命令
  11. c语言字符型211,C语言简单的字符驱动程序介绍
  12. Linux+Ubuntu
  13. 使用octomap_server将点云地图转化为八叉树地图和占据栅格地图
  14. 六 创建横断面图及采样线的编辑
  15. vue使用Swiper页面中有滚动条,为什么鼠标滚轮不起作用呢?
  16. vtkPolyData获取bounds点坐标
  17. 基于编码应用的主观全景视频质量评价数据库(译)
  18. vba excel 开发游戏_自动化神器—VBA
  19. html中页面整体居中,css实现网页内容整体居中的三种方法总结
  20. python的链式操作及类型推断(filter/map/find) 摘自国产开源库pyiter库

热门文章

  1. 网络商城html前端,商城 前端 html 页面 模板
  2. python socketserver模块详解_Python: SocketServer模块
  3. java中Token验证
  4. Python自动化之高级语法单例模式
  5. Android 内部存储安装apk文件实现
  6. C++常量的引用 const
  7. SWFUpload多文件上传,文件大小增大问题
  8. 【博客项目】—登录验证功能实现( 五)
  9. 优先股和普通股的区别是什么?
  10. 如果你昨天刚离职却忘了退公司的群,转天一早领导找你让你尽快退群,你会做何感想呢?