Brian Elliott made 27 saves in his 10th straight start for Ottawa, which won its 12th in 13 games. The Senators lost 5-0 in Toronto on Saturday to end their team-record winning streak at 11.
Spezza, who assisted on Alex Kovalev's power-play goal in the first, got his 13th of the season to give Ottawa its first lead 16:37 into the second. Jarkko Ruutu scored midway through the middle period to draw the Senators even for the second time in the game.
Elliott came up with two big stops with 18.7 seconds remaining as Calgary pressed for the tying goal with Miikka Kiprusoff pulled despite a penalty to Flames defenseman Jay Bouwmeester.
The Senators, who haven't lost at Scotiabank Place in a month, won their season-high sixth in a row at home since Jan. 9, when they lost 3-0 to Florida in the midst of a five-game skid that preceded their record winning streak.
Niklas Hagman and Matt Stajan each had a goal and an assist, and Jarome Iginla also had two points for Calgary, which ended a 1-1-1 road trip.
Kiprusoff stopped 28 shots in his 11th straight start for the Flames, including a sensational lunging stick save in the second to deny Jonathan Cheechoo's wraparound attempt moments before Ruutu scored at 9:36 to tie it at two.
Spezza, who had a six-game goal streak snapped Saturday, put Ottawa ahead with 3:23 left in the second when he fired into an open left side after Cheechoo's pass deflected to him off Flames defenseman Adam Pardy's stick.
Elliott put himself in an awkward position when he came out to play a loose puck midway through the first. The Senators goalie beat Calgary's Ales Kotalik to the puck, but flipped it directly to Flames center Daymond Langkow and had to backpedal toward the left corner to protect his net.
Hagman gave Calgary its first of two one-goal leads with his 21st goal 16:51 in. The Swedish left wing moved into the slot after receiving Iginla's feed to drive a low slap shot past Elliott for his first goal in five games with the Flames since he was acquired along with Stajan, Jamal Mayers and Ian White in the Jan. 31 trade that sent Dion Phaneuf to Toronto.
Kovalev drew Ottawa even at one just 19 seconds later when he got credit for his 15th goal after his shot went in off Langkow's skate at 17:10, just nine seconds after White was penalized for a delay of game.
Iginla got his second assist when Stajan, who assisted on Hagman's goal, added his 18th goal 3:18 into the second to restore Calgary's one-goal lead at 2-1.
Kiprusoff lunged and stuck out the paddle of his goalie stick to stop Cheechoo's wraparound attempt just over eight minutes into the second. A brief video review confirmed that the puck did not cross the goal line.
Flames LW Eric Nystrom has gone 42 games without scoring a goal. Nystrom, who has 11 points in 60 games, has been held to four assists since he scored his fifth goal of the season in a 5-2 win in Toronto on Nov. 12. … Kovalev, who has also played for the New York Rangers, Pittsburgh and Montreal, reached the 400-goal milestone on Dec. 12 while recording a hat trick in a 4-2 win over Carolina. He has 409 goals and 982 points in 1,208 regular season games. … Cheechoo played his 500th game.