Could not find database engine startup handle error means SQL Server installation was able to install SQL Server services but when installation is trying to start SQL Server services its failing.
A simple solution I mentioned In This Technet Article is
Please go to SQL Server configuration manager and locate the SQL Server services
Right click on SQL Server express service and select properties and change startup account to Local System and select apply then OK. This will start services with Local system account privilege.
Certain reasons which can cause this error.
The account which user selected on Server Configuration page window ( during installation) is somehow not able to bring SQL Server database engine services online. Either is lacks privilege or it is corrupted. During installation of database engine services SQL Server tries to bring online database services as a internal process but due to startup account either corrupt or not having appropriate privileges it fails to do so and ultimately installation fails.
Other reason is when installation fails first time due to some reason and user uninstall failed installation from add remove program, the un-installation leaves account in broken state so any further attempt to install flashes this error message.
The reason can be also that SQL Server installation was successful in installing SQL Server and its services but due to some other limitation in system or other system related errors SQL Server is not able to come online.
In Your case reason is
2015-02-08 19:55:06.16 spid14s Error: 17190, Severity: 16, State: 1.
2015-02-08 19:55:06.16 spid14s Initializing the FallBack certificate failed with error code: 1, state: 20, error number: 0.
2015-02-08 19:55:06.16 spid14s Unable to initialize SSL encryption because a valid certificate could not be found, and it is not possible to create a self-signed certificate.
2015-02-08 19:55:06.16 spid14s Error: 17182, Severity: 16, State: 1.
To solve this Either start SQL Server service account with Local System or Create a new local account having admin privileges on the local machine and try starting SQL Server service with that account. This Blogs.msdn article says such error can come if account profile is corrupt
As you are already aware running SQL Server service with account having admin privileges is not advised. In such case for time being you can run the account with local system but you can use Configure Windows Service Account and Permissions to create account with minimum privileges.
EDIT:
FCB::Open failed: Could not open file
E:\sql12_main_t.obj.x86Release\sql\mkmastr\databases\mkmastr.proj\MSDBData.mdf for file number 1. OS error: 2(The system cannot find the file
specified.).
2015-02-09 10:42:45.12 spid8s Error: 5120, Severity: 16, State:
101.
2015-02-09 10:42:45.12 spid8s Unable to open the physical file
"E:\sql12_main_t.obj.x86Release\sql\mkmastr\databases\mkmastr.proj\MSDBData.mdf".
Operating system error 2: "2(The system cannot find the file
specified.)".
2015-02-09 10:42:45.12 spid8s Error: 17207, Severity: 16, State:
1.
As per below logs SQL Server is searching for msdb file at location
E:\sql12_main_t.obj.x86Release\sql\mkmastr\databases\mkmastr.proj\
Can you manually move both msdb data file and log file to above location. I know this is not your desired location but let first SQL Server come online then we can use alter database command and change location to what ever suits you. To me this is bug and is happening because SQL Server is unable to ,somehow, decide the location of msd files and so choosing random location.
Revert if this does not works
If you are running the GUI on the same machine as the mssql-server service, then you can use localhost for the address (127.0.0.1). If you are running the GUI from a different workstation, you'll need the IPv4 address of the machine where the mssql-server service is running. You can obtain that by running ifconfig
from a Linux terminal prompt. Sample output from ifconfig
:
eth0: flags=4163 mtu 1500
ether 00:15:5d:89:45:01 txqueuelen 1000 (Ethernet)
RX packets 423 bytes 137827 (134.5 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
eth1: flags=4163 mtu 1500
inet 192.168.200.11 netmask 255.255.255.0 broadcast 192.168.200.255
inet6 fe80::2f70:9d15:8e7d:16cb prefixlen 64 scopeid 0x20
ether 00:15:5d:89:45:04 txqueuelen 1000 (Ethernet)
RX packets 20138 bytes 2006000 (1.9 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 19756 bytes 30125657 (28.7 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73 mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10
loop txqueuelen 1 (Local Loopback)
RX packets 3239 bytes 361340 (352.8 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 3239 bytes 361340 (352.8 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
In the output above, the bit that is important is the "inet" address, which in my case is 192.168.200.11.
The default port for SQL Server is 1433 - unless you chose a different port in mssql-conf use that port number. Ensure the firewall on the Linux box is allowing outside connections via 1433, if you intend to connect to SQL Server via the network.
Use sa
as the login, and the password you specified during SQL Server setup via the sudo /opt/mssql/bin/mssql-conf setup
command.
I would leave the domain and unix socket path blank.
Once you have connected to the instance, you may want to configure a non-sa account. Do that with the CREATE LOGIN
statement.
Just an FYI, you can use SQL Server Management Studio to connect to SQL Server on Linux, if that's your desire. Alternately, you can download Microsoft's native GUI client for Linux (and Windows & Mac), Azure Data Studio, here.
Best Answer
I was istalling it on a docker container based on the debian:buster image,and i had the following error:
So visited the python script at line 930:
vim +930 /opt/mssql/lib/mssql-conf/mssqlconfhelper.py
And I saw this
if
condition:Since I'm running as root and it enters the first condition 'runAsRoot' the script run the following
return subprocess.call([sudo, "-EH", pathToScript])
I changed that line to:
return subprocess.call([pathToScript])
After that, the setup command worked for me.
/opt/mssql/bin/mssql-conf setup