LeGarrette Blount's four-yard touchdown run 20 comeback victory over the Vikings.
Blount had 71 yards and two scores on 13 carries for Tampa Bay (1-1), which overcame a dreadful first half to take its fifth straight decision over the Vikings (0-2).
"We had to rebound from a tough loss last week. This one is good for us," said Blount. "We came in from the half down 17-0 and we knew we just had to stick to our game plan."
Josh Freeman completed 22-of-31 passes for 243 yards with a TD and an interception, and Preston Parker caught six passes for 98 yards in the win.
Donovan McNabb bounced back from a poor performance in Week 1, in which he threw for just 39 yards, with an efficient 18-for-30 for 228 yards in a losing effort.
Adrian Peterson carried the ball 25 times for 120 yards and two touchdowns, and Toby Gerhart totaled 78 yards of offense in the first regular-season game at the Metrodome under the facility's new roof.
The old roof collapsed under the weight of snow accumulation last December, forcing the Vikings to play their final two home games of 2010 in different buildings. They played one at Ford Field in Detroit and another at the University of Minnesota's outdoor stadium.
Trailing by three with 6 1/2 minutes left in the game, Tampa Bay's defense held the Vikings to one first down and forced Minnesota to punt with a little over four minutes left in the game.
Chris Kluwe directed the punt out of bounds, and Tampa Bay took over at its own 39-yard line.
Freeman hit consecutive nine-yard passes to Parker before connecting for 14 yards with Kellen Winslow. An eight-yard completion to Earnest Graham put the Bucs at the 16-yard line and Freeman hit Parker over the middle on a 3rd-and-4 to make it 1st-and-goal at the four-yard line.
Blount then took a handoff to the right side and rumbled in for a score to put Tampa Bay ahead, 24-20, with 31 seconds left in the game.
Percy Harvin mishandled the ball at the eight-yard line on the kickoff and could only manage to get to his own 10.
Peterson took a 10-yard pass out of bounds before the Viking tried to move the ball down field with a series of laterals, but Harvin's lateral hit the ground as time expired and was recovered by the Buccaneers to seal the win.
"We gave two games away. This second one is uncalled for," Peterson said about the loss. "We need to get a reality check."
After swapping punts for the first three possessions between the teams, Minnesota worked a 12-play, 90-yard drive that resulted in a Peterson one-yard score with two seconds left in the first quarter. Gerhart's 31-yard rush off the left side of the line highlighted the drive.
The Vikings then forced a three-and-out from the Buccaneers. Faced with 3rd- and-12 at his own 36, McNabb scrambled down the left sideline for a 13-yard gain and a new set of downs.
McNabb hit Harvin and Visanthe Schiancoe on 19- and 15-yard strikes, but the drive stalled at the Tampa Bay four-yard line, resulting in a Ryan Longwell 22-yard field goal with just over five minutes left in the half.
On the Vikings' next possession, a 19-yard run by Peterson and a 42-yard screen pass to Gerhart set up Peterson's nine-yard TD run with under a minute to go in the half to give Minnesota a 17-0 lead.
Tampa Bay came up with a defensive stop on Minnesota's first possession of the second half thanks to a holding call on what would have been a third-down conversion for the Vikings.
Parker returned the punt to the Vikings 40-yard line, and Freeman's 17-yard pass to Luke Stocker set up Blount's 27-yard touchdown run to make it a 17-7 game.
On the ensuing kickoff, Tampa Bay recovered a surprise onside kick at their own 47-yard line. Blount hurdled a defender during a 13-yard gain on the first play of the drive and Freeman hit Parker for a 17-yard gain three plays later, but Freeman was intercepted by Husain Abdullah in the end zone to put an end to the drive.
Later in the third, a Graham fumble on his own 23-yard line was called back because of an offside penalty on the Vikings. The Buccaneers then got deep into Vikings territory on a 51-yard catch-and-run by Parker. Freeman hit Mike Williams for a 17-yard TD catch, but the play was nullified because of an illegal shift penalty on Tampa Bay. The Bucs had to settle for a 36-yard field goal by Connor Barth with 29 seconds left in the third.
Minnesota took its next drive into the Buccaneers' red zone, helped by a 23- yard pass interference penalty on Mason Foster. A 29-yard field goal by Longwell made the score 20-10.
On a 3rd-and-1 on their own 41, Freeman hit Dezmon Briscoe over the middle for a leaping 19-yard gain. Jared Allen was called for roughing the passer on the play, placing the ball on the Minnesota 25, and Freeman hit Arrelious Benn in the corner of the end zone on the next play to make it a three-point game with 6:39 left in the fourth.
Tampa Bay recorded just 62 total yards and three first downs in the first half...Minnesota is 0-2 for the second straight year...Peterson caught two passes for 21 yards.