"We kind of build on one another," Cahill said. "Hitters say hitting's contagious. Maybe pitching's contagious, too."
After Ian Desmond hit an RBI single, Bryan Shaw got the last two outs in the eighth and David Hernandez worked a perfect ninth. Justin Upton had two hits and two RBI, and John McDonald and Miguel Montero each had two hits and an RBI for the Diamondbacks.
In other games *
At Houston, Chris Snyder hit a three-run homer and J.A. Happ (2-1) struck out seven over 6 1/3 innings to lead the Astros to a 6-3 win over the New York Mets.
* At St. Louis, Adam Wainwright (1-3) worked seven solid innings for his first win since September 2010, and the got big games from David Freese and Matt Holliday to beat the Pittsburgh Pirates, 10-7.
Freese's sixth home run and third in five games was a tiebreaking, three-run shot off Charlie Morton (1-2) in the fifth. Holliday homered in the sixth off Jared Hughes to cap a three-hit night with two RBI.
Before the game, the Cardinals activated utilityman Allen Craig from the 15-day disabled list. The 27-year-old has been rehabbing from right knee surgery. In other news, the Cards announced they will retire former manager Tony La Russa's No. 10 on May 11 before a game against visiting Atlanta.
* At Denver, Dee Gordon opened the game with a home run and Andre Ethier hit a three-run homer three batters later as the Los Angeles Dodgers defeated the Colorado Rockies, 7-6.
* At Cincinnati, The opener of a series between the Chicago Cubs and Cincinnati Reds was postponed because lines of thunderstorms moved through the area. The game wasn't immediately rescheduled.
San Diego lefthander Cory Luebke will miss his scheduled start Wednesday against Milwaukee after experiencing soreness in his left shoulder during his last start. The Padres plan to call up 16-year veteran Jeff Suppan from Triple A to start against the Brewers, one of his former teams.
* Pittsburgh recalled righthander Jared Hughes from Triple A Indianapolis, a day after demoting struggling Evan Meek to the minors. It is the third call-up this season for Hughes.
* San Francisco reliever Jeremy Affeldt was placed on the disabled list for a non-baseball injury for the second time in less than 8 months. The lefthander sprained his right knee Saturday night when he reached out to catch his 4-year-old son, Walker, who had jumped from the couched to hug his father. On Sept. 8, Affeldt sliced his nonthrowing hand nearly to the bone while separating frozen hamburgers.
* The $2 billion sale of the Los Angeles Dodgers was finalized, ending the tumultuous era under former owner Frank McCourt, who took the team into bankruptcy and had his private life made public through a nasty divorce battle with his ex-wife. The Dodgers were sold to Guggenheim Baseball Management, a group that includes former Los Angeles Lakers star Magic Johnson.