ST. LOUIS -- Another stingy start by Chris Carpenter got wasted by the St. Louis Cardinals.
Chad Tracy hit a tiebreaking two-run double in a four-run seventh inning and the Arizona Diamondbacks turned three St. Louis errors into three unearned runs against last year's NL Cy Young winner in a 7-6 victory on Sunday.
"It was just an ugly game both ways," Diamondbacks manager Bob Melvin said. "We kicked it around, they kicked it around. Both sides gave the other side more outs than they should."
Johnny Estrada had two hits and three RBI while Luis Gonzalez went 4-for-5 and scored two runs for the Diamondbacks, who avoided a three-game sweep. Gonzalez hit his 507th double in the ninth, snapping a tie with Babe Ruth for 38th place on the career list.
"It's pretty exciting when you look at some of the names and stuff like that," Gonzalez said. "I'm more excited that we got the win."
Estrada and Shawn Green had RBI singles in the seventh, giving the Diamondbacks the cushion they needed after the Cardinals scored three in the bottom of the seventh. Arizona is 4-14 against the Cardinals the last four seasons.
Carpenter has a mismatched 3-2 record and 1.98 ERA, and in his four no-decisions he's allowed two earned runs in 26 innings. Last year he was 21-5 with a 2.83 ERA.
"It just shows how hard and how tough it is to win the amount of games I won last year," Carpenter said. "It's just the way the game is.
"I've probably thrown the ball better this year so far than I did last year, but I'm 3-2."
Miguel Batista also gave up three runs, none of them earned, as the teams combined for five errors. The Cardinals tied a season high with their second three-error game in five days, and a two-out fielding error by Diamondbacks shortstop Craig Counsell opened the door for a three-run sixth for St. Louis that tied it at 3-3.
A throwing error by Tracy, the third baseman, helped the Cardinals cut the gap to a run in the seventh. Albert Pujols had a sacrifice fly in the inning for his major league-leading 48th RBI, and pinch-hitter Larry Bigbie had a run-scoring infield hit.
Eric Byrnes and Counsell singled off Adam Wainwright (1-1) to start the seventh, then moved up on Damion Easley's sacrifice. Tracy greeted Randy Flores with a drive over the head of center fielder Jim Edmonds that bounced into the stands.
Yadier Molina's two-run single in the sixth had tied it for the Cardinals. They lost for the second time in nine games overall.
Luis Vizcaino (2-2) struck out pinch-hitter So Taguchi with the bases loaded to end the sixth. Jose Valverde worked the ninth for his 11th save in 12 chances.
Pujols' first error of the season in the fifth led to the game's first run. Jeff DaVanon hit a leadoff double, went to third when Pujols dropped a throw to first by second baseman Aaron Miles, and scored on Counsell's grounder.
Shortstop David Eckstein's fielding error in the sixth led to two more unearned runs that put the Diamondbacks ahead 3-0. Eckstein got to Conor Jackson's grounder up the middle, but it deflected off his glove and he tossed late to second for a potential forceout. With two outs, Estrada hit a two-run single.
Batista held the Cardinals hitless until Miles' infield single with two outs in the fifth. Carpenter gave up five hits in six innings.
"I didn't care about Carpenter," Batista said. "I was worried more about Pujols and the other guys. I don't worry about pitchers."
Diamondbacks 2B Damion Easley made a nice running catch in shallow center field, twisting to make the grab that robbed Scott Rolen of a hit in the second. Cardinals LF Scott Spiezio robbed Easley in the fifth with a lunging catch. ... Wainwright allowed two runs in one-third of an inning. Entering the game, he had given up one run in 16 2/3 innings all season. ... Jackson was 0-for-4, ending a 13-game hitting streak. ... Batista had five walks, tying a season high for Arizona pitchers.