Mexes sent off while Marco misses penalty
It is the first time the Ukrainian champions have progressed this far in the tournament and they did it in some style.
Tomas Hubschmann opened the scoring with a superb backheel finish early in the game and Marco Borriello saw a penalty saved by Andriy Pyatov near the half-hour mark.
Philippe Mexes was sent off just before the break to make things even worse, Willian added a second after the restart and substitute Eduardo put the icing on the cake with a goal in the closing minutes of the game.
Roma were the first to threaten with John Arne Riise blasting a powerful shot wide of Pyatov's goal. Soon Shakhtar started to gather momentum and were looking increasingly likely to break the deadlock.
This happened in the 18th minute when Hubschmann backheeled a cross from Willian into the net, effectively putting the game out of Roma's reach as they needed to score three goals to go through.
Vincenzo Montella's men, however, could have drawn level from the spot ten minutes later when Henrik Mkhitaryan pulled down Borriello in the box. The ex-Milan striker, however, saw his weak penalty saved in the right corner by Pyatov.
Roma tried to take control of the game, but Shakhtar Donetsk were holding firm and were even looking to hit the Italian's on the break. Things went from bad to worse for Vincenzo Montella's men when Mexes was sent off for a needless foul in the centre of the pitch.
Borriello was left with a free-header in the 46th minute, but his finish was saved by Pyatov. Moments before half-time Daniele De Rossi elbowed Darijo Srna without the ball, but referee Howard Webb did not spot the incident and the stand-in captain was spared a red card.
Braziliant | Eduardo wraps up points to make history for Miners
Shakhtar Donetsk tried to keep the ball after the break and were looking to deal the killer blow. Roma were struggling to create anything in front of Pyatov and looked down and out and probably thinking about the game against Lazio at the weekend.
Willian killed the game off as a contest with wonderful goal in the 58th minute when his precise finish beat Doni and nestled into the top corner after being picked out by Darijo Srna inside the Italian's box.
The game was played out without much effort from either team as Roma were struggling to create anything aside from a handful of nasty fouls and Shakhtar Donetsk were happy to enjoy themselves on the pitch and keep the ball.
Still, the hosts managed to add a third through substitute Eduardo in the 87th minute to round off a wonderful evening for the Ukrainians at the Donbass Arena.
The opponents of the Miners in the next round will be determined later this month.
Follow the Champions League LIVE on Goal.com:
Commentaries, Stats, Player Ratings and much more,
Visit Goal.com Live Scores!
Visit Goal.com Live Scores!